多个站点在Docker容器上

cwtwac6a  于 2022-11-03  发布在  Docker
关注(0)|答案(2)|浏览(147)

我是完全新的docker,php和apache,我试图运行我的示例网站在apache服务器上的一个docker容器。它的工作很好。和我的dockerfile如下:

From php:7.2-apache
Copy Site/ /var/www/html/
Run echo "ServerName localhost" >> /etc/apache2/apache2.conf
RUN docker-php-ext-install pdo pdo_mysql
Expose 80

我如何在Docker容器中的同一个Apache服务器上有另一个网站,例如“website 1”,在xampp中我可以更改httpd.conf文件并添加虚拟主机。但在Docker容器中我应该怎么做呢?

更新
============================================

我更新文件如下,这是docker-compose.yml

version: '3.9'
services:
    apache:
        build: .
        container_name: php_cont
        volumes:
            - './apache2.conf:/etc/apache2/apache2.conf'
            - './Site1/site1.conf:/etc/apache2/sites-available/site1.conf'
            - './Site2/site2.conf:/etc/apache2/sites-available/site2.conf'
        ports:
            - '80:80'

这是网站.conf

<VirtualHost *:80>
 DocumentRoot "d:\Temp\Site1"
 ServerName site1Name
 <Directory "d:\Temp\Site1">
 </Directory>
 </VirtualHost>

这是site2.conf文件

<VirtualHost *:80>
 DocumentRoot "d:\Temp\Site2"
 ServerName site2Name
 <Directory "d:\Temp\Site2">
 </Directory>
 </VirtualHost>

我将这两行代码添加到windows中主机文件中=〉system32=〉driver=〉etc

127.0.0.1 site1Name
  127.0.0.1 site2Name

但是当我在浏览器上冲浪到site 1 Name或site 2Name时,没有成功!

ycl3bljg

ycl3bljg1#

Docker的理念是每个应用程序(在你的例子中是网站)都有自己的环境。然后你可以升级一个应用程序的PHP版本而不影响其他应用程序。所以你应该为每个网站都准备一个Docker文件。
要回答您的问题“如何将访问者引导到正确的容器?":请看一下反向代理。2有很多Docker镜像可以使用,比如Nginx和Traefik。3这些镜像也可以处理SSL证书。

oymdgrw7

oymdgrw72#

我建议您使用Docker Compose,但您也可以在docker run命令和docker-compose中使用Volume

停靠合成

首先让我们看一下docker-compose。创建一个名为docker-compose.yml的文件,其中包含以下内容:

version: '3.9'

services:
    apache:
        build: .
        hostname: OPTIONAL
        container_name: OPTIONAL
        volumes:
            - './apache/apache2.conf:/etc/apache2/apache2.conf'
            - './apache/site1.conf:/etc/apache2/sites-available/site1.conf'
        ports:
            - '80:80'

两个关键字hostnamecontainer_name是可选的,您可以更改它们的值,甚至可以删除这两行。
关于volumes,请将您的apache2.conf复制到类似./apache的路径,然后在此文件中进行编辑。
然后添加另一个名为site1.conf的文件。下面是我的conf文件示例:

<VirtualHost *:80>
        ServerName some_name.com

        ServerAdmin webmaster@name
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

对于每个站点,您可以创建另一个文件并将其添加到volumes
现在,在完成所有操作后,运行以下命令:

docker-compose up -d

停靠器运行命令

如果要使用docker run命令,可以这样做(上面的路径在./apache下面都是一样的):

docker run IMAGE_NAME -v './apache/apache2.conf:/etc/apache2/apache2.conf' -v './apache/site1.conf:/etc/apache2/sites-available/site1.conf' -dp80:80

更新1

编辑您的Dockerfile

From php:7.2-apache
Copy Site/ /var/www/html/
Run echo "ServerName localhost" >> /etc/apache2/apache2.conf
COPY site1.conf /etc/apache2/apache2.conf
COPY site2.conf /etc/apache2/apache2.conf
COPY apache2.sh /root/
RUN bash /root/apache2.sh
RUN rm /root/apache2.sh
RUN docker-php-ext-install pdo pdo_mysql
Expose 80

apache2.sh

service apache2 start
a2ensite site1
a2ensite site2
service apache2 restart

相关问题