Docker run/createコマンド

トップ > Docker > コマンド > docker run/create

目次

docker run

docker run はコンテナを起動状態で作成します。停止状態で作成するには docker create を使用します。下記は、httpd:latest イメージから、cont1 コンテナを作成します。

Shell
# docker run -d --name cont1 httpd:latest

-d (--detach) オプションは、コンテナを作成後、コンテナプロセス(PID=1のプロセス)の標準入出力をコンソールからデタッチします。アタッチしたままコンテナを起動した場合は、デタッチキー (通常は Ctrl-P Ctrl-Q) を押すことでデタッチすることができます。

Shell
# 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 オプションをつけないのが一般的です。

Shell
# docker run -d -it --name cont1 centos:7

--name オプションはコンテナ名を指定します。

Shell
# docker run -d -it --name cont1 centos:7

-h (--hostname) オプションは、コンテナのホスト名を指定します。

Shell
# docker run -d -it --name cont1 -h cont1 centos:7

-p (--port) オプションは、ホストのポート番号とコンテナのポート番号をマッピングします。複数指定可能です。下記の例では、ホストの 8080番ポートを、コンテナの 80番ポートにマッピングしています。

Shell
# 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 に書き込まれます。

Shell
# 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 オプションの使用はあまり推奨されておらず、将来的に廃止される可能性があります。

Shell
# 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 ホスト側:コンテナ側 で指定しますが、ホスト側が / で始まる名前の場合はディレクトリを指定します。

Shell
# 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>

ホスト側が / で始まらない場合は名前付きのボリュームを指定します。

Shell
# 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 オプションを指定しないと、名前無しボリュームが残ってしまいます。

Shell
# docker run -d -it --name cont1 -v /disk1 centos:7
# docker volume ls

--net オプションは、docker network コマンドで作成した Dockerネットワークにコンテナを接続します。--net を省略した場合はデフォルトで bridge ネットワークに接続します。

Shell
# docker network create network1 --subnet 192.168.0.0/24
# docker run -d -it --name cont1 --net network1 centos:7

--ip オプションは、IPアドレスを指定します。

Shell
# docker run -d -it --name cont1 --net network1--ip 192.168.0.200 centos:7

-w (--workdir) オプションは、コンテナ内のプロセスのワークディレクトリを指定します。

Shell
# docker run -d -it --name cont1 -w /opt/workdir centos:7
# docker exec cont1 pwd
/opt/workdir

-e (--env) オプションは、コンテナの環境変数を設定します。複数指定可能です。

Shell
# docker run -d -it --name cont1 -e TZ=Aaia/Tokyo centos:7
# docker exec cont1 env | grep TZ
TZ=Asia/Tokyo

--env-file オプションは、環境変数をファイルで指定します。

Shell
# 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個までログをローテートします。

Shell
# docker run -d --name cont1 --log-opt max-size=100k --log-opt max-file=10 httpd

その他のオプションは --help を参照してください。

Shell
# docker run --help

docker create

docker create コマンドは、コンテナを停止状態 (stop した状態) で作成する以外は、run コマンドと同等です。オプションは run コマンドを参照してください。

Shell
# docker create -d -it --name cont1 centos:7

Copyright (C) 2019 杜甫々
初版:2019年9月1日 最終更新:2019年9月1日
http://www.tohoho-web.com/docker/docker_run.html