我是完全新的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时,没有成功!
2条答案
按热度按时间ycl3bljg1#
Docker的理念是每个应用程序(在你的例子中是网站)都有自己的环境。然后你可以升级一个应用程序的PHP版本而不影响其他应用程序。所以你应该为每个网站都准备一个Docker文件。
要回答您的问题“如何将访问者引导到正确的容器?":请看一下反向代理。2有很多Docker镜像可以使用,比如Nginx和Traefik。3这些镜像也可以处理SSL证书。
oymdgrw72#
我建议您使用Docker Compose,但您也可以在
docker run
命令和docker-compose
中使用Volume。停靠合成
首先让我们看一下
docker-compose
。创建一个名为docker-compose.yml
的文件,其中包含以下内容:两个关键字
hostname
和container_name
是可选的,您可以更改它们的值,甚至可以删除这两行。关于
volumes
,请将您的apache2.conf
复制到类似./apache
的路径,然后在此文件中进行编辑。然后添加另一个名为
site1.conf
的文件。下面是我的conf文件示例:对于每个站点,您可以创建另一个文件并将其添加到
volumes
。现在,在完成所有操作后,运行以下命令:
停靠器运行命令
如果要使用
docker run
命令,可以这样做(上面的路径在./apache
下面都是一样的):更新1
编辑您的
Dockerfile
:apache2.sh
: