Docker-Compose ファイルでコンテナーを再構築する

David Mbochi Njonge 2023年6月20日
  1. 新しいプロジェクトを作成する
  2. イメージの Dockerfile を作成する
  3. コンテナ用の構成ファイルを作成する
  4. compose を使用してコンテナーを実行する
  5. compose を使用して単一のコンテナーを再構築する
  6. まとめ
Docker-Compose ファイルでコンテナーを再構築する

アプリケーションを実装する前に、Dockerfilecompose.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 をリッスンします。

  1. サービス - アプリケーションのコンピューティング コンポーネントを定義します。
  2. restart - コンテナが終了したときに実行するアクションを定義します。
  3. build - イメージをビルドするための構成を含む Dockerfile のソースを定義します。
  4. hostname - サービスで使用されるカスタム名を設定します。
  5. 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
  1. --build - これにより、コンテナーを実行する前にイメージがビルドされます。
  2. --force-recreate - 構成とイメージの状態を考慮せずにコンテナーを再作成します。
  3. --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 Mbochi Njonge avatar David Mbochi Njonge avatar

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

関連記事 - Docker Container