docker集装箱:他们如何一起工作?

我已经开始与docker工作,并build立了一个工作的例子,见https://codeable.io/wordpress-developers-intro-docker 。 由于部署将在emebedded系统上,因此需要Docker容器的相当小的空间。

但我不知道这是如何融合在一起的。

有两个Dockerfiles,一个用于Nginx:

FROM nginx:1.9-alpine COPY nginx.conf /etc/nginx/conf.d/default.conf 

nginx.conf定义如下:

 server { server_name _; listen 80 default_server; root /var/www/html; index index.php index.html; access_log /dev/stdout; error_log /dev/stdout info; location / { try_files $uri $uri/ /index.php?$args; } location ~ .php$ { include fastcgi_params; fastcgi_pass my-php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

另一个Dockerfuile是PHP的:

 Dockerfile.php-fpm: FROM php:7.0.6-fpm-alpine RUN docker-php-ext-install -j$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) \ iconv gd mbstring fileinfo curl xmlreader xmlwriter spl ftp mysqli VOLUME /var/www/html 

最后,一切都在一个docker-compose.yml中:

 version: '2' services: my-nginx: build: . volumes: - .:/var/www/html ports: - "8080:80" links: - my-php my-php: build: context: . dockerfile: Dockerfile.php-fpm volumes: - .:/var/www/html ports: - "9000:9000" 

docker集装箱启动使用

 $ docker-compose build $ docker-compose up 

而一切正常 – 这是一种魔法!

以下是我的一些问题,以了解正在发生的事情:

  • nginx-container如何知道php-container?
  • 当从nginx调用PHP时,PHP进程运行的是哪个容器?
  • 数据如何从nginx传递到PHP并返回?
  • 这个docker使用(3个容器为一个简单的Web服务器应用程序)正确的方式来使用docker或这是一个容器矫枉过正?
  • 这个docker架构如何扩展负载? 我可以用它来生产吗?
  • 容器在主机上使用相同的卷( ./ )。 当使用PHP框架作为Yii2时,将卷转移到PHP或Nginx容器不是更好吗?

  • nginx-container如何知道php-container?

在列出my-php容器的links下,除了别的以外,这个容器在/etc/hosts文件中创建了容器的名称和它的IP之间的映射。

  • 当从nginx调用PHP时,PHP进程运行的是哪个容器?

正如你所期望的,任何php代码都将在my-php容器中运行,这在nginx配置文件中定义,它将请求处理传递给运行在my-php:9000上的php引擎。

  • 数据如何从nginx传递到PHP并返回?

在正常的套接字通信。 两个码头都有自己的地址,他们可以互相通信,就像连接到网络的其他计算机一样。

  • 这个码头使用(3个容器为一个简单的Web服务器应用程序)正确的方式来使用码头或这是一个容器矫枉过正?

我只在这里看到2个容器。 有些人会说一个容器应该只运行一个进程(就像这里,所以你已经建立了最小系统),还有一些人说每个容器应该运行任何服务需要。 (但这是一个偏好的问题,对这个问题有不同的看法)

  • 这个码头架构如何扩展负载? 我可以用它来生产吗?

是的,你可以用它来生产。 它可以很容易地扩展,但为了达到规模,你错过了一些部分来平衡负载。 (例如负载平衡器,可以发送新的请求到一个实例不是很忙,一个非常常见的工具是HAProxy 。

  • 容器在主机上使用相同的卷(./)。 当使用PHP框架作为Yii2时,将卷转移到PHP或Nginx容器不是更好吗?

由于PHP容器在这种情况下完成了所有的处理,因此只需要在my-php上挂载卷即可。