初心者向け学習方法一覧はこちら
はじめに
前回は、Docker上でアプリケーションを実行する方法について学習しました。
この記事では、Dockerの基本操作となるコマンドを解説します。 大きく「Dockerイメージ操作」と「Dockerコンテナ操作」の2種類に分けて解説します。
Dockerイメージの操作
ここではDockerイメージをビルドするためのdocker image build
を始めとしたイメージ操作の基本的なコマンドを紹介します。
より詳細を調べたいときには以下のようにhelpを確認すると、公式のより細かい情報が得られるので活用してください。
$ docker help # dockerコマンドのhelpを表示
$ docker image --help # docker iamgeコマンドのhelpを表示
$ docker image build --help # docker image buildコマンドのhelpを表示
docker image build
docker image build
はDockerfileをもとにDockerイメージを作成するコマンドです。
docker image build -t イメージ名[:タグ名] Dockerfile配置ディレクトリのパス
上記の記入例には、-t
オプションも含めています。 docker image build
にはいくつかのオプションがありますが、 -t
は実際にDockerを利用する上ではほぼ必須で、イメージ名とタブ名を指定する際に使用します。
docker image build
では必ずDockerfileを与える必要があるので、ディレクトリにDockerfileが存在しないと正しく実行できません。
例えば、Dockerfileが配置されているディレクトリをカレントディレクトリとして実行する際には以下のようなコマンドになります。
$ docker image build -t example/echo:latest .
docker search
docker search
コマンドで、Docker Hubのレジストリに登録されているリポジトリを検索できます。
docker search [options] 検索キーワード
例えば、 postgres
を検索キーワードにして検索をすると、その結果が一覧で表示されます。-limit
を指定することで表示件数の制限が可能です。
$ docker search postgres --limit 5
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
postgres The PostgreSQL object-relational database sy… 11218 [OK]
bitnami/postgresql Bitnami PostgreSQL Docker Image 150 [OK]
circleci/postgres The PostgreSQL object-relational database sy… 29
bitnami/postgresql-repmgr 18
bitnami/postgres-exporter 7
docker image pull
DockerレジストリからDockerイメージをダウンロードしてくるには、 docker image pull
コマンドを利用します。
docker image pull [options] リポジトリ名[:タグ名]
指定するリポジトリ名とタグ名はDocker Hubに存在するものを指定します。例えばpostgresの場合は以下のようになります。タグ名を省略した場合はデフォルトタグ(多くの場合は latest
)が利用されます。
% docker image pull postgres:latest
latest: Pulling from library/postgres
461246efe0a7: Pull complete
...
f3a57056b036: Pull complete
Digest: sha256:3e2eba0a6efbeb396e086c332c5a85be06997d2cf573d34794764625f405df4e
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest
docker image ls
docker image ls
ではコマンドの実行対象であるDockerホストに保持されているイメージの一覧を表示します。
ここで言うDockerホストとは、Dockerデーモンを実行しているホスト環境のことを指しています。docker image pull
でダウンロードしてきたイメージはもちろん、docker image build
でビルドしたイメージも表示されます。
docker image ls [options] [リポジトリ[:タグ]]
% docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres latest 1133a9cdc367 5 days ago 376MB
ここで表示されているIMAGE ID
はイメージのIDです。コンテナを指すCONTAINER ID
とは別物ですので混同しないように注意してください。
docker image tag
docker image tag
はDockerイメージの特定のバージョンにタグ付けを行います。
Dockerイメージのタグはある特定のイメージIDを持つDockerイメージを識別するために利用するものです。例えば、特定のアプリケーションバージョンに対応したイメージであることを示す、リリース番号をつけてイメージを管理しやすくするために使われます。
docker image tag 元イメージ名[:タグ] 新イメージ名[:tag]
例えば、 example/hello
のlatest
に0.1.0
のタグを付ける場合には以下のようになります。
$ docker image tag example/hello:latest example/echo:0.1.0
docker image push
docker image push
コマンドは保持しているDockerイメージをDocker Hubをはじめとするレジストリに登録できます。
docker iamge push [options] リポジトリ名[:タグ]
Docker Hubに対するpushの場合、push
の前にdocker login
を済ませておく必要があります。
$ docker image push protogram/hello:latest
Dockerコンテナの操作
ここからはDockerコンテナに関する基本的な操作コマンドを解説します。
操作方法の前に、Dockerコンテナのライフサイクルについて知っておく必要があります。Dockerコンテナは実行中・停止・破棄の3つの状態のいずれかに分類されます。これをDockerコンテナのライフサイクルと呼びます。
- 実行中
docker container run
で指定されたDockerイメージを基にコンテナが作成され、Dockerfileで定義されているアプリケーションの実行を開始します。このアプリケーションが実行中なら、Dockerコンテナは実行中にあるということになります。 - 停止 実行中のコンテナはユーザーが明示的にコンテナを停止するか、コンテナで実行されているアプリケーションが正常・異常を問わず終了した場合に自動的に停止します。
- 破棄 停止したコンテナは明示的に破棄しない限りディスクに残り続けます。頻繁にコンテナの実行・停止を繰り返すような環境ではどんどんディスクを専有していくことになるため、完全に不要なコンテナは破棄しておくことが望ましいです。
docker container run
docker container run
はDockerイメージからコンテナを作成、実行するコマンドです。
docker container run [options] イメージ名[:タグ] [コマンド] [コマンド引数...]
例えば、example/echo:latest
からコンテナをバックグラウンドで実行するには以下のように実行します。
$ docker container run -d -p 9000:8080 example/echo:latest
docker container ls
docker container ls
は実行中のコンテナ及び終了したコンテナの一覧を表示するためのコマンドです。
docker container ls [options]
docker container ls
の確認用に次のようにコンテナを2つ実行します。
docker run -d --name sleep1 java:8 /bin/sh -c "while :; do sleep 10; done"
docker run -d --name sleep2 java:8 /bin/sh -c "while :; do sleep 10; done"
オプション無しで docker container ls
を実行すると現在実行中のコンテナ一覧が表示されます。
% docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa2f3bca0465 java:8 "/bin/sh -c 'while :…" 2 seconds ago Up 2 seconds sleep2
4b4ec56c4714 java:8 "/bin/sh -c 'while :…" 59 seconds ago Up 58 seconds sleep1
一覧の表示項目は以下のようになっています。`docker container ls`は使用頻度が高いので、表示項目の意味を把握しておくと良いと思います。
項目 | 内容 |
CONTAINER ID | コンテナに付与される一意のID |
IMAGE | コンテナ作成に使用されたDockerイメージ |
COMMAND | コンテナで実行されているアプリケーションのプロセス |
CREATED | コンテナが作成されてから経過した時間 |
STATUS | Up(実行痛)、Exited(終了)といったコンテナの実行状態 |
PORTS | ホストのポートとコンテナポートの紐付け |
NAMES | コンテナにつけられた名前 |
docker container stop
実行しているコンテナを終了するには docker container stop
コマンドを実行します。
docker container stop コンテナIDまたはコンテナ名
具体的には以下のようなコマンドになります。
# 起動
$ docker run -d --name sleep_sample java:8 /bin/sh -c "while :; do sleep 10; done"
9c9bf04ecb76d9aeb1744ab67a3809bf60021a6f1ee7fb27700306682138ad32
# 停止
$ docker container stop 9c9bf04ecb76d9aeb1744ab67a3809bf60021a6f1ee7fb27700306682138ad32
9c9bf04ecb76d9aeb1744ab67a3809bf60021a6f1ee7fb27700306682138ad32
docker container restart
一度停止したコンテナは破棄しない限り、 docker container restart
コマンドで再実行できます。
docker container restart コンテナIDまたはコンテナ名
上記で一度停止したコンテナを次のように再実行できます。
$ docker container restart sleep_sample
docker container rm
コンテナの停止を行うのは docker container stop
コマンドですが、停止したコンテナをディスクから完全に破棄する場合は docker container rm
コマンドを使用します。
docker container rm コンテナIDまたはコンテナ名
例えば、開発中にコンテナの実行と停止を何回も繰り返すと、停止したコンテナがどんどん溜まってしまいます。
本節の初めの方でも解説したとおり、Dockerコンテナは停止しても状態を保ったままでディスク上に残り続けます。これは明示的に廃棄しない限りは残り続け、コンテナの実行・停止を頻繁に繰り返すような環境だとディスクを専用することに繋がります。
そのため、不要なコンテナは以下のようにディスクから破棄する必要があります。
$ docker container rm b498a5d78f
また、通常は実行中のコンテナを破棄することはできませんが、 -f
オプションを付けることで実行中のコンテナを停止・削除を同時に行うことができます。
$ docker container rm -f b498a5d78f
docker container logs
docker container logs
コマンドでは実行している特定のDockerコンテナの標準出力を表示することができます。標準出力されているものだけが表示されるため、コンテナの中でアプリケーションがファイルに出力したようなログは表示されないことに注意が必要です。
docker container logs [optisons] コンテナIDまたはコンテナ名
-f
オプションを付けると、標準出力の取得をし続けます。
docker container exec
docker container exec
コマンドでは実行しているDockerコンテナの中で任意のコマンドを実行できます。
docker container exec [options] コンテナIDまたはコンテナ目 コンテナ内で実行するコマンド
docker container exec
を利用すると、あたかもコンテナの中にSSHでログインしたかのようにコンテナ内部を操作することも可能です。
docker container cp
docker container cp
を利用すると、コンテナ間、コンテナ・ホスト間でファイルをコピーできます。
# コンテナ→ホストのコピー
docker container co [options] コンテナIDまたはコンテナ名:コンテナ内のコピー元 ホストのコピー先
# ホスト→コンテナのコピー
docker container co [options] ホストのコピー元 コンテナIDまたはコンテナ名:コンテナ内のコピー先
docker container cp
はコンテナの中で生成されたファイルをホストにコピーして確認するようなデバッグ用とでのユースケースが代表的です。
まとめ
Dockerイメージ・コンテナを操作する代表的なコマンドを紹介しました。
ここで紹介した以外にも色々とオプションはありますし、またコマンド自体もたくさんあります。
より詳細に調べたい場合には下記ドキュメントを参考にしてください。
プログラミングスクールの選び方
転職を検討中の方向け
フリーランス・副業で活躍したい方向け
教養・キャリアアップしたい方向け
給付金について詳しく知りたい方向け
学習方法一覧
- はじめに
- Dockerイメージの操作
- docker image build
- docker search
- docker image pull
- docker image ls
- docker image tag
- docker image push
- Dockerコンテナの操作
- docker container run
- docker container ls
- docker container stop
- docker container restart
- docker container rm
- docker container logs
- docker container exec
- docker container cp
- まとめ
- プログラミングスクールの選び方
- 学習方法一覧