我想使用Docker,以便能够运行需要PHP 5.3的旧应用程序,同时仍然在我的主机服务器上运行其他网站,在主机Apache上运行。
所以我在主机上运行了siteA.com,siteB.com,siteC.com,使用主机Apache / PHP / MySQL服务器,我有一个安装在Docker容器中的siteZ.com,应该使用容器的Apache / PHP,但主机MySQL服务器。
这里是我想要获得的架构的代表:
我的问题是,我似乎无法在容器中运行Apache,因为端口80已在主机上使用。
我的目标是人们可以访问siteA.com,siteB.com,siteC.com和siteZ.com,而无需为这些网站指定不同的端口。
我设法通过端口8080运行siteZ.com,但它显然不是一个选项。
由于
PS:请注意我对Docker不熟悉。
编辑:您可以找到我的工作解决方案here。感谢VonC showing me the way to go:)
答案 0 :(得分:10)
感谢VonC's answer我设法让它工作但我稍微改变了我的架构,导致3个容器而不是1个。
我有一个容器用于每个Apache / PHP版本,一个容器用Nginx作为反向代理。我认为您可以轻松地调整它以在主机上安装Nginx并更改它的配置以匹配我在我的问题中描述的架构。
请注意,由于我是Docker的新用户,以及有关Linux系统管理的新手,可能会出现一些错误以及在以下脚本中没有任何意义的事情,但是&#&# 39;为我工作。随意改进它:)
Dockerfile:
FROM debian:jessie
MAINTAINER AntoineB version: 0.1
RUN apt-get update && \
apt-get install -y --force-yes \
nginx \
nano
EXPOSE 80
EXPOSE 443
ADD ./proxy.conf /etc/nginx/conf.d/proxy.conf
CMD ["nginx"]
这里是引用的proxy.conf
文件:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;
我使用以下bash脚本运行它:
docker run -ti -d -p 80:80 -v /home/antoineb/Docker/images/nginxproxy/virtualhosts:/etc/nginx/sites-enabled --name nginxproxy nginxproxy /bin/bash
我的主机上有一个/home/antoineb/Docker/images/nginxproxy/virtualhosts
文件夹,其中包含以下default
文件:
server {
listen 80;
server_name siteZ.com;
location / {
proxy_pass http://apache22php53:80;
}
}
server {
listen 80;
server_name siteA.com;
location / {
proxy_pass http://apache24php56:80;
}
}
server {
listen 80;
server_name siteB.com;
location / {
proxy_pass http://apache24php56:80;
}
}
Dockerfile:
FROM debian:wheezy
MAINTAINER AntoineB version: 0.1
RUN apt-get update
RUN echo "deb http://packages.dotdeb.org squeeze all" > /etc/apt/sources.list.d/dotdeb_squeeze.list
RUN echo "deb-src http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb_squeeze.list
RUN echo "deb http://ftp.debian.org/debian/ squeeze main contrib non-free" >> /etc/apt/sources.list.d/dotdeb_squeeze.list
RUN echo "Package: *php*" > /etc/apt/preferences.d/php53.pref
RUN echo "Pin: release o=packages.dotdeb.org,n=squeeze" >> /etc/apt/preferences.d/php53.pref
RUN echo "Pin-Priority: 989" >> /etc/apt/preferences.d/php53.pref
RUN apt-get update && \
apt-get install -y --force-yes \
apache2 \
php5 \
php5-curl \
php5-gd \
php5-mysql \
nano
RUN a2enmod \
php5 \
rewrite
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
EXPOSE 80
EXPOSE 443
CMD /usr/sbin/apache2ctl -D FOREGROUND
我使用以下脚本启动它:
docker run -ti -d -p 2253:80 -v /home:/home -v /home/antoineb/Docker/images/apache22php53/virtualhosts:/etc/apache2/sites-enabled --name apache22php53 apache22php53 /bin/bash
我的网站存储在/home/website.com/www中,我的apache虚拟主机存储在/home/antoineb/Docker/images/apache22php53/virtualhosts
的主机上。
Dockerfile:
FROM debian:jessie
MAINTAINER AntoineB version: 0.1
RUN apt-get update && \
apt-get install -y --force-yes \
apache2 \
php5 \
php5-curl \
php5-gd \
php5-mysql \
nano
RUN a2enmod \
php5 \
rewrite
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
EXPOSE 80
EXPOSE 443
CMD /usr/sbin/apache2ctl -D FOREGROUND
我正在运行的脚本:
docker run -ti -d -p 2456:80 -v /home:/home -v /home/antoineb/Docker/images/apache24php56/virtualhosts:/etc/apache2/sites-enabled --name apache24php56 apache24php56 /bin/bash
同样,我的网站存储在/home/website.com/www中,我的apache虚拟主机存储在/home/antoineb/Docker/images/apache24php56/virtualhosts
的主机上。
答案 1 :(得分:0)
您可以在docker glue中使用基于主机的路由
https://github.com/muayyad-alsadi/docker-glue
它是一个轻量级守护程序,可以动态生成haproxy
个模板(如果愿意,可以定义nginx模板),可以监视像这样的容器标签
docker run -d --name wp1 -l glue_http_80_host='wp1.example.com' mywordpress/wordpress
docker run -d --name wp2 -l glue_http_80_host='wp2.example.com' mywordpress/wordpress
在此设置中,胶水守护程序将生成haproxy配置,以便流向wp1.example.com的流量转到wp1容器