web-dev-qa-db-ja.com

Docker nginx 1つのホスト上の複数のアプリ

同じホスト上の複数の独立したWebアプリでリバースプロキシ(nginx)を管理する方法に混乱しています。 https://github.com/jwilder/nginx-proxy を使用してアプリごとにVIRTUAL_Hostを構成できることは知っていますが、すべてのアプリのdocker-composeでnginxをサービスとして表示することはできません.yml。

この方法でやりたいのは、実稼働環境でアプリを実行するのに必要なすべてのサービスを明確に定義し、開発環境で簡単に複製できるようにするためです。

言い換えると、同じホストで実行する必要がある2つのwebappがあり、両方のアプリのdocker-compose.ymlでサービスの依存関係としてnginxを定義しますが、ポート80を転送できるのは1つのnginxだけなので、 。

10
Axon

Dockerfile:

FROM ubuntu:14.04
MAINTAINER Test ([email protected])
# install nginx
RUN apt-get update -y
RUN apt-get install -y python-software-properties
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:nginx/stable
RUN apt-get update -y
RUN apt-get install -y nginx
# deamon mode off
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
# volume
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/var/log/nginx"]
# expose ports
EXPOSE 80 443
# add nginx conf
ADD nginx.conf /etc/nginx/conf.d/default.conf
WORKDIR /etc/nginx
CMD ["nginx"]

nginx.conf:

server {
    listen          80;
    server_name     test1.com www.test1.com;
    location / {
        proxy_pass  http://web1:81/;
    }
}
server {
    listen          80;
    server_name     test2.com www.test2.com;
    location / {
        proxy_pass  http://web1:82/;
    }
}

**whereweb1andweb2-コンテナ名

docker-compose.yml:

version: "2"
services:
    web1:
        image: your_image
        container_name: web1
        ports:
            - 81:80
    web2:
        image: your_image
        container_name: web2
        ports:
            - 82:80
    nginx:
        build: .
        container_name: nginx
        ports:
            - 80:80
            - 443:443
        links:
            - web1
            - web2

実行方法:

docker-compose up -d

Test1.comを呼び出すと-nginxはリクエストをコンテナweb1:81に転送し、test2.comを-コンテナweb2:82に転送します

追伸:あなたの質問はNGINX-reverse-proxyについてでした。しかし、TRAEFIKを使用すればこれがより簡単になります https://traefik.io

6
Oleh Vasylyev