Dockerコマンドまとめ

開発環境ならいうまでもなく、本番環境の運用でも活用されつつあるDockerでよく使われるコマンドをまとめておきます。
Dockerは非常に軽量なコンテナ型の仮想化環境です。
Dockerのインストール方法については、前記事 MacにDockerをインストール を参照してください。

Dockerイメージ管理

docker search

Dockerのレジストリなどからイメージを検索します。

$ docker search <キーワード>

Webで探すなら

docker pull

Dockerのレジストリなどからイメージをダウンロードします。

$ docker pull <イメージ名[:タグ]>

docker images

ローカルに保存されているDockerイメージの一覧を確認します。

$ docker images
REPOSITORY           TAG                 IMAGE ID                 CREATED              SIZE
nginx                      latest                5e69fe4b3c31         2 weeks ago          183 MB
ubuntu                   latest                0ef2e08ed3fa          6 weeks ago          130 MB
hello-world             latest                48b5124b2768        3 months ago        1.84 kB

docker inspect

イメージファイルの詳細情報を表示します。

$ docker inspect <イメージ名[:タグ]>

docker history

イメージのレイヤー構成などを表示します。

$ docker history

docker commit

現在のイメージファイルをベースにして、新しいイメージを作成します。
新イメージとして保存しておくと、カスタマイズや設定変更などを行ったコンテナを以後、簡単に起動できるようになります。

$ docker commit -m "コメント" <コンテナID> <イメージ名[:タグ]>

docker build

Dockerfileに基づいて、新しいイメージを作成します。

$ docker build

docker rmi

不要になったローカルのイメージを削除します。

$ docker pull <イメージID>

Dockerコンテナの実行管理

docker ps

コンテナ一覧確認します。
-a を付けないと起動しているコンテナだけになります。

$ docker ps -a

docker run

指定したイメージを起動します。
実際にはイメージを取得するための「docker pull」や、イメージから新しいコンテナを作成する「docker create」、コンテナ中でプログラムを起動する「docker start」などのコマンドを合成したものです。起動時にCPUの使用率や使用メモリ量などを制限したり、バックグラウンド実行させたりなど、さまざまなオプションを指定できます。

ホスト名を付けて起動

$ docker run -h <ホスト名> -i -t <イメージ名[:タグ]> /bin/bash

コンテナ名を付けて起動

$ docker run --name <コンテナ名> -i -t <イメージ名[:タグ]> /bin/bash

起動して終了するとコンテナ破棄

$ docker run --rm -i -t <イメージ名[:タグ]> /bin/bash

コンテナ起動時にCPU相対的使用率を指定

$ docker run -c 200 -i -t <イメージ名[:タグ]> /bin/bash

コンテナ起動時にメモリを指定

$ docker run -m 512m -i -t <イメージ名[:タグ]> /bin/bash

コンテナをバックグラウンドで起動

$ docker run -i -t -d <イメージ名[:タグ]> /bin/bash

ホストディレクトリをコンテナにマウント

$ docker run -v <ホストのディレクトリ>:<コンテナ内ディレクトリ> -i -t -d <イメージ名[:タグ]> /bin/bash

データボリュームでコンテナ間でデータを共有

-v を使うとデータボリュームをコンテナに作成できます。

$ docker run --name <コンテナ名> -v <コンテナ内ディレクトリ> -i -t -d <イメージ名[:タグ]>

下記で両方のコンテナで<コンテナ内ディレクトリ>が共有されます。

$ docker run --volumes-from <共有元コンテナ名>  -i -t -d <イメージ名[:タグ]>

–volumes-from で指定コンテナに ro を付けることでリードオンリーとなります。

$ docker run --volumes-from <共有元コンテナ名>:ro  -i -t -d <イメージ名[:タグ]>

docker start

コンテナを起動します。

$ docker start <コンテナID or コンテナ名>

docker stop

コンテナを終了します。

$ docker stop <コンテナID or コンテナ名>

docker restart

コンテナを再起動します。

$ docker restart <コンテナID or コンテナ名>

docker attach

起動中のコンテナにログインします。

$ docker attach <コンテナID or コンテナ名>

docker exec

起動中のコンテナ上でコマンドを実行します。

$ docker exec -i -t <コンテナID or コンテナ名> /bin/bash

起動中のdockerに接続するコマンドにはdocker attachがあります。
メインのコマンドとしてシェルを動作させているコンテナであれば、docker attachで接続して仮想マシンのように使えます(切断は Ctrl-p Ctrl-q コマンド)。

一般的なdockerコンテナはデーモンを起動するように作られているため、docker attachで接続するとデーモンのログが表示されるだけで何もできず、Ctrl-cで接続を切るとコンテナ・インスタンスごと停止する、という挙動になってしまいます。

場合によってはログも出力されないこともあるため、「docker attachできない。」と思ってしまいがちですが、おそらく正確にはデーモンがフォアグラウンド動作しているttyに接続できていて、シェルで操作できない状況です。

docker rm

コンテナを削除します。

$ docker rm <コンテナID>

停止中のコンテナを一気に削除

$ docker rm `docker ps -aq`

コンテナをすべて強制的に削除

$ docker rm -f `docker ps -aq`