76
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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からプロキシさせる
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
76
Help us understand the problem. What are the problem?