2021年1月26日火曜日

docker-compose で nginx を使って proxy_pass をコンテナ名でアクセスする方法

概要

nginx の proxy_pass にコンテナ名を指定する方法と注意事項を紹介します
docker-compose で nginx と proxy_pass するアプリを定義します

環境

  • macOS 11.1
  • docker 20.10.2

ポイント

  • upstream は使わない
  • proxy_pass するアプリ側は 0.0.0.0 でバインドするようにする

Sinatra app

  • bundle init
  • vim Gemfile
gem "sinatra"
gem "thin"
  • bundle install
  • vim app.rb
require 'sinatra'

get '/' do
  'ok'
end

Dockerfile

  • vim Dockerfile
FROM ruby

ADD . /app
WORKDIR /app

RUN bundle install

CMD ["bundle", "exec", "ruby", "app.rb", "-o", "0.0.0.0"]

nginx default.conf

  • vim default.conf
server {
    listen 80;
    location / {
        proxy_pass http://app:4567/;
    }
}

Dockerfile-web

  • vim Dockerfile-web
FROM nginx

ADD ./default.conf /etc/nginx/conf.d/default.conf

docker-compose

  • vim docker-compose.yml
version: '3.8'
services:
  web:
    image: web
    ports:
      - 80:80
    depends_on:
      - app
  app:
    image: app:latest

ビルド

  • docker build -t app .
  • docker build -f Dockerfile-web -t web .

動作確認

  • docker-compose up -d
  • curl localhsot

0 件のコメント:

コメントを投稿