zukucode
主にWEB関連の情報を技術メモとして発信しています。

Docker webpack-dev-serverをnginxのコンテナと連携する

Dockerコンテナ内でwebpack-dev-serverを起動して、別のコンテナのnginxと連携する方法を紹介します。

以下のような構成でコンテナを使用している場合を考えます。

docker-compose.yml
version: '3'
services:
  web:
    image: nginx
    depends_on:
      - app
    ports:
      - "8080:80"
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - ./app:/var/www/html
  app:
    build: ./docker/app
    volumes:
      - ./docker/app/php.ini:/usr/local/etc/php/php.ini
      - ./app:/var/www/html

webコンテナはnginxのWEBサーバーのコンテナです。

appコンテナはphpnodejsなどの開発環境としてメインで使用するコンテナです。

また、wenコンテナではappコンテナと連携してphpが実行できるようになっています。

(詳しくはDocker ComposeでNginxとphpを連携するなどを参照)

webpack-dev-serverの設定

appコンテナで起動するwebpack-dev-serverの設定を以下のようにします。

host: '0.0.0.0'は、ホストOSからwebpack-dev-serverにアクセスできるようにするための設定です。

proxyでwebコンテナにアクセスするように設定します。(http://webwebnginxのコンテナ名です)

devServer: {
  port: 3000,
  host: '0.0.0.0',
  proxy: {
    '*': 'http://web'
  },
},

docker-compose.ymlの修正

以下のようにappコンテナのポート3000をホストOSからアクセスできるようにします。

docker-compose.yml
version: '3'
services:
  web:
    image: nginx
    depends_on:
      - app
    ports:
      - "8080:80"
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - ./app:/var/www/html
  app:
    build: ./docker/app
    ports:
      - "3000:3000"
    volumes:
      - ./docker/app/php.ini:/usr/local/etc/php/php.ini
      - ./app:/var/www/html

関連記事