流程
- 把目录和文件弄出来
- nginx配置可以挂载文件夹,php的不行,php配置目录有默认配置文件,可以直接挂载文件进去
- 执行两条docker run命令,然后去浏览器上访问你的https域名就可以了
- 失败的话自行排错(nginx证书目录可能需要777权限)
需要用到的文件和目录结构
pros
├─conf 配置目录
│ ├─nginx nginx配置目录
│ │ ├─my.conf 具体配置文件(这个没有限制,my.conf只是作为示例使用)
│ │
│ ├─php php配置目录
│ │ ├─my.ini php配置文件 (php配置不是必须的,不做示例)
│
├─cert 证书目录
│ ├─nginx-ssl ssl证书目录
│ │ ├─a.com.key
│ │ ├─a.com.pem
│
├─www 项目目录
│ ├─index.php 测试文件
│
my.conf
server {
# 无证书配置
# listen 80 ssl default_server;
# listen [::]:80 ssl default_server;
# ssl配置
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /pros/cert/nginx-ssl/a.com.pem;
ssl_certificate_key /pros/cert/nginx-ssl/a.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
root /usr/share/nginx/html;
index index.html index.php;
server_name _;
location / {
fastcgi_pass php1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
index.php
<?php
echo '<h1>测试</h1>';
通讯网络
# 不想用网络实现容器互联的话,可以用 --link
docker network create -d bridge my-net
php
docker run -itd --name php1 \
-v /pros/www:/www:ro \
-v /pros/conf/php/custom.ini:/usr/local/etc/php/conf.d/custom.ini \
--network my-net \
php:7.4-fpm
# 分析
# 挂载项目
-v /pros/www:/www:ro
# 挂载配置
-v /pros/conf/php/custom.ini:/usr/local/etc/php/conf.d/custom.ini
# 使用通讯网络
--network my-net
nginx
docker run -itd -p 443:443 \
--name nginx1 \
-v /pros/www:/usr/share/nginx/html:ro \
-v /pros/conf/nginx1:/etc/nginx/conf.d:ro \
-v /pros/cert/nginx-ssl:/pros/cert/nginx-ssl \
--network my-net \
nginx
# 分析
# 挂载项目地址(这个不是必须的,外部访问到的是php下边的项目文件)
-v /pros/www:/usr/share/nginx/html:ro
# 挂载配置
-v /pros/conf/nginx1:/etc/nginx/conf.d:ro
# 挂载证书目录(没有证书的不需要挂载这个,同时配置要也去掉ssl配置)
-v /pros/cert/nginx-ssl:/pros/cert/nginx-ssl
# 使用通讯网络
--network my-net