LoginSignup
77

More than 5 years have passed since last update.

docker上のnginxから、別のコンテナのwebへリバースプロキシさせる

Last updated at Posted at 2015-06-21

APのコンテナが複数あって、それを1つのnginxからリバースプロキシして振り分けることをしてみる。

まず、APコンテナは以下のDockerfileとする。

ap1/Dockerfile
FROM debian:8.1
MAINTAINER 74th<site@j74th.com>

RUN apt-get update
RUN apt-get install -y apache2 libapache2-mod-php5

EXPOSE 80

VOLUME ["/var/www/html"]

ENTRYPOINT  service apache2 start && \
            tail -f /var/log/apache2/access.log

PHP+Apacheで動いている普通のコンテナ。これを、ビルドして起動する。

ap1/buildstart.sh
docker build -t 74th/ap1 .
docker run -d \
    -v `pwd`/html:/var/www/html \
    --name ap1 \
    74th/ap1

APコンテナのポイント

  • EXPOSEでポート80を指定する。しかしdocker runでは、-p 80:80などと外部に出したりしない。
  • ちゃんとコンテナ名--name ap1を付け、nginxから参照できるようにする。
  • VOLUMEで、コンテンツをコンテナと共有する。

起動していることを確認する。

$docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                  NAMES
8f27081607b0        74th/ap1            "/bin/sh -c 'service   2 hours ago         Up 2 hours          80/tcp                 ap1

次に、これにnginxからアクセスできるようにする。
nginxのDockerfileはこちら。

frontnginx/Dockerfile
FROM debian:8.1
MAINTAINER 74th<site@j74th.com>

RUN apt-get update
RUN apt-get install -y nginx
COPY ./default /etc/nginx/site-enabled/default

EXPOSE 80

ENTRYPOINT  service nginx start && \
            tail -f /var/log/nginx/access.log

起動用のスクリプトは以下のとおり。

frontnginx/buildstart.sh
docker build -t 74th/frontnginx .
docker run -d \
    -p 80:80 \
    --link ap1:ap1 \
    --name frontnginx \
    74th/frontnginx

ここまでのポイントは、以下のとおり。

  • EXPOSEで指定し、さらにdocker run -p 80:80で、こちらは80番ポートを外部公開する。
  • コンテナ間リンク--linkをAPコンテナに設定して起動する。
  • nginxの設定ファイルdefault.confを、書き換えてコンテナの中に入れる。

さて、このnginxの設定を、以下のようにする。

default
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # ap1
    location / {
        proxy_pass http://ap1;
    }
}

実は、--linkオプションで指定したエイリアスへは、/etc/hosts に設定が追加されるため、nginxのコンテナからはhttp://ap1でAPコンテナにアクセスできる。これだけでOKなのである。
なんとも簡単。

ポイント

  • --linkで設定したAPコンテナをホスト名として、nginxからプロキシさせる

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77