docker create¶
補足説明¶
docker create
コマンドは、指定したイメージ上に書き込み可能なコンテナ・レイヤを作成し、指定したコマンドを実行する準備をします。実行後、 STDOUT
にコンテナ ID を表示します。これは docker run -d
と似ていますが、コンテナは決して起動しません。その後、いつでも docker start <コンテナID>
コマンドを使ってコンテナを起動できます。
これは、事前にコンテナの設定を済ませておきたい場合に役立ちます。そのため、必要があればいつでも起動できます。この新しいコンテナの初期 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
ボリューム(の名前を持つ)コンテナを
$ 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 ..
同様に、 ホスト側のディレクトリを
$ 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 と指定しています。このオプションを指定できるのは devicemapper
、 brtfs
、 overlay2
、 windowsfilter
、 zfs
の各 devicemapper
、 brtfs
、 overlay2
、 windowsfilter
、 zfs
の各 overlay2
ストレージ上ージ・ドライバでは、バックエンドで使用するファイルシステムが xfs
で、かつ、 pquota
マウントオプションでマウント指定している場合のみ、size オプションを指定できます。
コンテナの分離技術を指定(--isolation)¶
このオプションは Docker コンテナを Window 上で使う状況で役立ちます。 --isolation=<値>
オプションは、コンテナの分離技術を指定します。 Linux 上では、サポートしているオプションは Linux 名前空間を使う default
のみです。Microsoft Windows 上では、以下の値を指定できます。
値 |
説明 |
---|---|
|
Docker デーモンの |
デーモンが Windows server 上で実行中か、Windows クライアントが |
|
|
名前空間の分離のみです。 |
|
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 コマンドの実行時に、(デバイスの)追加を明示する必要があります。