DockerRunコマンドの使用方法 [Beginners Guide]

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の能力を発見するための鍵です。

読んでいただきありがとうございます。以下のコメントセクションに提案を残してください。