run¶
使い方: docker run [オプション] イメージ [コマンド] [引数...]
新しいコンテナを実行する命令
-a, --attach=[] STDIN、STDOUT、STDERR にアタッチする
--add-host=[] ホストから IP アドレスのマッピングをカスタマイズして追加 (host:ip)
--blkio-weight=0 ブロック IO ウエイト (相対ウエイト)
--blkio-weight-device=[] ブロック IO ウエイト (相対デバイス・ウエイト。書式: `デバイス名:ウエイト`)
--cpu-shares=0 CPU 共有 (相対ウエイト)
--cap-add=[] Linux ケーパビリティの追加
--cap-drop=[] Linux ケーパビリティの削除
--cgroup-parent="" コンテナ用のオプション親 cgroup を指定
--cidfile="" コンテナ ID をファイルに書き出し
--cpu-percent=0 コンテナが実行可能な CPU 使用率のパーセントを制限。Windowsのみ
--cpu-period=0 CPU CFS (Completely Fair Scheduler) ペイロードの制限
--cpu-quota=0 CPU CFS (Completely Fair Scheduler) クォータの制限
--cpuset-cpus="" 実行を許可する CPU (0-3, 0,1)
--cpuset-mems="" 実行を許可するメモリ必要量 (0-3, 0,1)
-d, --detach コンテナをバックグラウンドで実行し、コンテナ ID を表示
--detach-keys コンテナのデタッチに使うエスケープ・キー・シーケンスを設定
--device=[] ホスト・デバイスをコンテナに追加
--device-read-bps=[] デバイスからの読み込みレート (バイト/秒) を制限 (例: --device-read-bps=/dev/sda:1mb)
--device-read-iops=[] デバイスからの読み込みレート (IO/秒) を制限 (例: --device-read-iops=/dev/sda:1000)
--device-write-bps=[] デバイスへの書き込みレート (バイト/秒) を制限 (例: --device-write-bps=/dev/sda:1mb)
--device-write-iops=[] デバイスへの書き込みレート (IO/秒) を制限 (例: --device-write-bps=/dev/sda:1000)
--disable-content-trust=true イメージの認証をスキップ
--dns=[] カスタム DNS サーバの指定
--dns-opt=[] カスタム DNS オプションの指定
--dns-search=[] カスタム DNS 検索ドメインの指定
-e, --env=[] 環境変数を指定
--entrypoint="" イメージのデフォルト ENTRYPOINT を上書き
--env-file=[] ファイルから環境変数を読み込み
--expose=[] ポートまたはポート範囲を露出
--group-add=[] 参加するグループを追加
-h, --hostname="" コンテナのホスト名
--help 使い方の表示
-i, --interactive コンテナの STDIN にアタッチ
--ip="" コンテナの IPv4 アドレス (例: 172.30.100.104)
--ip6="" コンテナの IPv6 アドレス (例: 2001:db8::33)
--ipc="" 使用する IPC 名前空間
--isolation="" コンテナの分離(独立)技術
--kernel-memory="" Kernel メモリ上限
-l, --label=[] コンテナにメタデータを指定 (例: --label=com.example.key=value)
--label-file=[] 行ごとにラベルを記述したファイルを読み込み
--link=[] 他のコンテナへのリンクを追加
--log-driver="" コンテナ用のログ記録ドライバを追加
--log-opt=[] ログドライバのオプションを指定
-m, --memory="" メモリ上限
--mac-address="" コンテナの MAC アドレス (例: 92:d0:c6:0a:29:33)
--io-maxbandwidth="" システム・デバイスの IO 帯域に対する上限を指定(Windowsのみ)。
書式は `<数値><単位>`。単位はオプションで `b` (バイト/秒)、
`k` (キロバイト/秒)、 `m` (メガバイト/秒)、 `g` (ギガバイト/秒)。
単位を指定しなければ、システムはバイト/秒とみなす。
--io-maxbandwidth と --io-maxiops は相互排他オプション
--io-maxiops=0 システム・ドライブの最大 IO/秒に対する上限を指定 *Windowsのみ)
--io-maxbandwidth と --io-maxiops は相互排他オプション
--memory-reservation="" メモリのソフト上限
--memory-swap="" 整数値の指定はメモリにスワップ値を追加。-1は無制限スワップを有効化
--memory-swappiness="" コンテナ用メモリのスワップ程度を調整。整数値の 0 から 100 で指定
--name="" コンテナに名前を割り当て
--net="bridge" : コンテナをネットワークに接続
'bridge': docker ブリッジ上でコンテナ用に新しいネットワーク・スタックを作成
'none': コンテナにネットワーク機能を付けない
'container:<name|id>': 他のコンテナ用ネットワーク・スタックを再利用
'host': コンテナ内でホスト側ネットワーク・スタックを使用
'NETWORK': 「docker network create」コマンドでユーザ作成したネットワークを使用
--net-alias=[] コンテナにネットワーク内部用のエイリアスを追加
--oom-kill-disable コンテナの OOM Killer を無効化するかどうか指定
--oom-score-adj=0 コンテナに対してホスト側の OOM 優先度を設定 ( -1000 ~ 1000 を指定)
-P, --publish-all 全ての露出ポートをランダムならポートに公開
-p, --publish=[] コンテナのポートをホスト側に公開
--pid="" 使用する PID 名前空間
--pids-limit=-1 コンテナの pids 制限を調整 (kernel 4.3 以上は -1 で無制限に設定)
--privileged このコンテナに対して拡張権限を与える
--read-only コンテナのルート・ファイルシステムを読み込み専用としてマウント
--restart="no" 再起動ポリシー (no, on-failure[:max-retry], always, unless-stopped)
--rm コンテナ終了時、自動的に削除
--shm-size=[] `/dev/shm` のサイズ。書式は `<数値><単位>`. `数値` は必ず `0` より大きい。単位はオプションで `b` (bytes)、 `k` (kilobytes)、 `m` (megabytes)、 `g` (gigabytes) を指定可能。単位を指定しなければ、システムは bytes を使う。数値を指定しなければ、システムは `64m` を使う
--security-opt=[] セキュリティ・オプション
--sig-proxy=true 受信したシグナルをプロセスにプロキシ
--stop-signal="SIGTERM" コンテナの停止シグナル
--storage-opt=[] コンテナごとにストレージ・ドライバのオプションを指定
--sysctl[=*[]*]] 実行時に名前空間カーネル・パラメータを調整
-t, --tty 疑似ターミナル (pseudo-TTY) を割り当て
-u, --user="" ユーザ名または UID
--userns="" コンテナのユーザ名前空間
'host': Docker ホストで使うユーザ名前空間
'': Docker デーモンのユーザ名前空間を指定するには `--userns-remap` オプションを使う
--ulimit=[] Ulimit オプション
--uts="" 使用する UTS 名前空間
-v, --volume=[ホスト側ソース:]コンテナ側送信先[:<オプション>]
ボリュームを拘束マウント。カンマ区切りで指定
`オプション` は [rw|ro], [z|Z], [[r]shared|[r]slave|[r]private], [nocopy]
'ホスト側ソース' は絶対パスまたは名前の値
--volume-driver="" コンテナのボリューム・ドライバ
--volumes-from=[] 指定したコンテナからボリュームをマウント
-w, --workdir="" コンテナ内の作業用ディレクトリを指定
docker run
コマンドは、まず指定されたイメージ上に書き込み可能なコンテナ・レイヤを create
(作成)します。それから、指定されたコマンドを使って start
(開始)します。この docker run
は、 API の /containers/create
の後で /containers/(id)/start
を実行するのと同じです。以前に使っていたコンテナは docker start
で再起動できます。全てのコンテナを表示するには docker ps -a
を使います。
docker run
コマンドは、 コンテナの内容を確定するため に、 docker commit
コマンドと連携して使えます。
コンテナをネットワークで接続する詳細については、 Docker ネットワーク概要 をご覧ください。
例¶
名前と疑似 TTY の割り当て(–name、-it)¶
$ docker run --name test -it debian
root@d6c0fe130dba:/# exit 13
$ echo $?
13
$ docker ps -a | grep test
d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test
この例は debian:latest
イメージを使い、 test
という名称のコンテナを実行します。 -it
は疑似 TTY(pseudo-TTY)をコンテナの標準入力に接続するよう、 Docker に対して命令します。つまり、コンテナ内でインタラクティブな bash
シェルを作成します。例の中で、 bash
シェルを終了コード 13
で終了しています。この終了コードは docker run
を呼び出したもの(docker)にも送られ、 test
コンテナのメタデータに記録されます。
コンテナ ID の取得(–cidfile)¶
$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
これはコンテナを作成し、コンソール上に test
を表示します。 cidfile
フラグは Docker に新しいファイルを作成させ、そこにコンテナ ID を書かせるものです。もしファイルが既に存在している場合、Docker はエラーを返します。 docker run
を終了したら、Docker はこのファイルを閉じます。
コンテナのケーパビリティ(–privileged)¶
$ docker run -t -i --rm ubuntu bash
root@bc338942ef20:/# mount -t tmpfs none /mnt
mount: permission denied
これは動作 しません 。デフォルトでは、カーネルに対して潜在的に危険になりうる処理を破棄します。これには cap_sys_admin
も含まれます(ファイルシステムのマウントに必要なものです)。しかしながら、 --privileged
フラグがあれば、実行できるようになります。
$ docker run -t -i --privileged ubuntu bash
root@50e3f57e16e6:/# mount -t tmpfs none /mnt
root@50e3f57e16e6:/# df -h
Filesystem Size Used Avail Use% Mounted on
none 1.9G 0 1.9G 0% /mnt
--privileged
フラグはコンテナに対して 全ての 能力を与えます。また、そのために device
cgroup コントローラの制限を昇格します。言い換えますと、コンテナはホスト上であらゆる処理が可能となります。このフラグが存在する時、 Docker の中で Docker を動かすといった特別な使い方ができます。
作業ディレクトリを指定(-w)¶
$ docker run -w /path/to/dir/ -i -t ubuntu pwd
-w
は、指定したディレクトリの中でコマンドを実行します。この例では /path/to/dir
で実行します。コンテナ内にパスが存在しなければ、作成されます。
コンテナごとにストレージ・オプションを指定¶
$ docker create -it --storage-opt size=120G fedora /bin/bash
これ(容量)はコンテナの作成時にルート・ファイルシステムの容量を 120GB に指定しています。ただし、デフォルトの BaseFS 容量よりも小さく指定できません。
tmpfs のマウント(–tmpfs)¶
$ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
--tmpfs
フラグはコンテナに対して空の tmfps をマウントします。この時、オプション rw
、 noexec
、nosuid
、 size=65536k
オプションを指定しています。
ボリュームのマウント(-v, –read-only)¶
$ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd
-v
フラグは現在の作業ディレクトリをコンテナ内にマウントします。 -w
によって、コマンドは現在の作業用ディレクトリの中で実行されます。ディレクトリとは、 pwd
を実行して得られるディレクトリが該当します。このコマンドを組み合わせててコンテナを実行しても、現在の作業ディレクトリの中で実行されるのです。
$ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash
ボリュームとしてマウントするホスト側のディレクトリが存在しなければ、Docker は自動的にホスト上にディレクトリを作成します。先ほどの例では、Docker はコンテナ起動前に /doesnt/exit
ディレクトリを作成します。
$ docker run --read-only -v /icanwrite busybox touch /icanwrite here
ボリュームに --read-only
を指定して使うことで、コンテナの書き込み可能なファイルを制御できます。 --read-only
フラグはコンテナのルート・ファイルシステムを読み込み専用としてマウントし、コンテナで指定したボリューム以外での書き込みを禁止します。
$ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh
Docker Unix ソケットと docker バイナリ( https://get.docker.com から入手)に対するマウントにより、コンテナはホスト側の Docker デーモンに対して作成や各種操作といった完全アクセスをもたらします。
ポートの公開と露出(-p、–expose)¶
$ docker run -p 127.0.0.1:80:8080 ubuntu bash
コンテナのポート 8080
を 127.0.0.1
上のポート 80
にバインド(割り当て)します。 Docker ユーザ・ガイド で Docker がどのようにポートを操作するか詳細を説明しています。
$ docker run --expose 80 ubuntu bash
コンテナのポート 80
を露出(expose)しますが、ホストシステム側のインターフェースには公開しません。
環境変数の設定(-e、–env、–env-file)¶
$ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
これはコンテナ内におけるシンプルな(配列ではない)環境変数を設定します。この3つのフラグについて説明します。 -e
と --env
は環境変数と値を指定する場所です。あるいは、もし =
が指定されなければ、現在の環境変数がそのまま送られます(例: ホスト上の $MYVAR1
がコンテナ内の $MYVAR1
にセットされます )。 =
が指定されず、クライアント側の環境変数が無い場合は、コンテナ内の環境変数からは削除されます。この3つのフラグ -e
、 --env
、--env-file
は何度でも指定できます。
これらの3つのフラグに関係なく、 --env-file
が始めに処理され、その後 -e
と --env
フラグが処理されます。この方法は、必要な時に -e
と --env
で変数を上書きするために使えます。
$ cat ./env.list
TEST_FOO=BAR
$ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO
TEST_FOO=This is a test
--env-file
フラグは、ファイル名を引数として使います。ファイルの内容は、それぞれの行が VAR=VAL
の形式であり、 --env
のようなものです。コメント行は、行頭に #
を付けます。
$ cat ./env.list
TEST_FOO=BAR
# ここはコメント
TEST_APP_DEST_HOST=10.10.0.127
TEST_APP_DEST_PORT=8888
_TEST_BAR=FOO
TEST_APP_42=magic
helloWorld=true
123qwe=bar
org.spring.config=something
# 実行者は環境変数を渡す
TEST_PASSTHROUGH
$ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=5198e0745561
TEST_FOO=BAR
TEST_APP_DEST_HOST=10.10.0.127
TEST_APP_DEST_PORT=8888
_TEST_BAR=FOO
TEST_APP_42=magic
helloWorld=true
TEST_PASSTHROUGH=howdy
HOME=/root
123qwe=bar
org.spring.config=something
$ docker run --env-file ./env.list busybox env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=5198e0745561
TEST_FOO=BAR
TEST_APP_DEST_HOST=10.10.0.127
TEST_APP_DEST_PORT=8888
_TEST_BAR=FOO
TEST_APP_42=magic
helloWorld=true
TEST_PASSTHROUGH=
HOME=/root
123qwe=bar
org.spring.config=something
メタデータをコンテナに設定(-l、–label、–label-file)¶
ラベルとは key=value
のペアであり、コンテナにメタデータを提供します。コンテナに2つのラベルをラベル付けします:
$ docker run -l my-label --label com.example.foo=bar ubuntu bash
my-label
キーが値を指定しなければ、対象のラベルは空の文字列( ""
)がデフォルトで割り当てられます。複数のラベルを追加するには、ラベルのフラグ( -l
か --label
)を繰り返します。
key=value
はラベル値を上書きしないよう、ユニークにする必要があります。ラベルが値の違う特定のキーを指定した場合は、以前の値が新しい値に上書きされます。Docker は最新の key=value
指定を使います。
--label-file
フラグはファイルから複数のラベルを読み込みます。ラベルとしての区切りは各行の EOL マークが現れるまでです。
$ docker run --label-file ./labels ubuntu bash
label-file の書式は、環境変数の読み込み書式と似ています(環境変数との違いは、ラベルはコンテナ内で実行中のプロセスから見えません)。以下は label-file 形式の記述例です。
com.example.label1="a label"
# これはコメントです
com.example.label2=another\ label
com.example.label3
複数のラベル用ファイルを読み込むには、複数回 --label-file
フラグを使います。
ラベルの動作に関する詳しい情報は、Docker ユーザ・ガイドの Label - Docker でカスタム・メタデータを使う をご覧ください。
コンテナをネットワークに接続(–net)¶
コンテナ実行時に --net
フラグを付けるとネットワークに接続します。次の例は busybox
コンテナに my-net
ネットワークを追加します。
$ docker run -itd --net=my-net busybox
また、ユーザ定義ネットワーク上でコンテナを起動時、 --ip
と --ipv6
フラグを使い、コンテナに対して IP アドレスを割り当て可能です。
$ docker run -itd --net=my-net --ip=10.10.9.75 busybox
実行中のコンテナに対してネットワークを追加する時は、 docker network connect
サブコマンドを使います。
同じネットワークに複数のコンテナを接続できます。接続したら、コンテナは別のコンテナの IP アドレスや名前で簡単に通信できるようになります。 overlay
ネットワークやカスタム・プラグインは複数のホストへの接続をサポートしています。異なった Docker エンジンが起動していても、コンテナが同じマルチホスト・ネットワーク上であれば、相互に通信できます。
注釈
サービス・ディスカバリはデフォルトの bridge ネットワークで利用できません。そのため、デフォルトでは、コンテナは IP アドレスで通信します。コンテナ名で通信するには、リンクされている必要があります。
ネットワークからコンテナを切断するには、 docker network disconnect
コマンドを使います。
コンテナからボリュームをマウント(–volumes-from)¶
$ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
--volumes-from
フラグは、参照するコンテナで定義されたボリュームをマウントできます。コンテナは --volumes-from
引数を何度も指定できます。コンテナ ID はオプションで末尾に :ro
か :rw
を指定し、読み込み専用か読み書き可能なモードを個々に指定できます。デフォルトでは、ボリュームは参照しているコンテナと同じモード(読み書き可能か読み込み専用)です。
SELinux のようなラベリング・システムは、コンテナ内にボリューム内容をマウントするにあたり、適切なラベルを必要とします。ラベルが無ければ、対象の領域を使ったコンテナの中では、セキュリティ・システムがプロセスの実行を阻止します。デフォルトでは、Docker は OS によってセットされるラベルを変更しません。
コンテナ内にあるラベルを変更するには、ボリュームのマウントに :z
か :Z
の2つを末尾に追加できます。これらのサフィックスは、Docker に対して共有ボリューム上のファイル・オブジェクトに対して再度ラベル付けするように伝えます。その結果、Docker は共有コンテントのラベルを使ってラベル付けします。共有ボリュームのラベルは、全てのコンテナを読み書き可能なコンテントにします。 Z
オプションは Docker に対してプライベートな共有されないラベルであると伝えます。現在のコンテナのみ、プライベート・ボリュームが使えます。
STDIN・STDOUT・STDERRのアタッチ(-a)¶
-a
フラグは docker run
時にコンテナの STDIN
、 STDOUT
、 STDERR
をバインドします。これにより、必要に応じて入出力を操作できるようにします。
$ echo "test" | docker run -i -a stdin ubuntu cat -
これはコンテナの中にデータをパイプし、コンテナ ID をコンテナの STDIN
にアタッチして表示します。
$ docker run -a stderr ubuntu echo test
これはエラーでない限り、何も表示しません。これはコンテナの STDIRR
にしかアタッチしていないためです。コンテナのログに STDERR
と STDOUT
が書き込まれます。
$ cat somefile | docker run -i -a stdin mybuilder dobuild
これはファイルの内容をコンテナにパイプし、構築するものです。構築が完了するとコンテナ ID が表示され、構築ログは docker logs
で取得できます。これはファイルや何かをコンテナ内にパイプし、コンテナで処理が終わるとコンテナ ID を表示するので便利です。
ホスト・デバイスをコンテナに追加(–device)¶
$ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo}
brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc
brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd
crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo
デバイスをコンテナに直接さらす必要が度々あります。 --device
オプションは、これを可能にします。例えば、特定のブロック・ストレージ・デバイス、ループ・デバイス、オーディオ・デバイスを使うにあたり、コンテナに特権を与えなくても( --privileged
フラグを使わずに )追加でき、アプリケーションが直接使えるようになります。
デフォルトでは、コンテナは read
、write
、 mknod
を各デバイスに指定できます。各 --device
フラグのオプション設定で、3つの :rwm
を利用できます。
$ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc
You will not be able to write the partition table.
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:rw -it ubuntu fdisk /dev/xvdc
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc
fdisk: unable to open /dev/xvdc: Operation not permitted
注釈
--device
はエフェメラルな(短命な)デバイスでは使うべきではありません。信頼できないコンテナが --device
を追加しようとしても、ブロック・デバイスは除外されるでしょう。
再起動ポリシー¶
Docker の --restart
はコンテナの 再起動ポリシー を指定します。再起動ポリシーは、コンテナの終了後、Docker デーモンが再起動するかどうかを管理します。Docker は次の再起動ポリシーをサポートしています。
ポリシー | 結果 |
---|---|
no | 終了してもコンテナを自動的に再起動しません。これがデフォルトです。 |
on-failure [:最大リトライ数] | コンテナが 0 以外のステータスで終了すると、再起動します。オプションで Docker デーモンが何度再起動するかを指定できます。 |
always | 終了コードの状態に関わらず、常に再起動します。always を指定すると、 Docker デーモンは無制限に再起動を試みます。また、現在の状況に関わらず、デーモンの起動時にもコンテナの起動を試みます。 |
unless-stopped | 終了コードの状態に関わらず、常に再起動します。しかし、以前に停止した状態であれば、Docker デーモンの起動時にコンテナを開始しません。 |
$ docker run --restart=always redis
これは redis
コンテナを再起動ポリシー always で起動するものです。つまり、コンテナが終了したら Docker がコンテナを再起動します。
再起動ポリシーに関するより詳しい情報は、 Docker run リファレンス・ページ の 再起動ポリシー(–restart) をご覧ください。
コンテナの hosts ファイルにエントリ追加(–add-host)¶
--add-host
フラグを使い、コンテナの /etc/hosts
ファイルに1つもしくは複数のホストを追加できます。次の例はホスト名 docker
に静的なアドレスを追加しています。
$ docker run --add-host=docker:10.180.0.1 --rm -it debian
$$ ping docker
PING docker (10.180.0.1): 48 data bytes
56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
^C--- docker ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
時々、コンテナ内から Docker ホストに対して接続する必要があります。接続のためには、 --add-host
フラグをコンテナに使い、Docker ホストの IP アドレスを与えます。ホスト側の IP アドレスを確認するには、 ip addr show
コマンドを使います。
コンテナが何の IPv4 ないし IPv6 ネットワークを使っているかは、 ip addr show
の結果次第です。次のフラグは、ネットワーク・デバイス eth0
の IPv4 アドレスを指定します。
$ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1`
$ docker run --add-host=docker:${HOSTIP} --rm -it debian
IPv6 は -4
フラグの替わりに -6
を指定します。他のネットワーク・デバイスの場合は eth0
を適切なデバイス名に置き換えます(例えば docker0
ブリッジ・デバイス )。
コンテナ内の ulimits を指定(–ulimit)¶
コンテナ内で ulimit
設定をするには追加特権が必要であり、デフォルトのコンテナでは指定できません。そこで --ulimit
フラグを指定できます。 --ulimit
はソフト・リミットとハード・リミットを指定できます。 <type>=<ソフト・リミット>[:<ハード・リミット>]
の形式です。例:
$ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n"
1024
注釈
ハード・リミット
を指定しなければ、 ソフト・リミット
が両方の値として使われます。 ulimits
を指定しなければ、デーモンのデフォルト ulimits
を継承します。 as
オプションは無効化されました。言い換えるますと、次のようなスクリプトはサポートされていません: $ docker run -it --ulimit as=1024 fedora /bin/bash
設定したら適切な syscall
が送信されます。Docker は転送に何ら介在しません。値が設定された時のみ処理されます。
nproc
を使うには¶
ulimit
フラグに nproc
を設定する時とは、 nproc
で Linux 利用者が利用可能な最大プロセス数をセットするものであり、コンテナに対してではないので注意してください。次の例は、 daemon
ユーザとして4つのコンテナを起動します。
docker run -d -u daemon --ulimit nproc=3 busybox top
docker run -d -u daemon --ulimit nproc=3 busybox top
docker run -d -u daemon --ulimit nproc=3 busybox top
docker run -d -u daemon --ulimit nproc=3 busybox top
4番めのコンテナは失敗し、“[8] System error: resource temporarily unavailable” エラーを表示します。これが失敗するのは、実行時に nproc=3
を指定したからです。3つのコンテナが起動したら、 daemon
ユーザに指定されたプロセスの上限(quota)に達してしまうからです。
コンテナをシグナルで停止¶
--stop-signal
フラグは、システムコールのシグナルを設定します。これは、コンテナを終了する時に送るものです。このシグナルはカーネルの syscall テーブルにある適切な数値と一致する必要があります。例えば 9 や、SIGNAME のような形式のシグナル名(例:SIGKILL)です。
コンテナの分離技術を指定(–isolation)¶
このオプションは Docker コンテナを Microsoft Windows 上で使う状況で便利です。 --isolation <値>
オプションでコンテナの分離(isolation)技術を指定します。 Linux 上では Linux 名前空間(namespaces)を使う default
しかサポートしていません。Linux 上では次の2つのコマンドが同等です。
$ docker run -d busybox top
$ docker run -d --isolation default busybox top
特に Microsoft Windows 上で daemon
オプションを指定していなければ、次の2つのコマンドは同等です。
$ docker run -d --isolation default busybox top
$ docker run -d --isolation process busybox top
Docker daemon
上で --exec-opt isolation=hyperv
オプションを指定すると、各コマンドの実行に hyperv
分離を使った結果を表示します。
$ docker run -d --isolation default busybox top
$ docker run -d --isolation hyperv busybox top
実行時に名前空間のカーネル・パラメータ(sysctl)を設定¶
--sysctl
はコンテナ内の名前空間におけるカーネル・パラメータ(sysctl)を設定します。例えば、コンテナのネットワーク名前空間で IP 転送を有効にするには、次のようにコマンドを実行します。
$ docker run --sysctl net.ipv4.ip_forward=1 someimage
注釈
全ての sysctl が名前空間で使えるわけではありません。Docker はコンテナ内の sysctl の変更をサポートしません。つまり、コンテナ内だけでなくホスト側も変更します。カーネルが改良されれば、更に多くの sysctl を名前空間内で利用可能になると考えています。
サポート中の sysctl¶
IPC 名前空間
:
kernel.msgmax、 kernel.msgmnb、 kernel.msgmni、 kernel.sem、 kernel.shmall、 kernel.shmmax、 kernel.shmmni、 kernel.shm_rmid_forced、 fs.mqueue.* で始まる sysctl 。
--ipc=host
オプションを使う場合は、これら sysctl のオプション指定が許可されません。
ネットワーク名前空間
: net.* で始まる sysctl
--ipc=host
オプションを使う場合は、これら sysctl のオプション指定が許可されません。