Docker:多个具有公共容器的站点

我正在创build产品组合,我想在DigitalOcean液滴上运行我的所有网站。 我在新项目中使用PHP7,但一些旧的只与PHP5工作。 当我在寻找如何运行多个版本时,我发现了Docker平台。

我们考虑几个网站:

  • 网站1 – > PHP5,MySQL
  • 网站2 – > PHP7,MySQL
  • 站点3 – > PHP7,Redis

在创build分离的容器的典型方法中,将会有两个MySQL和两个PHP7实例,但是对于我的小型服务器,我负担不起这个。 网站不一定是孤立的,所以他们应该使用公共容器来消耗更less的内存。 这是目标架构: 目标架构

目前我想出了这个:

php5.6/ src/ site1/ #site1 files ... sites-available/ #virtual hosts for php5.6 site1.conf a2ensites.sh #script enabling all sites Dockerfile php7.1/ src/ site2/ #site2 files ... site3/ #site3 files ... sites-available/ #virtual hosts for php7.1 site2.conf site3.conf a2ensites.sh #script enabling all sites Dockerfile docker-compose.yml 

泊坞窗,compose.yml:

 version: '2' services: redis: image: redis:3.0.7 ports: - 6379 mysql: image: mysql:5.7 ports: - 3306 volumes: - /var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=secretpass php5.6: build: ./php5.6 ports: - 8001:80 volumes: - ./php5.6/src:/var/www/html php7.1: build: ./php7.1 ports: - 8002:80 volumes: - ./php7.1/src:/var/www/html site1: image: tianon/true #minimal image depends_on: - php5.6 - mysql site2: image: tianon/true #minimal image depends_on: - php7.1 - mysql site3: image: tianon/true #minimal image depends_on: - php7.1 - redis 

php5.6 / Dockerfile:

 FROM php:5.6-apache RUN a2enmod rewrite \ && docker-php-ext-install pdo pdo_mysql mysql EXPOSE 80 ADD ./sites-available /etc/apache2/sites-available/ COPY a2ensites.sh /a2ensites.sh RUN /a2ensites.sh && rm /a2ensites.sh 

php5.6 /网站可用/ site1.conf:

 <VirtualHost *:80> ServerName site1.dev DocumentRoot /var/www/html/site1 <Directory "/var/www/html/site1"> Options -Indexes AllowOverride All </Directory> </VirtualHost> 

您可以从我的回购中获取所有文件并自行testing。

现在我可以通过localhost:8001 / sitelocalhost:8001 / site2localhost:8002 / site3访问所有这三个站点,但是我希望它可以在site1.devsite2.devsite3.dev上运行 。 我怎样才能做到这一点?

编辑:我想我应该创build端口80反向代理容器,但目前我不知道如何做到这一点。

最后,我设法用jwilder/nginx-proxy做到这jwilder/nginx-proxy 。 您可以从我的存储库中获取完整的代码。

泊坞窗,compose.yml:

 version: '2' services: # Reverse proxy nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - 80:80 volumes: - /var/run/docker.sock:/tmp/docker.sock:ro # Services redis: image: redis:3.0.7 ports: - 6379 mysql: image: mysql:5.7 ports: - 3306 volumes: - /var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=secretpass php5.6: build: ./php5.6 ports: - 8001:80 volumes: - ./php5.6/src:/var/www/html environment: - VIRTUAL_HOST=site1.dev php7.1: build: ./php7.1 ports: - 8002:80 volumes: - ./php7.1/src:/var/www/html environment: - VIRTUAL_HOST=site2.dev,site3.dev # Sites site1: image: tianon/true #minimal image depends_on: - nginx-proxy - php5.6 - mysql site2: image: tianon/true #minimal image depends_on: - nginx-proxy - php7.1 - mysql site3: image: tianon/true #minimal image depends_on: - nginx-proxy - php7.1 - redis 

另外我在/etc/hosts/添加了以下几行:

  127.0.0.1 site1.dev 127.0.0.1 site2.dev 127.0.0.1 site3.dev 

现在我可以访问网站与友好的url。