Docker-Compose ファイルでコンテナーを再構築する
- 新しいプロジェクトを作成する
- イメージの Dockerfile を作成する
- コンテナ用の構成ファイルを作成する
-
compose
を使用してコンテナーを実行する -
compose
を使用して単一のコンテナーを再構築する - まとめ
アプリケーションを実装する前に、Dockerfile
と compose.yaml
ファイルの違いを理解する必要があります。
アプリケーションのカスタム イメージを作成するときは、通常、Dockerfile
という名前のファイルを使用し、コマンド ラインで docker run
コマンドを使用してコンテナーを実行します。 複数のイメージを作成したい場合、これらのコマンドは面倒でコンテナーの管理が難しくなるため、ここで compose.yaml
ファイルの出番です。
compose.yaml
ファイルは、イメージを構築し、コンテナーを実行し、これらのコンテナーのネットワークを作成し、それらをネットワークに追加します。 その後、サービスの名前を使用してネットワーク アプリケーションにアクセスできます。
これら 2つのコマンドは、docker compose up
コマンドがイメージを作成して実行できるように、アプリケーションに存在する必要があります。
イメージに何らかの変更が加えられた場合、これらのコマンドは変更を取得し、コンテナーを停止して、イメージを再作成します。 このチュートリアルでは、Docker ファイルで定義された複数のコンテナーから単一の Docker コンテナーを再構築する方法について説明します。
新しいプロジェクトを作成する
IntelliJ IDEA を開き、File > New > Project
を選択します。 開いたウィンドウで Node.js を選択し、プロジェクト名を untitled
から docker-rebuild-container
に変更するか、任意の名前を使用します。
ノード インタープリターとパッケージ マネージャーのセクションがコンピューターから自動的に追加されるように、ノード ランタイム環境がインストールされていることを確認します。 最後に、Create ボタンをクリックしてプロジェクトを生成します。
docker-rebuild-container
フォルダーの下に index.js
という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.json(
[
{
name: "Java in action",
author: "chad darby",
price: 345
},
{
name: 'React cookbook',
author: "mary public",
price: 600
},
])
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
このファイルでは、サンプルの Node.js アプリケーションを作成して、イメージを作成し、そこからコンテナーを実行しています。 このアプリケーションは、ブラウザの /
に get リクエストを発行することでアクセスできる API を公開します。
イメージの Dockerfile を作成する
Dockerfile
という名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。
FROM node:16.17.0-alpine
WORKDIR /com/app
ADD package*.json ./
RUN npm install
ADD . .
CMD node index.js
このファイルは、イメージを構築し、そこからコンテナーを実行するための指示を定義します。 docker documentation には、これらの命令がどのように機能するかについての詳細な説明が記載されています。
コンテナ用の構成ファイルを作成する
docker-rebuild-container
フォルダーに compose.yaml
ファイルを作成し、次の手順をコピーしてファイルに貼り付けます。
services:
service-one:
restart: on-failure
build: .
hostname: service-one
ports:
- '3000:3000'
service-two:
restart: on-failure
build: .
hostname: service-two
ports:
- '5000:3000'
このファイルは、service-one
および service-two
という名前の 2つのサービスを定義します。これらのサービスは、それぞれホストのポート 3000 および 5000 からコンテナーのポート 3000 をリッスンします。
サービス
- アプリケーションのコンピューティング コンポーネントを定義します。restart
- コンテナが終了したときに実行するアクションを定義します。build
- イメージをビルドするための構成を含むDockerfile
のソースを定義します。hostname
- サービスで使用されるカスタム名を設定します。ports
- ホスト マシンのポートを公開して、アプリケーションにサービスを提供します。
Docker ドキュメントには、これらの手順を詳細に説明する docker compose file reference が用意されています。
compose
を使用してコンテナーを実行する
この例では、定義されたすべてのコンテナーを一度にビルドして実行する方法を示します。 docker compose.yaml
ファイルを実行するには、キーボード ショートカット ALT + F12 を使用して開発環境で新しいターミナル ウィンドウを開き、次のコマンドをビルドして実行します。 コンテナ。
~/WebstormProjects/docker-rebuild-container$ docker compose up --build --force-recreate --no-deps -d
このコマンドを使用すると、コンテナーの実行と管理が非常に簡単になります。 このコマンドを使用する前に、docker compose up -d
を実行して、このコマンドでイメージを再構築し、コンテナーを再作成していることを確認します。
=> CACHED [docker-rebuild-container_service-two 2/5] WORKDIR /com/app 0.0s
=> CACHED [docker-rebuild-container_service-two 3/5] ADD package*.json ./ 0.0s
=> CACHED [docker-rebuild-container_service-two 4/5] RUN npm install 0.0s
=> [docker-rebuild-container_service-two 5/5] ADD . . 1.2s
=> [docker-rebuild-container_service-one] exporting to image
--build
- これにより、コンテナーを実行する前にイメージがビルドされます。--force-recreate
- 構成とイメージの状態を考慮せずにコンテナーを再作成します。--no-deps
- リンクされたサービスが開始されないようにします。
compose
を使用して単一のコンテナーを再構築する
compose.yaml
ファイルで定義された複数のコンテナーから単一のコンテナーを再構築するには、前の例で使用したコマンドを使用し、以下に示すように、再構築するサービスの名前を追加します。
~/WebstormProjects/docker-rebuild-container$ docker compose up --build --force-recreate --no-deps -d service-one
コンテナを 1つだけ再作成する必要があるため、このコマンドはイメージを再構築し、service-one
という名前のコンテナを再作成します。 以下に示すように、このコマンドの出力から、コンテナーが 1つだけ再作成されていることを確認できます。
[+] Running 1/1
⠿ Container docker-rebuild-container-service-one-1 Started
コンテナーが期待どおりに機能しているかどうかを確認するには、ブラウザーで 2つの要求を発行します。1つは localhost:3000
(http://localhost:3000/)、もう 1つは localhost:5000
(http://localhost:5000) /)、2つのコンテナーから同じアプリケーションにアクセスできることに注意してください。 以下は、コンテナーによって返される JSON 応答です。
[
{
"name": "Java in action",
"author": "chad darby",
"price": 345
},
{
"name": "React cookbook",
"author": "mary public",
"price": 600
}
]
まとめ
このチュートリアルでは、Dockerfile
を使用してイメージを定義する方法、compose.yaml
ファイルを使用してコンテナーを定義する方法、構成ファイルでコンテナーを実行する方法、構成ファイルで単一のコンテナーを再作成する方法を学びました。
構成ファイルからコンテナーを実行するための構文は docker compose up [OPTIONS] [SERVICE...]
であり、オプションの SERVICE
パラメーターを使用して、イメージを再構築または再作成する 1つ以上のサービスを指定できることに注意してください。 彼らのコンテナ。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub