近年、ソフトウェア開発・運用の現場では、コンテナ化技術が主流になりつつあります。その中で最も一般的であり、導入もしやすいのがDockerです。本記事では、Dockerを初めて触る方向けに、その概要やインストール、基本的な使い方、さらには活用例や注意点まで幅広く解説します。
1. Dockerとは何か
1-1. コンテナ型仮想化技術
Dockerはコンテナ技術を用いて、アプリケーションを軽量かつ独立した環境で実行できるようにするためのプラットフォームです。伝統的な仮想マシン(VM)は、ホストOSの上にゲストOSを丸ごと立ち上げるのに対し、DockerではホストOSのカーネルを共有しつつ、アプリケーションごとに“コンテナ”という独立した空間を作ります。
1-2. 仮想マシンとの違い
- 起動速度: コンテナはイメージから非常に短時間で起動します。
- リソース効率: OS全体をまるごと複製しないため、メモリやディスクを効率的に使えます。
- ポータビリティ: コンテナイメージがどの環境でも同じように動作するため、開発環境から本番環境への移行が容易になります。
2. Dockerのインストール
Dockerを始めるためには、まずDocker Engine(Docker Desktopなど)のインストールが必要です。
- Windows: Docker Desktop for Windows を利用。Windows 10以降ではWSL2を利用することで快適に動作します。
- macOS: Docker Desktop for Mac を利用。
- Linux: OSごとにリポジトリを追加し、
sudo apt install docker.io
などでインストール可能。
インストールが完了したら、ターミナルやコマンドプロンプトで下記のコマンドを実行してみましょう。
docker version
インストールされているDockerのバージョン情報が表示されれば成功です。
3. Dockerの基本概念
3-1. イメージ(Image)
コンテナの設計図のようなものです。特定のアプリケーションやOSが含まれており、このイメージをもとにコンテナを起動します。Docker Hubなどで公開されている公式イメージを利用することが多いです。
3-2. コンテナ(Container)
実際に動作しているアプリケーションの実行環境です。イメージを実行することで作られ、独立したプロセスとしてホスト上で動きます。
3-3. Dockerfile
カスタムイメージを作成するためのレシピファイルです。ベースイメージの選択や、ファイルのコピー、ライブラリのインストールなどを記述して、自分専用のイメージをビルドします。
3-4. Docker Hub
世界中のコンテナイメージが集まるリポジトリサービスです。たとえば docker pull ubuntu
のように、公開されているイメージを取得できます。
4. Dockerの基本操作
ここでは、Dockerの代表的なコマンドを紹介します。まずはDocker Hubからイメージを取得し、それをコンテナとして動かす流れを見てみましょう。
4-1. イメージの取得(Pull)
docker pull ubuntu
ubuntu
という名前のイメージをDocker Hubからダウンロードします。
4-2. コンテナの起動(Run)
docker run -it --name my-ubuntu ubuntu /bin/bash
-it
: 対話モードでコンテナを起動--name
: コンテナ名を指定(例:my-ubuntu
)ubuntu /bin/bash
:ubuntu
イメージを使い、/bin/bash
を実行
このコマンドを実行すると、コンテナ内のbashシェルが起動し、コンテナ内に入った状態でコマンドが打てるようになります。
4-3. コンテナの一覧表示(ps)
docker ps
現在動作中のコンテナ一覧が表示されます。停止したコンテナも含めて表示したい場合は以下を使用します。
docker ps -a
4-4. コンテナの停止(stop, kill)
docker stop my-ubuntu
コンテナ名(またはID)を指定して停止します。停止に時間がかかる場合などは kill
コマンドで強制終了させることもあります。
4-5. イメージやコンテナの削除(rmi, rm)
## イメージ削除
docker rmi ubuntu
## コンテナ削除
docker rm my-ubuntu
5. Dockerfileでイメージを作成する
Dockerfileを使うと、自分専用の環境を含んだイメージを作成できます。以下の例では、python:3.9
イメージをベースに、ライブラリをインストールし、アプリケーションを配置したイメージをビルドします。
5-1. Dockerfileの例
# ベースイメージにPython 3.9を指定
FROM python:3.9
# 作業ディレクトリを /app に設定
WORKDIR /app
# ローカルのrequirements.txtをイメージ内にコピー
COPY requirements.txt .
# requirements.txtを使ってライブラリをインストール
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションファイルをコピー
COPY . .
# コンテナ起動時に実行するコマンドを指定
CMD ["python", "app.py"]
5-2. ビルドと実行
# 同じディレクトリ内にDockerfileがあると仮定
docker build -t my-python-app .
-t
オプションでイメージ名(my-python-app
)を指定します。ビルドが完了したら、以下のコマンドでコンテナを起動できます。
docker run -d -p 8000:8000 my-python-app
-d
: バックグラウンドで実行-p 8000:8000
: ホストのポート8000をコンテナ内部の8000ポートにマッピング
6. Docker Composeによる複数コンテナ管理
アプリケーションによっては、Webサーバとデータベースなど複数のコンテナが連携して動く場合があります。そんなときに便利なのがDocker Composeです。YAMLファイルでコンテナの設定を一括管理できるため、開発・デプロイが非常に楽になります。
6-1. docker-compose.ymlの例
version: '3'
services:
web:
build: ./web
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: sample_db
MYSQL_USER: sample_user
MYSQL_PASSWORD: sample_pass
ports:
- "3306:3306"
このようにComposeファイルを用意することで、docker compose up -d
を実行するだけでWebサーバとDBのコンテナを同時に立ち上げられます。
7. Docker活用の実践例
7-1. CI/CDパイプラインへの組み込み
- ビルド環境の均一化: テストを実行する環境をDockerコンテナとして定義し、常に同じ条件でビルド・テストを実行できるようにします。
- スケールアウト: CIサーバの負荷に合わせてコンテナ数を増やすことで、並列ビルド・テストが可能になります。
7-2. 開発環境の共有
- チーム開発: チームメンバー全員が同じDockerイメージを利用することで、「動く環境が人によって違う」という問題が解消されます。
- 環境の復元: Dockerfileさえあれば、再現性の高い環境構築が容易です。
7-3. 本番環境へのデプロイ
- Kubernetesなどのオーケストレーション: Dockerでコンテナ化したアプリケーションをKubernetesクラスタへデプロイし、自動スケーリングやロールアウト更新を行うケースが増えています。
- 軽量化: 仮想マシンよりも高速にスケールできるため、負荷に応じてコンテナを増減させる運用がしやすいです。
8. 導入にあたっての注意点
- セキュリティ: コンテナはホストOSのカーネルを共有するため、ホストへの権限が大きいユーザーでコンテナを実行するとセキュリティリスクが高まります。必要最小限の権限で動かすようにしましょう。
- イメージのサイズ: イメージが大きくなると、ビルドやデプロイに時間がかかります。不要ファイルの削除や、マルチステージビルドの利用でイメージサイズを抑えましょう。
- ネットワークの設計: 複数のコンテナを連携させる場合は、ネットワークの命名やポート競合などに注意が必要です。
- リソース制限: コンテナ単位でCPUやメモリの割り当てを制限しておかないと、ホストに負荷がかかりすぎることがあります。
9. まとめ
Dockerは、開発環境から本番環境まで同じ環境を再現しやすく、効率的にアプリケーションを動かせる強力な技術です。
- 基本的なコマンドを覚えることで、簡単にコンテナを起動・停止できる
- DockerfileやDocker Composeを使うことで、複数のコンテナやカスタム環境を管理しやすい
- セキュリティやリソース管理などの注意点を理解することが重要
コンテナ化のメリットを存分に生かして、開発・運用プロセスを効率化してみてください。
追記:学習リソース
- Docker公式ドキュメント (英語)
- Docker公式ドキュメント (日本語)
- Docker Hub:さまざまな公式イメージが登録されているリポジトリ
Dockerを理解し実務に活かす第一歩は、小さな実験環境を立ち上げて実際に触ってみることです。まずは公式イメージやサンプルDockerfileを使って、コンテナ技術のメリットを体験してみましょう。慣れてきたらオーケストレーションツールやCI/CDの導入など、より高度な活用へと進んでいけるはずです。
以上、Dockerの基本から導入、実践的な活用例までを概観しました。ぜひコンテナ技術を取り入れて、より柔軟かつ効率的な開発・運用ライフサイクルを実現してください。
コメント