我已经开始与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
而一切正常 – 这是一种魔法!
以下是我的一些问题,以了解正在发生的事情:
./
)。 当使用PHP框架作为Yii2时,将卷转移到PHP或Nginx容器不是更好吗? 在列出
my-php
容器的links
下,除了别的以外,这个容器在/etc/hosts
文件中创建了容器的名称和它的IP之间的映射。
正如你所期望的,任何
php
代码都将在my-php
容器中运行,这在nginx
配置文件中定义,它将请求处理传递给运行在my-php:9000
上的php
引擎。
在正常的套接字通信。 两个码头都有自己的地址,他们可以互相通信,就像连接到网络的其他计算机一样。
我只在这里看到2个容器。 有些人会说一个容器应该只运行一个进程(就像这里,所以你已经建立了最小系统),还有一些人说每个容器应该运行任何服务需要。 (但这是一个偏好的问题,对这个问题有不同的看法)
是的,你可以用它来生产。 它可以很容易地扩展,但为了达到规模,你错过了一些部分来平衡负载。 (例如负载平衡器,可以发送新的请求到一个实例不是很忙,一个非常常见的工具是HAProxy 。
由于PHP容器在这种情况下完成了所有的处理,因此只需要在
my-php
上挂载卷即可。