docker run はコンテナを起動状態で作成します。停止状態で作成するには docker create を使用します。下記は、httpd:latest イメージから、cont1 コンテナを作成します。
# docker run -d --name cont1 httpd:latest
-d (--detach) オプションは、コンテナを作成後、コンテナプロセス(PID=1のプロセス)の標準入出力をコンソールからデタッチします。アタッチしたままコンテナを起動した場合は、デタッチキー (通常は Ctrl-P Ctrl-Q) を押すことでデタッチすることができます。
# docker run -d -it --name cont1 centos:7 54c2db8ce51774dedbf74d03f302257635b38518e7de24198b752c9bb07fccfd # デタッチしているのでホストのプロンプトに戻る # docker run -it --name cont2 centos:7 [root@f85deacb79f1 /]# デタッチしていないのでコンテナのプロンプトになる [root@f85deacb79f1 /]# Ctrl-P Ctrl-Q デタッチキーを押す # ホストのプロンプトに戻る
-i (--interactive) オプションは、コンテナプロセスの標準入力を開いたままにします。
-t (--tty) オプションは、コンテナプロセスに擬似TTYを割り当てます。
コンテナプロセスが /bin/bash の様な標準入出力を対象とするプロセスの場合は -it オプションをつけ、httpd の様なソケット等を対象とするプロセスの場合は -it オプションをつけないのが一般的です。
# docker run -d -it --name cont1 centos:7
--name オプションはコンテナ名を指定します。
# docker run -d -it --name cont1 centos:7
-h (--hostname) オプションは、コンテナのホスト名を指定します。
# docker run -d -it --name cont1 -h cont1 centos:7
-p (--port) オプションは、ホストのポート番号とコンテナのポート番号をマッピングします。複数指定可能です。下記の例では、ホストの 8080番ポートを、コンテナの 80番ポートにマッピングしています。
# docker run -d --name cont1 -p 8080:80 httpd # curl http://localhost:8080/ <html><body><h1>It works!</h1></body></html>
--add-host はホスト名とIPアドレスをマッピングします。複数指定可能です。コンテナ内の /etc/hosts に書き込まれます。
# docker run -d -it --name cont1 --add-host host1:192.168.0.1 centos:7 # docker exec cont1 cat /etc/hosts | grep host1 192.168.0.1 host1
--link はホスト名とコンテナのIPアドレスをマッピングします。複数指定可能です。コンテナ内の /etc/hosts に書き込まれます。--link オプションの使用はあまり推奨されておらず、将来的に廃止される可能性があります。
# docker run -d -it --name cont1 centos:7 # docker run -d -it --name cont2 --link cont1:host1 centos:7 # docker exec cont2 cat /etc/hosts | grep host1 172.17.0.2 host1 498e7c9d2736 cont1
-v (--volume) オプションは、ホストのボリュームまたはディレクトリをコンテナに割り当てます。複数指定可能です。-v ホスト側:コンテナ側 で指定しますが、ホスト側が / で始まる名前の場合はディレクトリを指定します。
# mkdir -p /var/docker/cont1/htdocs # echo '<div>Hello!!</div>' > /var/docker/cont1/htdocs/index.html # docker run -d -p 8080:80 -v /var/docker/cont1/htdocs:/usr/local/apache2/htdocs --name cont1 httpd # curl http://localhost:8080/ <div>Hello!!</div>
ホスト側が / で始まらない場合は名前付きのボリュームを指定します。
# docker volume create disk1 # docker run -d -it --name cont1 -v disk1:/disk1 centos:7 # docker volume ls
ホスト側を省略した場合は、名前無しのボリュームが自動的に作成されます。/var/lib/docker/volumes などの下に名前無しボリュームが作成されます。名前無しボリュームを作成した場合は、docker rm コマンドで -v オプションを指定しないと、名前無しボリュームが残ってしまいます。
# docker run -d -it --name cont1 -v /disk1 centos:7 # docker volume ls
--net オプションは、docker network コマンドで作成した Dockerネットワークにコンテナを接続します。--net を省略した場合はデフォルトで bridge ネットワークに接続します。
# docker network create network1 --subnet 192.168.0.0/24 # docker run -d -it --name cont1 --net network1 centos:7
--ip オプションは、IPアドレスを指定します。
# docker run -d -it --name cont1 --net network1--ip 192.168.0.200 centos:7
-w (--workdir) オプションは、コンテナ内のプロセスのワークディレクトリを指定します。
# docker run -d -it --name cont1 -w /opt/workdir centos:7 # docker exec cont1 pwd /opt/workdir
-e (--env) オプションは、コンテナの環境変数を設定します。複数指定可能です。
# docker run -d -it --name cont1 -e TZ=Aaia/Tokyo centos:7 # docker exec cont1 env | grep TZ TZ=Asia/Tokyo
--env-file オプションは、環境変数をファイルで指定します。
# cat ./envfile TZ=Asia/Tokyo LANG=en_US.UTF-8 # docker run -d -it --name cont1 --env-file ./envfile centos:7
--log-opt オプションは、コンテナが吐き出すログ (コンテナプロセスの標準出力) に関するオプションを指定します。下記の例では、100KB 毎に最大 10個までログをローテートします。
# docker run -d --name cont1 --log-opt max-size=100k --log-opt max-file=10 httpd
その他のオプションは --help を参照してください。
# docker run --help
docker create コマンドは、コンテナを停止状態 (stop した状態) で作成する以外は、run コマンドと同等です。オプションは run コマンドを参照してください。
# docker create -d -it --name cont1 centos:7