10

我有 2 个 Docker 容器:App 和 Web。

App— 带有 php 应用程序代码的简单容器。它仅用于存储和交付代码到远程 Docker 主机。

应用镜像 Dockerfile:

FROM debian:jessie
COPY . /var/www/app/
VOLUME ["/var/www/app"]
CMD ["true"]

Web— Web 服务容器,由 PHP-FPM + Nginx 组成。

网络图像 Dockerfile:

FROM nginx

# Remove default nginx configs.
RUN rm -f /etc/nginx/conf.d/*

# Install packages
RUN apt-get update && apt-get install -my \
  supervisor \
  curl \
  wget \
  php5-cli \
  php5-curl \
  php5-fpm \
  php5-gd \
  php5-memcached \
  php5-mysql \
  php5-mcrypt \
  php5-sqlite \
  php5-xdebug \
  php-apc

# Ensure that PHP5 FPM is run as root.
RUN sed -i "s/user = www-data/user = root/" /etc/php5/fpm/pool.d/www.conf
RUN sed -i "s/group = www-data/group = root/" /etc/php5/fpm/pool.d/www.conf

# Pass all docker environment
RUN sed -i '/^;clear_env = no/s/^;//' /etc/php5/fpm/pool.d/www.conf

# Add configuration files
COPY config/nginx.conf          /etc/nginx/
COPY config/default.vhost        /etc/nginx/conf.d
COPY config/supervisord.conf    /etc/supervisor/conf.d/
COPY config/php.ini             /etc/php5/fpm/conf.d/40-custom.ini

VOLUME ["/var/www", "/var/log"]

EXPOSE 80 443 9000

ENTRYPOINT ["/usr/bin/supervisord"]

我的问题:是否可以通过套接字链接 Web 容器和 App 容器?

主要原因 - 使用 App 容器将更新的代码部署到远程 Docker 主机。使用卷/命名卷在容器之间共享代码不是一个好主意。但是套接字可以提供帮助。

非常感谢您的帮助和支持!

4

1 回答 1

18

如果两个容器在同一主机上运行,​​则可以在两者之间共享一个套接字,因为它们是纯文件。

您可以创建一个本地 docker 卷并将该卷安装在两个容器上。然后配置您的程序以使用该路径。

docker volume create --name=phpfpm
docker run phpfpm:/var/phpfpm web
docker run phpfpm:/var/phpfpm app

如果可以在主机上生成套接字,则可以将文件挂载到两个容器中。这是用于获取 docker 容器来控制主机 docker 的方法。

docker run -v /var/container/some.sock:/var/run/some.sock web
docker run -v /var/container/some.sock:/var/run/some.sock app
于 2016-06-09T14:51:42.283 回答