docker container create
| 内容説明 | コンテナーを新規に生成します。 |
|---|---|
| 利用方法 | docker container create [OPTIONS] IMAGE [COMMAND] [ARG...] |
| エイリアス | docker create |
内容説明
docker container create (短縮形 docker create) コマンドは、指定されたイメージからコンテナーを新規生成します。
ただしコンテナーの起動は行いません。
コンテナーが生成されると Docker デーモンは指定されたイメージの上に書き込み可能なコンテナーレイヤーを生成します。
これは指示されるコマンドの実行を処理するためです。
生成後にはコンテナー ID が STDOUT に出力されます。
この動作は docker run -d のようなものですが、ただしコンテナーが起動するわけではありません。
したがってこの後に docker container start (あるいは短縮形 docker start) コマンドを実行してコンテナーを起動することになります。
このコマンドは、事前にコンテナーの設定を行っておいて、いつでも起動できるように準備しておくような使い方ができます。
新たに生成されたコンテナーの初期ステータスは created (生成済み) です。
docker create コマンドのオプションは docker run コマンド (docker create を行ってからコンテナーを起動します) のものとかなりの部分で共通しています。
利用可能なフラグやオプションについては
docker run CLI リファレンス を参照してください。
オプション
| オプション | デフォルト | 内容説明 |
|---|---|---|
--add-host | ホスト-IP マッピングのカスタム設定を追加します。(ホスト名:ip) | |
--annotation | API 1.43 以上
(OCI ランタイムに受け渡された) コンテナーに注釈 (annotation) を追加します。 | |
-a, --attach | STDIN、STDOUT、STDERR にアタッチします。 | |
--blkio-weight | ブロック I/O(相対的な重みづけ)、10 から 1000、0 は無効化。(デフォルトは 0) | |
--blkio-weight-device | ブロック I/O 重みづけ。(相対的なデバイス重みづけ) | |
--cap-add | Linux ケーパビリティーを追加します。 | |
--cap-drop | Linux ケーパビリティーを削除します。 | |
--cgroup-parent | 任意に指定するコンテナーの親 cgroup。 | |
--cgroupns | API 1.41 以上
利用する cgroup 名前空間(host|private)。 'host': Dockerホストのcgroup名前空間内でコンテナーを起動。 'private': プライベートなcgroup名前空間内でコンテナーを起動。 '': デーモンのdefault-cgroupns-modeオプションによって 設定されるcgroup名前空間を利用(デフォルト)。 | |
--cidfile | コンテナー ID をファイルに書き出します。 | |
--cpu-count | CPU カウント。(Windows のみ) | |
--cpu-percent | CPU パーセント。(Windows のみ) | |
--cpu-period | CPU の CFS(Completely Fair Scheduler)間隔を制限します。 | |
--cpu-quota | CPU の CFS(Completely Fair Scheduler)クォータを制限します。 | |
--cpu-rt-period | API 1.25 以上 CPU へのリアルタイムアクセス時間をマイクロ秒で制限します。 | |
--cpu-rt-runtime | API 1.25 以上 CPU へのリアルタイムアクセスランタイムをマイクロ秒で制限します。 | |
-c, --cpu-shares | CPU 配分。(相対的な重みづけ) | |
--cpus | API 1.25 以上 CPU 数。 | |
--cpuset-cpus | 利用を許容する CPU 数。(0-3、0,1) | |
--cpuset-mems | 利用を許容するメモリ数。(0-3、0,1) | |
--device | ホストのデバイスをコンテナーに追加します。 | |
--device-cgroup-rule | cgroup がアクセス可能なデバイスリストにルールを追加します。 | |
--device-read-bps | デバイスからの読み込み割合(秒あたりのバイト数)を制限します。 | |
--device-read-iops | デバイスからの読み込み割合(秒あたりの I/O)を制限します。 | |
--device-write-bps | デバイスへの書き込み割合(秒あたりのバイト数)を制限します。 | |
--device-write-iops | デバイスへの書き込み割合(秒あたりの I/O)を制限します。 | |
--disable-content-trust | true | イメージの検証を省略します。 |
--dns | カスタム DNS サーバーを設定します。 | |
--dns-option | DNS オプションを設定します。 | |
--dns-search | カスタム DNS 検索ドメインを設定します。 | |
--domainname | コンテナーの NIS ドメイン名。 | |
--entrypoint | イメージのデフォルト ENTRYPOINT をオーバーライドします。 | |
-e, --env | 環境変数を設定します。 | |
--env-file | 環境変数ファイルを読み込みます。 | |
--expose | ポートまたはポート範囲を公開します。 | |
--gpus | API 1.40 以上 コンテナーに追加する GPU デバイスを指定します。('all' により全 GPU) | |
--group-add | 新たに参加するグループを追加します。 | |
--health-cmd | ヘルスチェックを実行するコマンド。 | |
--health-interval | ヘルスチェックの実行間隔。(ms|s|m|h) (デフォルトは 0s) | |
--health-retries | 不健康(unhealthy)であると報告するのに必要な連続失敗回数。 | |
--health-start-interval | API 1.44 以上
起動時間内のヘルスチェックの実行間隔。(ms|s|m|h) (デフォルトは 0s) | |
--health-start-period | API 1.29 以上
ヘルスチェックのリトライを数え始める前の、コンテナー初期化を行う開始時間。(ms|s|m|h) (デフォルトは 0s) | |
--health-timeout | 1 つのチェック処理実行に許容する最大時間。(ms|s|m|h) (デフォルトは 0s) | |
--help | 利用方法を表示します。 | |
-h, --hostname | コンテナーホスト名。 | |
--init | API 1.25 以上
コンテナー内部にて、シグナル送信と子プロセス管理を行う初期化処理を実行します。 | |
-i, --interactive | アタッチされていなくても STDIN は開放し続けます。 | |
--io-maxbandwidth | システムデバイスの I/O 帯域幅の上限。(Windows のみ) | |
--io-maxiops | システムデバイスの IOps の上限。(Windows のみ) | |
--ip | IPv4 アドレス。(たとえば 172.30.100.104) | |
--ip6 | IPv6 アドレス。(たとえば 2001:db8::33) | |
--ipc | 利用する IPC mode モード。 | |
--isolation | コンテナーの分離技術(isolation technology)方式。 | |
--kernel-memory | カーネルメモリ上限。 | |
-l, --label | コンテナーに対してメタデータを設定します。 | |
--label-file | 行ごとにラベルが記述されたファイルを読み込みます。 | |
--link | 別コンテナーへのリンクを追加します。 | |
--link-local-ip | コンテナーの IPv4/IPv6 によるリンクローカルアドレス。 | |
--log-driver | コンテナーにおけるログドライバー。 | |
--log-opt | ログドライバーオプション。 | |
--mac-address | コンテナーの MAC アドレス。(たとえば 92:d0:c6:0a:29:33) | |
-m, --memory | メモリ上限。 | |
--memory-reservation | メモリのソフト上限。 | |
--memory-swap | メモリとスワップの総量を制限します。'-1' 設定時はスワップ無制限。 | |
--memory-swappiness | -1 | コンテナーのスワップ割合を調整します。(0 から 100) |
--mount | ファイルシステムマウントをコンテナーにアタッチします。 | |
--name | コンテナーに名前を割り当てます。 | |
--network | コンテナーをネットワークに接続します。 | |
--network-alias | ネットワーク範囲内のエイリアスをコンテナーに追加します。 | |
--no-healthcheck | コンテナー固有の HEALTHCHECK を無効にします。 | |
--oom-kill-disable | OOM キラーを無効にします。 | |
--oom-score-adj | ホストの OOM に対する優先順位を設定します。(-1000 から 1000) | |
--pid | 利用する PID 名前空間。 | |
--pids-limit | コンテナーの PID 制限を調整します。(-1 により無制限) | |
--platform | API 1.32 以上 サーバーがマルチプラットフォームに対応している場合にプラットフォームを指定します。 | |
--privileged | コンテナーに拡張権限を付与します。 | |
-p, --publish | ホストに対してコンテナーのポートを公開します。 | |
-P, --publish-all | 公開されたポートをランダムポートとして公開します。 | |
--pull | missing | イメージ生成前にプルを行います(always, missing, never)。 |
-q, --quiet | プル処理時の出力を省略します。 | |
--read-only | コンテナーのルートファイルシステムを読み込み専用としてマウントします。 | |
--restart | no | コンテナー終了時に適用する再起動ポリシー。 |
--rm | 終了時にコンテナーと関連する匿名ボリュームがあればそれを自動的に削除します。 | |
--runtime | このコンテナー向けに利用するランタイム。 | |
--security-opt | セキュリティオプション。 | |
--shm-size | /dev/shm のサイズ。 | |
--stop-signal | コンテナーを停止するシグナル。 | |
--stop-timeout | API 1.25 以上 コンテナー停止時の中断時間(秒単位)。 | |
--storage-opt | コンテナーにおけるストレージドライバーのオプション。 | |
--sysctl | sysctl オプション。 | |
--tmpfs | tmpfs ディレクトリのマウント。 | |
-t, --tty | 擬似 TTY を割り当てます。 | |
--ulimit | ulimit オプション。 | |
--use-api-socket | 試験的 (CLI) Docker API ソケットと必要な auth をバインドマウントします。 | |
-u, --user | ユーザー名または UID。(記述書式: <name|uid>[:<group|gid>]) | |
--userns | 利用するユーザー名前空間。 | |
--uts | 利用する UTS 名前空間。 | |
-v, --volume | ボリュームをバインドマウントします。 | |
--volume-driver | 任意に指定するボリュームドライバー。 | |
--volumes-from | 指定されたコンテナーからボリュームをマウントします。 | |
-w, --workdir | コンテナー内部のワーキングディレクトリ。 |
利用例
コンテナーの生成と起動
以下の例は、疑似 TTY をアタッチして対話操作を可能にしたコンテナーを生成します。 そしてコンテナーを起動し疑似 TTY をアタッチします。
$ docker container create -i -t --name mycontainer alpine
6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752
$ docker container start --attach -i mycontainer
/ # echo hello world
hello world
上の例は以下の docker run を実行した場合と同じです。
$ docker run -it --name mycontainer2 alpine
/ # echo hello world
hello world
ボリュームの初期化
コンテナーボリュームは docker create 処理内において初期化されます (docker run でも同じです)。
たとえば以下はボリュームコンテナー data を create し、それを別コンテナーから利用します。
$ docker create -v /data --name data ubuntu
240633dfbb98128fa77473d3d9018f6123b99c454b3251427ae190a7d951ad57
$ docker run --rm --volumes-from data ubuntu ls -la /data
total 8
drwxr-xr-x 2 root root 4096 Dec 5 04:10 .
drwxr-xr-x 48 root root 4096 Dec 5 04:11 ..
同じようにして、ホストディレクトリをバインドマウントしたボリュームコンテナーを create します。
そして次のコンテナーからそれを利用します。
$ docker create -v /home/docker:/docker --name docker ubuntu
9aa88c08f319cd1e4515c3c46b0de7cc9aa75e878357b1e96f91e2c773029f03
$ docker run --rm --volumes-from docker ubuntu ls -la /docker
total 20
drwxr-sr-x 5 1000 staff 180 Dec 5 04:00 .
drwxr-xr-x 48 root root 4096 Dec 5 04:13 ..
-rw-rw-r-- 1 1000 staff 3833 Dec 5 04:01 .ash_history
-rw-r--r-- 1 1000 staff 446 Nov 28 11:51 .ashrc
-rw-r--r-- 1 1000 staff 25 Dec 5 04:00 .gitconfig
drwxr-sr-x 3 1000 staff 60 Dec 1 03:28 .local
-rw-r--r-- 1 1000 staff 920 Nov 28 11:51 .profile
drwx--S--- 2 1000 staff 460 Dec 5 00:51 .ssh
drwxr-xr-x 32 1000 staff 1140 Dec 5 04:01 docker