Docker でビルド コマンドと実行コマンドを組み合わせる
-
docker build
およびdocker run
コマンドの目的 -
二重アンパサンド演算子 (
&&
) を使用して Docker コマンドを組み合わせる - コマンド置換を使用して Docker コマンドを組み合わせる
- まとめ
Dockerfile を使用してコンテナーの作成を自動化する場合、通常は docker build
および run
コマンドを使用します。 ただし、通常はほとんどのコマンドを 1 回の実行で組み合わせて、ローカル イメージ リポジトリを整理します。
この記事では、docker build
や run
などのコマンドを 1 行で組み合わせる方法について説明します。
docker build
および docker run
コマンドの目的
docker build
コマンドと docker run
コマンドを一緒に使用すると、いくつかのシナリオで役立ちます。 たとえば、新しいアプリケーションを開発していて、すぐにテストしたい場合は、これらのコマンドを使用してビルドし、コンテナーで実行できます。
これにより、時間を節約でき、アプリケーションのテストが容易になります。
docker build
コマンドは、Dockerfile の指示を読み取り、それを使用して Docker イメージを作成します。 Dockerfile を既にビルドしている場合は、docker run -it
コマンドを使用してイメージを実行できます。
このコマンドは、イメージから新しいコンテナーを作成し、対話モードで実行します。
このモードは、コンテナと対話し、内部でコマンドを実行できることを意味します。 これらを個別に実行することもできますが、1 行で実行する方法がいくつかあります。
二重アンパサンド演算子 (&&
) を使用して Docker コマンドを組み合わせる
docker build
と docker run -it
コマンドを組み合わせる 1つの方法は、 docker run
コマンドで --rm
フラグを使用することです。 このフラグは、コンテナーが自動的に終了するときにコンテナーを削除するように Docker に指示します。
このフラグは、次のように docker build
コマンドと docker run
コマンドを 1 行で実行できることを意味します。
docker build -t my-image . && docker run --rm -it my-image
この例では、my-image
は、ビルドして実行する Docker イメージの名前です。 docker build
コマンドの最後のピリオド (.
) は、Dockerfile が現在のディレクトリにあることを示します。
このコマンドを実行すると、Docker は Dockerfile の指示に従ってイメージをビルドし、新しいコンテナーでイメージを実行します。 --rm
フラグは、コンテナが終了するときにコンテナを自動的に削除することを保証します。
コマンド置換を使用して Docker コマンドを組み合わせる
2つのコマンドを組み合わせるもう 1つの例は、ドル記号 ($
) 演算子を使用してそれらをネストすることです。 コマンドは次のようになります。
docker run --rm -it $(docker build -t my-image)
$(...)
構文はコマンド置換と呼ばれます。 Docker はコマンドの出力を別のコマンドの引数として使用するため、コマンド置換を使用します。
上記の場合、Docker は最初に docker build -t my-image
コマンドを実行し、出力 (新しくビルドされた Docker イメージの ID) を docker run
コマンドの引数として使用します。 置換を使用することで、Docker は docker run
コマンドで、docker build
コマンドによって返された ID を使用して Docker イメージを実行します。
さらに、アプリケーションを運用環境にデプロイする場合は、この方法を使用して Docker イメージを構築し、運用サーバーで実行できます。 これにより、アプリケーションが一貫した環境で実行され、管理と保守が容易になります。
まとめ
全体として、docker build
および docker run
コマンドは、Docker イメージを構築および実行するための強力なツールです。 これらのコマンドを組み合わせることで、わずか 1 行のコードで Docker イメージをビルドして実行できるようになり、アプリケーションの開発、テスト、デプロイがより簡単かつ迅速になります。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn