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の書き方から学ぶ、軽量で堅牢なコンテナイメージの作り方
それでは、また明日お会いしましょう!