Day 2: Dockerの基本コマンド総ざらい:イメージとコンテナを徹底理解
皆さん、こんにちは!「「Dockerはわかるけど…」から卒業!AWSでコンテナを動かすための30日集中講座」のDay 2へようこそ。
昨日、コンテナとDockerがなぜ現代のソフトウェア開発に不可欠なのか、その大きな理由を学びました。今日からは、いよいよ手を動かしていきます。
Dockerを使いこなす上で、絶対に避けて通れないのが「イメージ」と「コンテナ」という2つの概念です。これらはDockerの根幹をなすものであり、車の「設計図」と「実物」の関係に例えると非常に分かりやすいです。
- Dockerイメージ: アプリケーションの実行に必要なすべての情報(コード、ライブラリ、設定など)をパッケージ化した、読み取り専用のテンプレートです。これは車の「設計図」に当たります。
- Dockerコンテナ: Dockerイメージから作成され、実際にアプリケーションが動作する実行可能なインスタンスです。これは「設計図」に基づいて組み立てられた、実際に動く「車」そのものです。
この関係性を頭に置きながら、基本コマンドを一つずつ見ていきましょう。
1. コンテナのライフサイクルと基本コマンド
Dockerコンテナは、以下のシンプルなライフサイクルを持っています。
作成 ➡️ 実行中 ↔️ 停止 ➡️ 削除
docker run
、docker start
、docker stop
、docker rm
といったコマンドは、この状態遷移を管理するために使われます。
2. まずは「イメージ」を操るコマンド
コンテナを作成するためには、まず元となる「イメージ」が必要です。ほとんどの場合、Docker Hubという公式のレジストリから、他の開発者が公開しているイメージをダウンロードして利用します。
docker pull
: イメージのダウンロード
docker pull
コマンドは、リモートのリポジトリからイメージをローカルに取得するために使います。
# 例: nginx Webサーバーのイメージをダウンロード
docker pull nginx
# 特定のバージョンを指定してダウンロード
docker pull ubuntu:20.04
タグを指定しない場合は、デフォルトでlatest
が適用されます。latest
タグは便利なタグですが、その内容はプロジェクトの運用方針によって異なります。本番環境では、予期せぬ変更を避けるため、具体的なバージョンのタグを指定することが推奨されます。
docker images
: ローカルイメージの一覧表示
ローカルに保存されているイメージの一覧を確認するには、docker images
を使います。
docker images
このコマンドを実行すると、以下の情報が表示されます。
- REPOSITORY: イメージ名
- TAG: バージョン
- IMAGE ID: イメージを一意に識別するID
- CREATED: イメージが作成されてからの経過時間
- SIZE: イメージのサイズ
docker rmi
: イメージの削除
不要になったイメージを削除するには、docker rmi
を使います。
# イメージ名とタグで削除
docker rmi nginx:latest
3. 次に「コンテナ」を操るコマンド
イメージをダウンロードしたら、次はそれを基にコンテナを起動します。
docker run
: コンテナの作成と起動
docker run
は、Dockerコマンドの中で最も重要で、多機能なコマンドです。イメージを指定してコンテナを作成し、すぐに実行します。
# 例: バックグラウンドでnginxコンテナを起動し、ポートフォワードを設定
docker run -d --name my-nginx -p 8080:80 nginx
-
-d
(--detach
): コンテナをバックグラウンド(デタッチモード)で実行します。 -
-p
(--publish
): ホストマシンとコンテナのポートをマッピングします。構文は「ホストポート:コンテナポート」です。上記の例では、ホストの8080
番ポートへのアクセスを、コンテナの80
番ポートに転送します。 -
--name
: コンテナにわかりやすい名前を付けます。
実際の開発でよく使う docker run
オプション
-
環境変数の設定:
-e
オプションで環境変数を渡します。docker run -e DB_HOST=db_server -e DB_USER=admin my-app
-
ボリュームマウント:
-v
オプションでホストのディレクトリをコンテナにマウントします。docker run -v /Users/user/my-data:/app/data my-app
-
作業ディレクトリの指定:
-w
オプションでコンテナ内の作業ディレクトリを指定します。docker run -w /app ubuntu /bin/bash
docker ps
: 実行中のコンテナ一覧表示
現在実行中のコンテナを確認するには、docker ps
を使います。
docker ps
-
-a
(--all
): 実行中かどうかにかかわらず、停止中のコンテナも含めてすべてのコンテナを表示します。
docker start
/ docker stop
: コンテナの起動と停止
停止したコンテナを再起動するにはdocker start
を、実行中のコンテナを停止するにはdocker stop
を使います。
# 名前でコンテナを起動
docker start my-nginx
# 名前でコンテナを停止
docker stop my-nginx
docker rm
: コンテナの削除
不要になったコンテナを削除するには、docker rm
を使います。コンテナを削除する際は、先にdocker stop
で停止させておくのが基本です。
4. 実行中のコンテナをデバッグする
docker run
でコンテナを起動したら、そのコンテナ内でさらにコマンドを実行したい場合があります。
docker exec
: 実行中のコンテナ内でコマンドを実行
docker run
は新しいコンテナを作成して実行するのに対して、docker exec
は既存の実行中コンテナ内でコマンドを実行します。デバッグや設定確認の際によく使用されます。
# 例: 実行中のnginxコンテナでbashシェルを起動
docker exec -it my-nginx /bin/bash
このコマンドを実行すると、ターミナルがコンテナ内に切り替わり、直接操作できます。exit
と入力して抜けても、コンテナ自体は停止しません。
docker logs
: コンテナのログを見る
コンテナの標準出力(stdout
)と標準エラー出力(stderr
)のログを確認するには、docker logs
を使います。
# 例: nginxコンテナのログを表示
docker logs my-nginx
# リアルタイムでログを追跡
docker logs -f my-nginx
5. まとめ:本日のスキルチェック
今日はDockerの基本コマンドを学びました。以下のコマンドを自分のPCで試して、挙動を確かめてみましょう。
-
docker pull
で任意のイメージ(例:httpd
)をダウンロードする。 -
docker images
でダウンロードしたイメージが表示されることを確認する。 -
docker run
でコンテナをバックグラウンド起動し、ポートフォワードを設定する。 -
docker ps
とdocker ps -a
でコンテナの状態を確認する。 -
docker stop
とdocker start
でコンテナを停止・再起動してみる。 -
docker logs
とdocker exec
でコンテナのデバッグを行う。 -
docker rm
でコンテナを削除し、docker rmi
でイメージを削除する。
これらのコマンドをマスターすれば、Dockerをローカル環境で自由に操れるようになります。
次回の予告
明日は、Dockerの真髄とも言える「Dockerfile」について学びます。Dockerfileを使えば、自分で独自のコンテナイメージを作成し、アプリケーションの環境をコードとして管理できるようになります。
Day 3: Dockerfileの書き方から学ぶ、軽量で堅牢なコンテナイメージの作り方
それでは、また明日お会いしましょう!