Docker 多容器部署 LNMP 环境

整个流程

  1. 客户端 http 请求服务器 80 端口,该端口被映射到 Nginx 容器 80 端口,进入 Nginx 处理。
  2. Nginx 分析请求,如果是静态资源,直接服务器读取内容;如果是 PHP 脚本,通过 PHP 容器调用服务器获取脚本,然后 FastCGI 处理。
  3. FastCGI 解析 PHP 脚本,必要时访问 MySQL 容器读写数据。

MySQL

1
2
docker pull mysql:8.0.16
docker run --restart=always -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=${ADMIN_PASSWORD} -d mysql:8.0.16 --default-authentication-plugin=mysql_native_password

Redis

1
2
docker pull redis:5.0.4
docker run --restart=always -d --name redis -p 6379:6379 redis:5.0.4

或者镜像备份恢复

1
2
docker save redis:5.0.4 > redis.tar # 备份镜像
docker load < redis.tar # 还原镜像

PHP

1
2
3
4
mkdir -p  ~/nginx/html
mkdir -p ~/php/
docker pull php:5.6.36-fpm
docker run --restart=always --name php-fpm --link mysql:mysql -d -p 9000:9000 -v ~/nginx/html:/usr/share/nginx/html -v ~/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v ~/php/php.ini:/usr/local/etc/php/php.ini php:5.6.36-fpm

目录结构:

~/php/
-> www.conf
-> php.ini

Nginx

1
2
3
4
5
6
mkdir -p  ~/nginx/html
mkdir -p ~/nginx/log
touch ~/nginx/log/access.log ~/nginx/log/error.log
mkdir -p ~/nginx/conf.d
docker pull nginx:1.13.12
docker run --restart=always --name nginx --link php-fpm:php-fpm -d -p 80:80 -v ~/nginx/html:/usr/share/nginx/html -v ~/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v ~/nginx/conf.d:/etc/nginx/conf.d -v ~/nginx/log:/var/log/nginx/ nginx:1.13.12

目录结构:

~/nginx/
->conf.d/
->->default.conf
->html/
->->50x.html
->->index.html
->->phpinfo.php
->nginx.conf