アンドロイド

例付きのDocker実行コマンド

Dockerfile Tutorial - Docker in Practice || Docker Tutorial 10

Dockerfile Tutorial - Docker in Practice || Docker Tutorial 10

目次:

Anonim

Dockerは、アプリケーションを開発、テスト、および展開できるプラットフォームであり、事実上どこでも実行できる自給自足型のコンテナとして使用できます。

docker run コマンドは、指定されたイメージからコンテナを作成し、指定されたコマンドを使用してコンテナを起動します。 これは、Dockerでの作業を開始するときに慣れる必要がある最初のコマンドの1つです。

、公式のNginxイメージを使用して、Dockerコンテナを実行するさまざまな方法を示します。

Docker実行コマンド

docker run コマンドの形式は次のとおりです。

docker run IMAGE

コンテナーの作成元のイメージの名前は、 docker run コマンドに必要な唯一の引数です。 イメージがローカルシステムに存在しない場合、レジストリから取得されます。

コマンドが指定されていない場合、コンテナの実行時にDockerfileの CMD または ENTRYPOINT 命令で指定されたコマンドが実行されます。

バージョン1.13から、Docker CLIが再構築され、すべてのコマンドが相互作用するオブジェクトの下にグループ化されました。

run コマンドはコンテナと対話するため、現在は docker container サブコマンドです。 新しいコマンドの構文は次のとおりです。

docker container run IMAGE

1.13より前の古い構文は引き続きサポートされています。 docker run は、 docker run コマンドは docker container run エイリアスです。 ユーザーは、新しいコマンド構文を使用することをお勧めします。

すべての docker container run オプションのリストは、Dockerドキュメントページにあります。

フォアグラウンドでコンテナを実行する

デフォルトでは、 docker run コマンドにオプションが提供されていない場合、ルートプロセスはフォアグラウンドで開始されます。 これは、ルートプロセスからの標準入力、出力、およびエラーがターミナルセッションに添付されることを意味します。

docker container run nginx

nginxプロセスの出力が端末に表示されます。 Webサーバーへの接続がないため、ターミナルは空です。

コンテナを停止するには、 CTRL+C 押して実行中のNginxプロセスを終了します。

分離モードでコンテナを実行する

ターミナルセッションを終了するときにコンテナを実行し続けるには、デタッチモードで起動します。 これは、バックグラウンドでLinuxプロセスを実行することに似ています。

-d オプションを使用して、切り離されたコンテナーを開始します。

docker container run -d nginx

050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

ルートプロセスが終了すると、切り離されたコンテナは停止します。

docker container ls コマンドを使用して、実行中のコンテナーを一覧表示できます。

切り離されたコンテナルートプロセスに端末を接続するには、 docker container attach コマンドを使用します。

終了後にコンテナを削除する

デフォルトでは、コンテナが終了すると、そのファイルシステムはホストシステムに残ります。

--rm オプションは、コンテナが自動的に終了するときに --rm docker run コマンドにコンテナを削除する docker run 指示します。

docker container run --rm nginx

Nginxイメージは、コンテナの終了後にコンテナのファイルシステムをクリーンアップする最良の例ではない場合があります。 通常、このオプションは、テストやデータベースのバックアップなどの短期タスクを実行するフォアグラウンドコンテナで使用されます。

コンテナ名を設定する

Dockerでは、各コンテナは UUID と名前で識別されます。 デフォルトでは、明示的に設定されていない場合、コンテナの名前はDockerデーモンによって自動的に生成されます。

--name オプションを使用して、コンテナにカスタム名を割り当てます。

docker container run -d --name my_nginx nginx

コンテナ名は一意である必要があります。 同じ名前で別のコンテナを起動しようとすると、次のようなエラーが表示されます。

docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9…c". You have to remove (or rename) that container to be able to reuse that name.

docker container ls -a を実行してすべてのコンテナーを一覧表示し、名前を確認します。

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d695c1f5ef4 nginx "nginx -g 'daemon of…" 36 seconds ago Up 35 seconds 80/tcp my_nginx

意味のある名前は、Dockerネットワーク内でコンテナーを参照する場合、またはdocker CLIコマンドを実行する場合に役立ちます。

コンテナポートの公開

デフォルトでは、ポートが公開されていない場合、コンテナ内で実行されているプロセスには、コンテナ内からのみアクセスできます。

ポートの公開とは、コンテナポートをホストマシンのポートにマッピングして、ポートをDockerの外部のサービスで使用できるようにすることです。

ポートを公開するには、次のように -p オプションを使用します。

-p host_ip:host_port:container_port/protocol

  • host_ip が指定されていない場合、デフォルトは 0.0.0.0 protocol が指定されていない場合、デフォルトはTCPです。複数のポートを公開するには、複数の -p オプションを使用します。

コンテナーのTCPポート80(nginx)をホストlocalhostインターフェースのポート8080にマップするには、次を実行します。

docker container run --name web_server -d -p 8080:80 nginx

ブラウザで http://localhost:8080 を開くか、Dockerホストで次の curl コマンドを実行することで、ポートが公開されていることを確認できます。

curl -I

出力は次のようになります。

HTTP/1.1 200 OK Server: nginx/1.17.6 Date: Tue, 26 Nov 2019 22:55:59 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT Connection: keep-alive ETag: "5dd3e500-264" Accept-Ranges: bytes

データの共有(ボリュームのマウント)

コンテナが停止すると、コンテナによって生成されたすべてのデータが削除されます。 Dockerボリュームは、データを永続化し、複数のコンテナー間で共有するための推奨される方法です。

ボリュームを作成および管理するには、次のように -p オプションを使用します。

-v host_src:container_dest:options

  • host_src は、ホスト上のファイルまたはディレクトリへの絶対パスまたは名前付き host_src することができます host_src は、コンテナ上のファイルまたはディレクトリへの絶対パスです。オプションは、 rw (読み取り/書き込み)および ro (読み取り専用) )。 オプションが指定されていない場合、デフォルトは rw ます。

これがどのように機能するかを説明するために、ホスト上にディレクトリを作成し、その中に index.html ファイルを配置しましょう。

mkdir public_html echo "Testing Docker Volumes" > public_html/index.html

次に、 public_html ディレクトリをコンテナの /usr/share/nginx/html にマウントし public_html

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

public_html ディレクトリへの絶対パスを指定する代わりに、現在の作業ディレクトリを出力する $(pwd) コマンドを使用しています。

ブラウザで http://localhost:8080 と入力すると、 index.html ファイルの内容が表示されます。 curl 使用することもできます:

curl

Testing Docker Volumes

コンテナをインタラクティブに実行する

bash ような対話型プロセスを扱う場合、 -i および -t オプションを使用してコンテナを起動します。

-it オプションは、標準入力を端末にアタッチし、疑似ttyを割り当てるようにDockerに指示します。

docker container run -it nginx /bin/bash

コンテナのBashシェルがターミナルに接続され、コマンドプロンプトが変わります。

root@1da70f1937f5:/#

これで、コンテナのシェルと対話して、その内部でコマンドを実行できます。

この例では、Dockerfileで指定されたコマンドの代わりに実行されたdocker docker run コマンドへの引数としてコマンド( /bin/bash )を提供しました。

結論

Dockerは、アプリケーションのパッケージ化とデプロイの標準であり、CI / CD、自動化、DevOpsの不可欠なコンポーネントです。

docker container run コマンドは、Dockerコンテナを作成および実行するために使用されます。

ドッカー