我已经开始使用 docker 并构建了一个工作示例,如https://codeable.io/wordpress-developers-intro-docker所示。我需要占用很小的 docker 容器,因为部署将在嵌入式系统上。
但我不知道这是如何组合在一起的。
有两个 Dockerfile,一个用于 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 使用(一个简单的 Web 服务器应用程序的 3 个容器)是使用 docker 的正确方法还是容器的过度杀伤?
- 如何扩展这个 docker 架构以增加负载?我可以将它用于生产吗?
- 容器
./
在主机上使用相同的卷 ( )。当使用 PHP 框架作为 Yii2 时,将卷移动到 PHP 或 Nginx 容器不是更好吗?