サーチ…


構文

  • docker run [オプション]イメージ[コマンド] [ARG ...]

コンテナの実行

docker run hello-world

Docker Hubから最新のhello-worldイメージを取得します(まだ持っていない場合)。新しいコンテナを作成して実行します。インストールが正しく動作しているようだというメッセージが表示されます。

コンテナ内で別のコマンドを実行する

docker run docker/whalesay cowsay 'Hello, StackExchange!'

このコマンドは、Dockerに、 docker/whalesayイメージからコンテナを作成し、 cowsay 'Hello, StackExchange!'コマンドを実行するよう指示しcowsay 'Hello, StackExchange!'その中に。 Hello, StackExchange!という鯨の絵が印刷されるはずHello, StackExchange!あなたの端末に。

イメージ内のエントリポイントがデフォルトの場合、イメージで使用可能なコマンドを実行できます。

docker run docker/whalesay ls /

画像の作成中に変更されている場合は、デフォルトに戻す必要があります

docker run --entrypoint=/bin/bash docker/whalesay -c ls /

コンテナを実行後に自動的に削除する

通常、Dockerコンテナは終了後も保持されます。これにより、コンテナを再度実行したり、ファイルシステムを検査したりすることができます。ただし、コンテナを実行して終了した直後にコンテナを削除したい場合があります。たとえば、コマンドを実行したり、ファイルシステムからファイルを表示するなどです。 Dockerはこの目的のために--rmコマンドラインオプションを提供しています:

docker run --rm ubuntu cat /etc/hosts

これは、 "ubuntu"イメージからコンテナを作成し、 / etc / hostsファイルの内容を表示し、終了直後にコンテナを削除します。これは、実験を終えた後にコンテナをクリーンアップする必要を防ぐのに役立ちます。

注: -- --rmフラグは、 --detach <1.13.0の-d (-- --detach )フラグと連動しません。

--rmフラグが設定されている場合、Dockerは、コンテナが削除されたときにコンテナに関連付けられたボリュームも削除します。これはdocker rm -v my-containerを実行するのと同様です。 名前なしで指定されたボリュームだけが削除されます。

たとえば、 docker run -it --rm -v /etc -v logs:/var/log centos /bin/produce_some_logsと、 /etcのボリュームは削除され/var/logが、 /var/logボリュームは削除されません。 --volumes-fromを介して継承されたボリュームは、同じ論理で削除されます。元のボリュームに名前が指定されていれば、削除されません。

名前の指定

デフォルトでは、 small_roentgen docker run作成されたコンテナにはsmall_roentgenmodest_dubinskyようなランダムな名前が与えられます。これらの名前は、コンテナの目的の特定には特に役立ちません。 --nameコマンドラインオプションを渡すことで、コンテナの名前を指定することができます:

docker run --name my-ubuntu ubuntu:14.04

名前は一意でなければなりません。別のコンテナが既に使用している名前を渡すと、Dockerはエラーを出力し、新しいコンテナは作成されません。

名前を指定すると、Dockerネットワーク内のコンテナを参照するときに便利です。これは、背景と前景のDockerコンテナの両方で機能します。

既定のブリッジネットワーク上のコンテナは、名前で通信するためにリンクする必要あります。

コンテナポートをホストにバインドする

docker run -p "8080:8080" myApp
docker run -p "192.168.1.12:80:80" nginx
docker run -P myApp

ホスト上のポートがイメージに露出されている( EXPOSE Dockerfileディレクティブまたは--expose docker run用の--exposeコマンドラインオプションを使用)ためには、それらのポートを-pまたは-Pコマンドを使用してホストにバインドする必要がありますラインオプション。 -pを使用するには、特定のポート(およびオプションのホストインタフェース)を指定する必要があります。大文字の-Pコマンドラインオプションを使用すると、Dockerはコンテナのイメージ内に公開されているすべてのポートを強制的にホストにバインドします。

コンテナの再起動ポリシー(起動時にコンテナを開始する)

docker run --restart=always -d <container>

デフォルトでは、Dockerデーモンが再起動したとき(ホストシステムの再起動後など)にDockerはコンテナを再起動しません。 Dockerは、--restartコマンドラインオプションを--restartして、コンテナの再起動ポリシーを提供します。 --restart=alwaysすると、Dockerデーモンが再起動された後、コンテナが常に再起動されます。 ただし 、そのコンテナを手動で停止した場合(たとえば、 docker stop <container> )、再起動ポリシーはコンテナに適用されません。

複数のオプションは、要件( --restart=[policy] )に基づいて--restartオプションに指定できます。これらのオプションは、起動時にコンテナがどのように起動するかに影響します。

ポリシー結果
いいえ デフォルト値。コンテナが停止しているときに自動的にコンテナを再起動しません。
失敗時[:max-retries] コンテナが失敗して終了する場合にのみ再起動します( non-zero exit status )。無期限に再起動しないようにするには(何らかの問題が発生した場合)、Dockerデーモンが再試行する再起動の回数を制限することができます。
常に 終了ステータスにかかわらず常にコンテナを再起動してください。 alwaysを指定すると、Dockerデーモンはコンテナを無期限に再起動しようとします。コンテナは、コンテナの現在の状態に関係なく、常にデーモンの起動時に開始されます。
限りなく止められた 終了状態にかかわらず常にコンテナを再起動しますが、コンテナが以前に停止状態になっている場合はデーモンの起動時に起動しないでください。

バックグラウンドでコンテナを実行する

コンテナをバックグラウンドで実行し続けるには、コンテナの起動時に-dコマンドラインオプションを指定します。

docker run -d busybox top

-dオプションは、デタッチ・モードでコンテナを実行します。また、 -d=trueと同等-d=true

分離モードのコンテナは、停止すると自動的に削除することはできません。つまり、-rmオプションを-dオプションと組み合わせて使用​​することはできません。

コンテナにボリュームを割り当てる

Dockerボリュームは、コンテナの存続期間を超えて持続するファイルまたはディレクトリです。ホストファイルまたはディレクトリを(UnionFSを迂回して)ボリュームとしてコンテナにマウントすることは可能です。

-vコマンド行オプションを指定してボリュームを追加します。

docker run -d -v "/data" awesome/app bootstrap.sh

これにより、ボリュームが作成され、コンテナ内のパス/dataマウントされます。

  • 注:-- --rmフラグを使用して、コンテナが取り外されたときにボリュームを自動的に削除することができます。

ホストディレクトリのマウント

ホストファイルまたはディレクトリをコンテナにマウントするには:

docker run -d -v "/home/foo/data:/data" awesome/app bootstrap.sh
  • ホストディレクトリを指定するときは、絶対パスを指定する必要があります。

これは、ホストディレクトリにマウントされます/home/foo/data上に/dataコンテナの内部。この "バインドマウントされたホストディレクトリ"ボリュームは、Linuxのmount --bind - バインドと同じものであるため、ホストディレクトリを一時的にコンテナの存続期間中、指定されたコンテナパスにマウントします。ホストまたはコンテナからのボリュームの変更は、ディスク上の同じ宛先であるため、他方のボリュームにすぐに反映されます。

相対的なフォルダをマウントするUNIXの例

docker run -d -v $(pwd)/data:/data awesome/app bootstrap.sh

ボリュームの命名

ボリュームは、ホストディレクトリパスの代わりに文字列を指定することで命名できます。ドッカーはその名前を使ってボリュームを作成します。

docker run -d -v "my-volume:/data" awesome/app bootstrap.sh

名前付きボリュームを作成すると、その名前を使用して他のコンテナとボリュームを共有することができます。

環境変数の設定

$ docker run -e "ENV_VAR=foo" ubuntu /bin/bash

-e--env両方を使用して、コンテナ内の環境変数を定義できます。テキストファイルを使用して多くの環境変数を指定することができます。

$ docker run --env-file ./env.list ubuntu /bin/bash

環境変数ファイルの例:

# This is a comment
TEST_HOST=10.10.0.127

--env-fileフラグは引数としてファイル名をとり、各行がVARIABLE=VALUE形式になることを期待し、-- --env渡された引数を模倣します。コメント行の先頭には#付ける必要があります。

これらの3つのフラグの順序にかかわらず、 --env-fileが最初に処理され、次に-e / --envフラグが処理され--env-file 。このように、 -eまたは--env個別に-eされた環境変数は、-- --env-varテキストファイルで指定された変数を上書きします。

ホスト名の指定

デフォルトでは、docker runで作成されたコンテナにはランダムなホスト名が与えられます。 --hostnameフラグを渡すことによって、コンテナに別のホスト名を与えることができます:

docker run --hostname redbox -d ubuntu:14.04

対話的にコンテナを実行する

対話的にコンテナを実行するには、 -itオプションを渡します。

$ docker run -it ubuntu:14.04 bash
root@8ef2356d919a:/# echo hi
hi
root@8ef2356d919a:/#

-iはSTDINを開いたままにしますが、 -tは疑似TTYを割り当てます。

メモリ/スワップ制限付きコンテナの実行

メモリ制限を設定し、スワップ制限を無効にする

docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash

メモリとスワップの両方の制限を設定します。この場合、コンテナは300Mメモリと700Mスワップを使用できます。

docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash

実行中の(分離した)コンテナへのシェルの取得

実行中のコンテナにログインする

ユーザーはexecコマンドを使用して新しい対話式bashシェルに実行中のコンテナーを入力できます。

コンテナがjovial_morseと呼ばれているとすると、 jovial_morseを実行して対話型の擬似TTY bashシェルを取得できます。

docker exec -it jovial_morse bash

特定のユーザーと実行中のコンテナにログインする

コンテナを特定のユーザーとして入力する場合は、 -uまたは--userパラメーターを使用してコンテナを設定できます。ユーザー名はコンテナに存在する必要があります。

-u, --userユーザー名またはUID(形式: <name|uid>[:<group|gid>]

このコマンドは、 dockeruserユーザーとjovial_morseログインします

docker exec -it -u dockeruser jovial_morse bash

実行中のコンテナにrootとしてログインする

rootでログインする場合は、単に-u rootパラメータを使用します。ルートユーザーは常に存在します。

docker exec -it -u root jovial_morse bash

画像にログインする

runコマンドでイメージにログインすることもできますが、これにはコンテナ名ではなくイメージ名が必要です。

docker run -it dockerimage bash

中間イメージにログインする(debug)

Dockerfileビルド中に作成された中間イメージにもログインできます。

docker build .出力docker build .

$ docker build .
Uploading context 10240 bytes
Step 1 : FROM busybox
Pulling repository busybox
 ---> e9aa60c60128MB/2.284 MB (100%) endpoint: https://cdn-registry-1.docker.io/v1/
Step 2 : RUN ls -lh /
 ---> Running in 9c9e81692ae9
total 24
drwxr-xr-x    2 root     root        4.0K Mar 12  2013 bin
drwxr-xr-x    5 root     root        4.0K Oct 19 00:19 dev
drwxr-xr-x    2 root     root        4.0K Oct 19 00:19 etc
drwxr-xr-x    2 root     root        4.0K Nov 15 23:34 lib
lrwxrwxrwx    1 root     root           3 Mar 12  2013 lib64 -> lib
dr-xr-xr-x  116 root     root           0 Nov 15 23:34 proc
lrwxrwxrwx    1 root     root           3 Mar 12  2013 sbin -> bin
dr-xr-xr-x   13 root     root           0 Nov 15 23:34 sys
drwxr-xr-x    2 root     root        4.0K Mar 12  2013 tmp
drwxr-xr-x    2 root     root        4.0K Nov 15 23:34 usr
 ---> b35f4035db3f
Step 3 : CMD echo Hello world
 ---> Running in 02071fceb21b
 ---> f52f38b7823e

---> Running in 02071fceb21b出力---> Running in 02071fceb21b 、これらのイメージにログインできます:

docker run -it 02071fceb21b bash

stdinをコンテナに渡す

データベースダンプを復元する場合や、ホストからパイプ経由で情報をプッシュしたい場合は、 -iフラグをdocker runまたはdocker exec引数として使用できます。

たとえば、コンテナ化されたmariadbクライアントに、ローカルdump.sqlファイルのホスト上にあるデータベースダンプを配置する場合は、次のコマンドを実行できます。

docker exec -i mariadb bash -c 'mariadb "-p$MARIADB_PASSWORD" ' < dump.sql

一般に、

docker exec -i container command < file.stdin

または

docker exec -i container command <<EOF
inline-document-from-host-shell-HEREDOC-syntax
EOF

コンテナからの切り離し

(割り当てられたPTYと実行中のコンテナに取り付けたもののdocker run -it ...デタッチするコントロール Q - )、あなたがコントロール Pを押すことができます。

イメージエントリポイントディレクティブのオーバーライド

docker run --name="test-app" --entrypoint="/bin/bash" example-app

このコマンドは、コンテナtest-appが作成されたときのexample-appイメージのENTRYPOINTディレクティブを上書きします。特に指定しないかぎり、イメージのCMDディレクティブは変更されません。

docker run --name="test-app" --entrypoint="/bin/bash" example-app /app/test.sh

上記の例では、イメージのENTRYPOINTCMD両方がオーバーライドされています。このコンテナプロセスは/bin/bash /app/test.shます。

コンテナにホストエントリを追加する

docker run --add-host="app-backend:10.15.1.24" awesome-app

このコマンドは、 --add-host <name>:<address>の形式に従ったエントリをコンテナの/etc/hostsファイルに追加/etc/hostsます。この例では、名前app-backend10.15.1.24解決され10.15.1.24 。これは、異種のアプリケーションコンポーネントをプログラムで結びつける場合に特に便利です。

コマンドが実行されていないときにコンテナが停止しないようにする

フォアグラウンドでコマンドが実行されていない場合、コンテナは停止します。 -tオプションを使用すると、 -dオプションで切り離しても、コンテナが停止しないようになります。

docker run -t -d debian bash

コンテナの停止

docker stop mynginx

さらに、コンテナーIDは、名前の代わりにコンテナーを停止するために使用することもできます。

これにより、必要に応じてSIGTERM信号とSIGKILL信号を送信して、実行中のコンテナを停止します。

さらに、killコマンドを使用して、 -sオプションを使用してSIGKILLまたは他の指定されたシグナルをただちに送信することができます。

docker kill mynginx

指定信号:

docker kill -s SIGINT mynginx

コンテナを停止しても、コンテナは削除されません。停止したコンテナを見るには、 docker ps -aを使用してください。

実行中のコンテナで別のコマンドを実行する

必要に応じて、 execコマンドを使用して、すでに実行中のコンテナに対して追加のコマンドを実行するようDockerに指示できます。 docker ps取得できるコンテナのIDが必要です。

docker exec 294fbc4c24b3 echo "Hello World"

-itオプションを使用すると、対話シェルをアタッチできます。

docker exec -it 294fbc4c24b3 bash

LinuxコンテナでのGUIアプリケーションの実行

デフォルトでは、DockerコンテナはGUIアプリケーションを実行できません。

その前に、X11ソケットを最初にコンテナに転送する必要があります。そのため、直接使用することができます。 DISPLAY環境変数も転送する必要があります。

docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY <image-name>

Xサーバのホストにアクセス権を設定していないので、最初は失敗します:

cannot connect to X server unix:0

最も速い(ただし安全ではない)方法は、次のもので直接アクセスを許可することです。

xhost +local:root

コンテナで仕上げた後、次のように元の状態に戻ることができます。

xhost -local:root

別の(より安全な)方法は、Xサーバーにアクセスするためにユーザーの資格情報を使用する新しいイメージを作成するDockerfileを準備することです。

FROM <iamge-name>
MAINTAINER <you>

# Arguments picked from the command line!
ARG user
ARG uid
ARG gid

#Add new user with our credentials
ENV USERNAME ${user}
RUN useradd -m $USERNAME && \
        echo "$USERNAME:$USERNAME" | chpasswd && \
        usermod --shell /bin/bash $USERNAME && \
        usermod  --uid ${uid} $USERNAME && \
        groupmod --gid ${gid} $USERNAME

USER ${user}

WORKDIR /home/${user}

コマンドラインからdocker buildを呼び出すときは、Dockerfileに表示されるARG変数を渡さなければなりません:

docker build --build-arg user=$USER --build-arg uid=$(id -u) --build-arg gid=$(id -g) -t <new-image-with-X11-enabled-name> -f <Dockerfile-for-X11> .

新しいコンテナを作成する前に、アクセス許可を持つxauthファイルを作成する必要があります。

xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f /tmp/.docker.xauth nmerge -

このファイルは、作成/実行時にコンテナにマウントする必要があります。

docker run -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth:rw -e XAUTHORITY=/tmp/.docker.xauth


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow