Docker 搭建本地 https 环境

发布时间 2023-08-28 14:07:32作者: m_zhuang

环境:

安装 Docker

安装 docker-compose

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

image-20230828132226687

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;" ]


image-20230828133011740

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


image-20230828133209059

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;
        }

    }
}

image-20230828133340832

5. 运行以下命令启动容器

docker-compose -f docker-compose.yml up -d

image-20230828133743355

image-20230828134455411

6. 添加网页主页

echo "this is https test" > html/index.html

image-20230828135438806

7. 测试

现在,您的本地 Docker 环境已经搭建好了 HTTPS。您可以通过访问 https://www.httpshost.com 来测试您的应用程序。请注意,由于使用的是自签名证书,您可能会收到浏览器的安全警告。

image-20230828135545704

image-20230828135620026

image-20230828135706377