我已经开始使用docker并构建了一个工作示例,如https://codeable.io/wordpress-developers-intro-docker中所示。我需要一个非常小的docker容器,因为部署将在emebedded系统上。
但我不清楚它是如何组合在一起的。
有两个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容器?答案 0 :(得分:3)
在
links
下,您列出了my-php
容器,除此之外,还会在/etc/hosts
文件中创建容器名称与其IP之间的映射。
正如您所料,任何
php
代码都将在my-php
容器中运行,这在nginx
配置文件中定义,该文件将请求处理传递给{{1}引擎在php
上运行。
通过常规套接字通信。两个码头工人都有自己的地址,并且可以像连接到网络的任何其他计算机一样相互通信。
我这里只看到2个容器。有些人会说容器应该只运行一个进程(就像这里,所以你已经建立了最小的系统),并且有些人说每个容器应该运行任何服务需要。 (但这是一个偏好问题,对此事有不同意见)
是的,您可以将它用于生产。它可以轻松扩展,但为了达到规模,您缺少一些部分来平衡负载。 (例如,负载均衡器可以向不已经忙碌的实例发送新请求。一个非常常见的工具是HAProxy。
由于PHP容器在这种情况下执行所有处理,因此仅在
my-php:9000
上安装卷应该是安全的。