docker create

説明

新しいコンテナを 作成(create) します。

使い方

$ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

補足説明

docker create コマンドは、指定したイメージ上に書き込み可能なコンテナ・レイヤを作成し、指定したコマンドを実行する準備をします。実行後、 STDOUT にコンテナ ID を表示します。これは docker run -d と似ていますが、コンテナは決して起動しません。その後、いつでも docker start <コンテナID> コマンドを使ってコンテナを起動できます。

これは、事前にコンテナの設定を済ませておきたい場合に役立ちます。そのため、必要があればいつでも起動できます。この新しいコンテナの初期 状態(status)created (作成済み)です。

詳細は run コマンドDocker run リファレンス をご覧ください。

コマンドの使用例は、以下の 使用例のセクション をご覧ください。

使用例

コンテナの作成と起動

$ docker create -t -i fedora bash
6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752

$ docker start -a -i 6d8af538ec5
bash-4.2#

ボリュームの初期化

バージョン 1.4.0 以降では、 docker create の段階で( docker run も同様 )コンテナのボリュームを初期化します。これにより、例えば date ボリューム(の名前を持つ)コンテナを 作成(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 ..

同様に、 ホスト側のディレクトリを バインド(bind) するボリューム・コンテナを作成した後は、以降に処理するコンテナからも(bind マウントしたホスト側のディレクトリが)利用可能になります。

$ 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

コンテナごとにストレージ・ドライバの指定するには、次のように実行します。

$ docker create -it --storage-opt size=120G fedora /bin/bash

この size(容量)とは、コンテナのルート・ファイルシステムの容量を作成時に 120GB と指定しています。このオプションを指定できるのは devicemapperbrtfsoverlay2windowsfilterzfs の各 グラフ・ドライバ(graph driver) を使う時のみです。 devicemapperbrtfsoverlay2windowsfilterzfs の各 グラフ・ドライバ(graph driver) では、ユーザはデフォルトの BaseFS 容量をよりも小さな値を指定できません。 overlay2 ストレージ上ージ・ドライバでは、バックエンドで使用するファイルシステムが xfs で、かつ、 pquota マウントオプションでマウント指定している場合のみ、size オプションを指定できます。

コンテナの分離技術を指定(--isolation)

このオプションは Docker コンテナを Window 上で使う状況で役立ちます。 --isolation=<値> オプションは、コンテナの分離技術を指定します。 Linux 上では、サポートしているオプションは Linux 名前空間を使う default のみです。Microsoft Windows 上では、以下の値を指定できます。

説明

default

Docker デーモンの --exec-opt で指定した値を使います。 daemon に分離技術を指定しなければ、Microsoft Windows は Windows Server が動いていれば process を使います。あるいは Windows クライアントの場合は hyperv を使います。

デーモンが Windows server 上で実行中か、Windows クライアントが hyperv で動作中

process

名前空間の分離のみです。

hyperv

Hyper-V ハイパーバイザのパーティションをベースとした分離です。

--isolation フラグに値を指定しなければ、 --isolation="default" を指定したのと同じです。

デバイスを動的に扱うには( --device-cgroup-rule )

デバイスはコンテナの作成時に割り当て可能です。このデバイス割り当ては、コンテナ実行時に一度だけ作成される cgroup.allow ファイルへの追加でも可能です。これにより、実行中のコンテナに対して新しいデバイスを追加する時に、課題が発生します。

解決法の1つは、コンテナが広範囲のデバイスに対してアクセスできないように、より厳密なルールを追加します。たとえば、仮定としてコンテナに必要な接続とは、キャラクタ・デバイスのメジャー 42 と、その他のマイナー・ナンバー(新しいデバイスが追加されると出現)とするには、次のようにしてルールを適用します。

$ docker create --device-cgroup-rule='c 42:* rmw' -name my-container my-image

その後、必要なデバイスを追加した後で、ユーザは udev に対して探すよう、 docker exec my-container mknod newDevX c 42 <minor> のような命令を実行できます。

注釈

はじめから存在しているデバイスは、create や run コマンドの実行時に、(デバイスの)追加を明示する必要があります。

親コマンド

コマンド

説明

docker

Docker CLI の基本コマンド