Контейнер с несколькими докерами за прокси - PullRequest
0 голосов
/ 11 октября 2018

Я нахожусь в ситуации, когда мне нужно несколько экземпляров образа Docker.Каждому экземпляру нужен свой собственный домен и сертификат SSL.

Я подумал о следующем решении: я использую jwilder / nginx-proxy и jrcs / letsencrypt-nginx-proxy-companion для обработки виртуальных хостов и сертификатов SSL.Например:

version: "3.1"

volumes:
  certs:
  vhost.d:
  nginx:

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: always
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
    ports:
    - "80:80"
    - "443:443"
    volumes:
      - certs:/etc/nginx/certs
      - vhost.d:/etc/nginx/vhost.d
      - nginx:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro

  letsencrypt-nginx-proxy-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion:v1.9.1
    depends_on:
      - nginx-proxy
    volumes:
      - certs:/etc/nginx/certs
      - vhost.d:/etc/nginx/vhost.d
      - nginx:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro

networks:
  swarm_network:
    driver: overlay
    external: true

Фактическое приложение состоит из 3 контейнеров.PHP FPM, MySQL, Nginx.Каждое приложение получило бы свой собственный файл компоновки, содержащий конкретные env-переменные, имена томов и т. Д.:

version: "3.1"

volumes:
  {appName}-symfony:
  {appName}-mysql:

services:

  webserver:
    depends_on:
      - php-fpm
    image: nginx:alpine
    restart: always
    working_dir: /var/www/application
    environment:
      VIRTUAL_HOST: foo.bar
      LETSENCRYPT_HOST: foo.bar
      LETSENCRYPT_EMAIL: some value
    volumes:
    - {appName}-symfony:/var/www/application
    - ./nginx.conf:/etc/nginx/conf.d/default.conf

  mysql:
    image: percona:5.7
    restart: always
    volumes:
    - {appName}-mysql:/var/lib/mysql
    environment:
      some: env

  php-fpm:
    depends_on:
      - mysql
    image: app/image:1.0.0
    restart: always
    working_dir: /var/www/application
    volumes:
    - {appName}-symfony:/var/www/application
    - ./php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
    environment:
      some: env

networks:
  swarm_network:
    driver: overlay
    external: true

Приложения не часто посещаются, поэтому достаточно решения с одним узлом.В качестве инструмента ochestration должно быть достаточно чего-то вроде стека Docker или даже docker-compose.

Это также означает, что все контейнеры должны находиться в одной сети, верно?

Это решениеполезно или я упускаю важные моменты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...