Dockerfile での ENTRYPOINT の使用
このステップでは、Dockerfile で ENTRYPOINT 命令を使用する方法を学び、別のポート(9100)を使用してみます。
-
WebIDE で、再び Dockerfile を開きます。
-
Dockerfile の内容を以下のように変更します。
FROM nginx
COPY index.html /usr/share/nginx/html/
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
この Dockerfile では、環境変数と sed コマンドを削除しました。代わりに、ENTRYPOINT スクリプトを使用して実行時に設定を処理します。これにより、イメージの柔軟性が高まります。
- 同じディレクトリに
start.sh という名前の新しいファイルを作成し、以下の内容を追加します。
#!/bin/bash
## NGINX_PORT が設定されていない場合のデフォルトポートを設定
export NGINX_PORT=${NGINX_PORT:-9100}
## nginx の設定内のポートを置換
sed -i "s/listen[[:space:]]*80;/listen $NGINX_PORT;/g" /etc/nginx/conf.d/default.conf
echo "Starting Nginx on port $NGINX_PORT"
nginx -g 'daemon off;'
このスクリプトは、デフォルトポートを設定し、コンテナ起動時に Nginx の設定を修正し、Nginx が動作するポートを示すメッセージを表示してから、Nginx を起動します。
-
WebIDE で両方のファイルを保存します。
-
WebIDE のターミナルで、新しいタグを付けて Docker イメージを再ビルドします。
docker build -t my-nginx-entrypoint .
- 新しいイメージに基づいてコンテナを実行します。環境変数を使用してポートを 9100 に設定します。
docker run -d -p 9100:9100 -e NGINX_PORT=9100 --name entrypoint-container my-nginx-entrypoint
- コンテナのログを確認して、起動メッセージを表示します。
docker logs entrypoint-container
出力に "Starting Nginx on port 9100" というメッセージが表示されるはずです。
- ウェブサーバーが新しいポートで正しく動作していることを確認します。
curl http://localhost:9100
ターミナルに index.html ファイルの HTML 内容が表示されるはずです。