【Docker】Nginxのテンプレートファイルで環境変数を使う

Docker

こんにちは、ニキです。

DockerとNginxを組み合わせて使用する場合、設定ファイルに環境変数を含めて柔軟に設定を変更したい場面が多々あります。今回は、envsubstというツールを利用して、Nginxの設定ファイルにDockerの環境変数を埋め込む方法を紹介します。

Takaharu Niki

・Webエンジニア5年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする

envsubstとは?

envsubstは、シェルの環境変数をテキスト内に置換するためのコマンドラインツールです。

環境変数を活用したNginx設定

テンプレートを作成

nginx.conf.templateという名前でNginxの設定テンプレートを作成します。

server {
    listen 80;
    server_name $MY_DOMAIN;

    location / {
        proxy_pass http://$APP_HOST:$APP_PORT;
    }
}

この設定では、$MY_DOMAIN, $APP_HOST, $APP_PORTという環境変数を使用しています。

以下のようなDockerfileを作成します。

FROM nginx:latest

COPY nginx.conf.template /etc/nginx/templates/nginx.conf.template

ここでは、envsubstをDockerイメージ作成時に実行する仕組みが既に存在するため、特別なCMDは必要ありません。

docker-entrypointスクリプトの利用

docker-entrypointはDockerイメージの起動時に自動的に実行されるスクリプトです。このスクリプト内でenvsubstを使用してNginxの設定テンプレートから実際の設定ファイルを生成します。

既に存在するdocker-entrypoint内のスクリプトによって、環境変数がNginxの設定ファイルに反映されます。

docker-composeを使用した環境変数の設定

以下のようなcompose.yamlファイルを作成します。

services:
  web:
    build: .
    environment:
      MY_DOMAIN: mydomain.com
      APP_HOST: apphost
      APP_PORT: 8080

このcompose.yamlを使い、compose upコマンドで環境変数を指定してコンテナを起動することができます。

応用編: Amazon ECSのタスク定義での環境変数の設定

Amazon ECSでは、タスク定義のenvironmentセクションを使用して環境変数を設定できます。

{
  "name": "web",
  "image": "my-nginx-image",
  "environment": [
    {
      "name": "MY_DOMAIN",
      "value": "mydomain.com"
    },
    {
      "name": "APP_HOST",
      "value": "apphost"
    },
    {
      "name": "APP_PORT",
      "value": "8080"
    }
  ]
}

このようにECSのタスク定義を設定することで、ECS上でのコンテナ実行時にも環境変数を活用することができます。

まとめ

DockerとNginxを組み合わせて使用する際、docker-entrypointdocker-composeを活用することで、環境変数を動的にNginxの設定に適用することが容易になります。ECSのタスク定義を使えば、クラウド環境での運用にもこの方法を応用できます。これにより、柔軟な設定変更と環境の再現性を高めることができます。

さらに詳しく学びたい方は、以下の書籍がおすすめです。

nginx実践入門

Nginxの構築と運用に関する幅広い知識を得られます。リアルなユースケースを元にした具体例が豊富に紹介されており、初心者から上級者まで、あらゆるレベルのエンジニアにとって実際の問題解決に役立ちます。

Docker/Kubernetes 実践コンテナ開発入門

コンテナ技術をこれから学びたい方、あるいはすでに基本的な知識を持っているが実践的なスキルを伸ばしたい方に最適な書籍です。この書籍では、Dockerの基本操作から始まり、Kubernetesでのクラスタ管理、サービスの自動化、スケーリング、ネットワークの設定といった高度な内容に至るまで、手厚くガイドしてくれます。

効率的に学習するならプログラミングスクールの検討もありです。

PRUMエンジニア留学


PRUMエンジニア留学は、実践的なオンラインプログラミングスクールで、未経験者でもエンジニア転職や副業を目指せます。カリキュラムは実務レベルのチーム開発を含み、基礎から応用までを学べます。個別メンタリングや進捗可視化で学習をサポートし、エンジニアとしての実務経験とコミュニケーションスキルも身に付けられます。

Takaharu Niki

・Webエンジニア5年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする
Docker
Takaharu Nikiをフォローする
アントレプログラマー
タイトルとURLをコピーしました