docker runコマンドは、コンテナーを起動して実行するために使用されます。 使い方を学ぶ docker run
コマンドは、Dockerに精通したい開発者に推奨されます。
Dockerを使用する場合、ソフトウェア開発者は主に「dockerrun」コマンドを使用して次のことを行います。
- 特定のDockerイメージからコンテナーを作成します
- オプションの名前でコンテナを実行する
- フォアグラウンドでコンテナを実行します
- デタッチモードでコンテナを実行する
- コンテナをインタラクティブモードで実行する
- コンテナポートをホストマシンに公開する
- コンテナとホストマシン間でデータを共有する
- 停止したらコンテナを取り外します
Docker実行コマンド
コマンドの構文:
docker run [options] image-name [command] [arg...]
Dockerコンテナを実行するには、Dockerが既にインストールされていると仮定して、次のコマンドを実行するだけです。
docker run image-name
どこ:
image-nameは、ローカルマシン上のDockerイメージにすることも、DockerHubやQuay.ioなどのオンラインレジストリから取得することもできます。
以下では example、DockerHubにあるパブリックイメージ「hello-world」からコンテナを実行します。
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
コンテナーを初めて実行するとき、DockerデーモンはDockerハブからイメージ「hello-world」をプルします。 次に、そのイメージから新しいコンテナを作成し、出力をターミナルにストリーミングします。 これ以降、イメージはローカルマシンにダウンロードされました。 次のコマンドを実行して、すべてのDockerイメージを一覧表示できます。
$ sudo docker image ls
出力:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e2eef94cd6b 9 days ago 73.9MB
nginx latest 4bb46517cac3 2 weeks ago 133MB
alpine latest a24bb4013296 3 months ago 5.57MB
truongnh1992/go latest 57b4af3567ac 3 months ago 7.41MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
次にそのイメージを実行するときは、最初のイメージよりも高速であり、イメージ名の代わりにIMAGE-IDを使用できます。 にとって example:
$ sudo docker run bf756fb1ae65
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
ノート: Dockerバージョン1.13から、そのリリースの新しい構文により、「dockerrun」の代わりに「dockercontainerrun」を使用します。
dockerrunコマンドの前に次のコマンドを付けることをお勧めします sudo または他の回避策なし sudo。
定義された名前でコンテナーを実行します
基本構文「dockercontainerrun」でコンテナーを実行すると、以下に示すように、Dockerは各コンテナーの名前をランダムに生成します。
$ sudo docker container ls -a
出力:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
941b67537bbb ubuntu "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago musing_elgamal
a7b197b56d2c bf756fb1ae65 "/hello" About a minute ago Exited (0) About a minute ago determined_faraday
0b40e331161e hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago nervous_sammet
コンテナに明示的に名前を割り当てたい場合は、次の構文でコマンドを実行してみましょう。
$ docker container run --name container-name image-name
にとって example:
$ sudo docker container run --name hello-linoxide hello-world
出力:
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb2f0c9cc658 hello-world "/hello" 21 seconds ago Exited (0) 20 seconds ago hello-linoxide
...
フォアグラウンドでコンテナを実行します
Dockerコンテナーを操作する場合、それらを実行するには2つのモードがあります。 アタッチモード と デタッチモード。
デフォルトでは、Dockerはコンテナをフォアグラウンドで実行します。 これは、コンテナプロセスがターミナルセッションに接続し、出力を表示することを意味します。 コンテナがまだ実行中の場合、コマンドプロンプトは返されません。
にとって example:
$ sudo docker container run nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
デタッチモードでコンテナを実行する
そのコンテナをバックグラウンドプロセス(デタッチモード)で実行する場合は、 -d
オプション:
$ sudo docker container run -d nginx
4fd8f2933eafaebcc75ef4fe6d0a961f76d8fdbf64383caff7f422a25c60951f
コンテナをインタラクティブモードで実行する
Dockerは、インタラクティブモードでのコンテナーの実行をサポートします。 この機能のおかげで、シェルを備えたコンテナ内でコマンドを実行できます。
を使用して -it
‘/ bin /に続くオプションbash’または’ / bin / sh ‘は、インタラクティブモードを起動します。 example:
$ sudo docker container run -it ubuntu /bin/bash
root@d99e70bff763:/# echo $0
/bin/bash
$ sudo docker container run -it ubuntu /bin/sh
# echo $0
/bin/sh
コンテナのポートフォワーディング
デフォルトでは、コンテナ内で実行されているプロセスにアクセスするには、コンテナ内に入る必要があります。 外部からアクセスしたい場合は、ポートを開いてみましょう。 ポートを公開することにより、を使用してコンテナポートをホストマシンのポートにマップできます。 -p
次のようなオプション:
$ dock container run -p host-port:container-port image
にとって example、コンテナnginxのポート80をホストマシンのポート8080にマップするには、次のコマンドを実行します。
$ sudo docker container run -d -p 8080:80 nginx
cd85a291dab1ff92fa2ee6275446f758baa8322de2b706f7b581a54825142c5b
それでは、 ‘を使用しましょうcurl’localhost:8080からコンテンツを取得します
$ curl localhost:8080
コンテナのマウントボリューム
コンテナ内のデータは一時的なものであり、コンテナが停止すると存在しなくなります。 コンテナ内のデータを永続的に保持する場合は、共有ストレージボリュームにデータをマウントする必要があります。
使ってみよう -v
ボリュームをマウントするための次のオプション:
$ docker container run -v host-machine-location:container-storage image
にとって example、ホストマシンの「share-data」ディレクトリをコンテナの「/ home」にマウントしましょう。
$ mkdir share-data/
$ echo "Hello linoxide readers" > share-data/test.txt
$ sudo docker container run -it -v $(pwd)/share-data:/home alpine
出力:
/ # ls /home/
test.txt
/ # cat /home/test.txt
Hello linoxide readers
停止したらコンテナを取り外します
デフォルトでは、コンテナが停止しても、そのファイルシステムはホストマシンに残ります。 それらは大量のストレージを消費します。 コンテナが終了した後に自動的に削除する場合は、次を使用します。 --rm
オプション:
$ docker container run --rm image
にとって example、なしでDockerコンテナを実行する --rm
オプション:
$ sudo docker container run ubuntu
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad348fb61463 ubuntu "/bin/bash" 8 seconds ago Exited (0) 6 seconds ago distracted_hoover
使用する場合 --rm
オプション、コンテナが停止すると、自動的に削除されます。
$ sudo docker container run --rm ubuntu
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
結論
Dockerは、ソフトウェア開発者がコンテナー化されたアプリケーションを構築、デプロイ、および管理できるようにするオープンソースプラットフォームです。 Dockerは、開発者、特にDevOpsエンジニアにとって非常に強力なツールです。 「dockercontainerrun」コマンドの使用方法をマスターすることは、Dockerの能力を発見するための鍵です。
読んでいただきありがとうございます。以下のコメントセクションに提案を残してください。