Docker 搭建本地 https 环境
目录
环境:
1. 生成自签名的SSL证书和私钥
首先,生成自签名的 SSL 证书和私钥。可以使用 OpenSSL 命令来生成
hostnamectl set-hostname httpshost
su
echo "192.168.23.5 www.httpshost.com" >> /etc/hosts
mkdir /opt/nginx
cd /opt/nginx
# 上传 nginx-1.22.0.tar.gz 安装包
rz -E
# 生成本地SSL证书及密钥文件
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
这个命令将会生成一个私钥文件 key.pem
和一个证书文件 certificate.pem
。
解释一下命令的参数:
req
:执行证书请求相关操作。-newkey rsa:2048
:生成一个新的 RSA 密钥对,密钥长度为 2048 bits。-nodes
:私钥不进行加密,这样在使用证书时不需要输入密码。-keyout key.pem
:指定生成的私钥文件名为key.pem
。-x509
:生成自签名的证书。-days 365
:证书有效期为 365 天。-out certificate.pem
:指定生成的证书文件名为certificate.pem
。
2. 编辑 Nginx 的 Dockerfile 文件
vim /opt/nginx/Dockerfile
# 基于基础镜像
FROM centos:7
# 维护者信息
MAINTAINER this is nginx image <mz>
# 添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make openssl openssl-devel
# 创建nginx管理用户
RUN useradd -M -s /sbin/nologin nginx
# 上传 nginx 软件压缩包,并解压
ADD nginx-1.22.0.tar.gz /usr/local/src/
# 指定工作目录
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
# 编译及安装
RUN make && make install
# 环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
# 指定 http 和 https 端口
#EXPOSE 80
EXPOSE 443
# 容器运行时执行命令
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
3. 编辑 YAML 文件
编辑 docker-compose.yml
文件:
vim /opt/nginx/docker-compose.yml
# 指定docker-compose版本为3
version: '3'
services:
# 定义一个名为 nginx 的服务
nginx:
# 设置容器名称为 nginx
container_name: nginx
# 设置主机名为 nginx
hostname: nginx
# 构建镜像
build:
# 设置上下文路径为 ./nginx,及Dockerfile所在目录
context: ./
# 指定 Dockerfile 文件名为 Dockerfile
dockerfile: Dockerfile
# 端口映射
ports:
# 将主机的 80 端口映射到容器的 80 端口
#- 80:80
# 将主机的 443 端口映射到容器的 443 端口
- 443:443
# 网络设置
networks:
# 连接到名为 mynet 的网络
mynet:
# 指定容器的ip地址为 172.18.0.10
ipv4_address: 172.18.0.10
# 卷挂载
volumes:
# 将主机的 ./html 目录挂载到容器的 /usr/local/nginx/html 的目录
- ./nginx.conf:/usr/local/nginx/conf/nginx.conf
- ./html:/usr/local/nginx/html
- ./key.pem:/usr/local/nginx/ssl/key.pem
- ./certificate.pem:/usr/local/nginx/ssl/certificate.pem
# 网络定义
networks:
# 定义名为 mynet 的网络
mynet:
# 使用 bridge 网络驱动
driver: bridge
# IP 地址管理
ipam:
# 配置 IP 地址
config:
# 设置子网为 172.18.0.0/16
- subnet: 172.18.0.0/16
4. 准备 nginx 主配置文件
在与 docker-compose.yml
文件相同的目录中创建一个名为 nginx.conf
的配置文件,并添加以下内容:
vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 443 ssl;
ssl_certificate /usr/local/nginx/ssl/certificate.pem;
ssl_certificate_key /usr/local/nginx/ssl/key.pem;
server_name httpshost;
charset utf-8;
location / {
root html;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5. 运行以下命令启动容器
docker-compose -f docker-compose.yml up -d
6. 添加网页主页
echo "this is https test" > html/index.html
7. 测试
现在,您的本地 Docker 环境已经搭建好了 HTTPS。您可以通过访问 https://www.httpshost.com
来测试您的应用程序。请注意,由于使用的是自签名证书,您可能会收到浏览器的安全警告。