コンテナ起動前にイメージをビルド
これまでのステップでは、Docker Hub の事前ビルド済みイメージ(例:nginx:latest)を使用してきました。しかし実際には、アプリケーション用に独自のカスタム Docker イメージをビルドする必要がよくあります。
Docker Compose は、サービス起動前に docker-compose.yml ファイルで定義されたイメージを自動的にビルドできます。これは通常、サービスに対して image 名ではなく build コンテキストを指定することで実現します。
簡単なカスタム Nginx イメージをビルドするために docker-compose.yml ファイルを変更してみましょう。
まず、~/project 内に nginx_custom という新しいディレクトリを作成します。
cd ~/project
mkdir nginx_custom
次に、nginx_custom ディレクトリ内に Dockerfile を作成します。
nano ~/project/nginx_custom/Dockerfile
Dockerfile に以下の内容を追加します:
FROM nginx:latest
RUN echo '<h1>Hello from Custom Nginx!</h1>' >/usr/share/nginx/html/index.html
この Dockerfile は公式の nginx:latest イメージをベースにし、デフォルトの index.html ファイルをカスタムコンテンツに置き換えます。
次に、web サービスのイメージビルドにこの Dockerfile を使用するよう ~/project/docker-compose.yml ファイルを修正します。編集のためにファイルを開きます:
nano ~/project/docker-compose.yml
web サービスの定義を image から build に変更します:
version: "3.8"
services:
web:
build: ./nginx_custom
ports:
- "80:80"
これで docker compose up を実行すると、Docker Compose はまず ./nginx_custom ディレクトリ内の Dockerfile で定義されたイメージをビルドし、その新しくビルドされたイメージを使用してコンテナを起動します。
~/project ディレクトリにいることを確認して実行します:
cd ~/project
docker compose up -d
イメージがビルドされ、コンテナが作成・起動される様子を示す出力が表示されます。
カスタム Nginx ページが提供されていることを確認するには、curl を使用します:
curl http://localhost
<h1>Hello from Custom Nginx!</h1> という出力が表示され、イメージがビルドされカスタムコンテンツでコンテナが実行されていることが確認できます。
後片付けとして、実行中のサービスを停止します:
cd ~/project
docker compose down