コンテナ起動前にイメージをビルドする
これまでのステップでは、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