Dockerfile Tutorial - Docker in Practice || Docker Tutorial 10
目次:
- Docker実行コマンド
- フォアグラウンドでコンテナを実行する
- 分離モードでコンテナを実行する
- 終了後にコンテナを削除する
- コンテナ名を設定する
- コンテナポートの公開
- データの共有(ボリュームのマウント)
- コンテナをインタラクティブに実行する
- 結論
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
コンテナをインタラクティブに実行する
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コンテナを作成および実行するために使用されます。