2024年最新 Docker 安装 Nginx 容器 (完整详细版) 2025年最新

Docker 安装 Nginx 容器 (完整详细版)

本文详细介绍了Docker的安装步骤,包括如何从官方镜像仓库下载Nginx镜像,如何检查已下载的镜像。接着,讲解了创建Nginx配置文件的必要性,并提供了创建挂载目录的命令。然后,展示了如何创建并运行Nginx容器,包括端口映射、配置文件挂载和日志目录设置。最后,提到了如何重启容器以应用修改,并给出了结果检测的方法。

说明:

Docker如果想安装软件 , 必须先到 Docker 镜像仓库下载镜像。如果能从docker拉取nginx镜像的,可以直接拉取,拉取不了的,我这里提供国内可用的,截至2024年12月12日为nginx最新的镜像

docker官方的镜像拉取命令:

docker pull nginx

国内可用的:

docker pull registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest

检查当前所有Docker下载的镜像

bash 复制代码
docker images

创建Nginx配置文件
启动前需要先创建Nginx外部挂载的配置文件( /home/nginx/conf/nginx.conf)

之所以要先创建 , 是因为Nginx本身容器只存在/etc/nginx 目录 , 本身就不创建 nginx.conf 文件

当服务器和容器都不存在 nginx.conf 文件时, 执行启动命令的时候 docker会将nginx.conf 作为目录创建 , 这并不是我们想要的结果
创建挂载目录

mkdir -p /home/nginx/conf

mkdir -p /home/nginx/conf/conf.d

mkdir -p /home/nginx/log

mkdir -p /home/nginx/html
容器中的nginx.conf文件和conf.d文件夹复制到宿主机
#生成容器

docker run --name nginx -p 9001:80 -d nginx

#将容器nginx.conf文件复制到宿主机

docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.con

#将容器conf.d文件夹下内容复制到宿主机

docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d

#将容器中的html文件夹复制到宿主机

docker cp nginx:/usr/share/nginx/html /home/nginx/
创建Nginx容器并运行

#直接执行docker rm nginx或者以容器id方式关闭容器

#找到nginx对应的容器id

docker ps -a

#关闭该容器

docker stop nginx

#删除该容器

docker rm nginx

#删除正在运行的nginx容器

docker rm -f nginx
Docker 创建Nginx容器

bash 复制代码
docker run \
-p 80:80 \
--name nginx \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx:latest

如果需要绑定ssl的需要把443的端口映射出来

bash 复制代码
docker run \
-p 80:80 \
-p 443:443\
--name nginx \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx:latest

我自己的实际情况映射了别的目录,如下

-v /home/files:/etc/nginx/html/htmlstatic

bash 复制代码
docker run -p 443:443 -p 80:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/files:/etc/nginx/html/htmlstatic -d nginx:latest

ssl的nginx的配置,给我自己项目中的应用示例:

bash 复制代码
[root@VM-4-20-centos conf.d]# cat default.conf_ssl_back 
server {
    listen       443 ssl;
    listen  [::]:443 ssl;
    server_name  www.test.com;

    #access_log  /var/log/nginx/host.access.log  main;

    ssl_certificate /home/www.test.com_nginx/www.test.com_bundle.pem; # 证书文件路径
    ssl_certificate_key /home/www.test.com_nginx/www.test.com.key; # 私钥文件路径


    # 可选的 SSL 配置,增强安全性
    ssl_protocols TLSv1.2 TLSv1.3; # 仅启用 TLS 1.2 和 1.3
    ssl_prefer_server_ciphers on; # 使用服务器优先的密码套件
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256'; # 推荐的密码套件
 


    location /htmlstatic {
        alias /etc/nginx/html/htmlstatic; # 设置别名,指向容器内的目录
        autoindex on; # 开启目录浏览
    }



    location /jtoService {
       rewrite ^/jtoService/(.*)$ /$1 break;
       proxy_pass http://127.0.0.1:8991;
     }


 
    location /app {
	rewrite ^/app/(.*)$ /$1 break;
        proxy_pass   http://127.0.0.1:8990;  # 将请求转发到本机的1234端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }




    location /manage {
        proxy_pass   http://127.0.0.1:8090;  # 将请求转发到本机的1234端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
    }
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    #error_page  404              /404.html;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

[root@VM-4-20-centos conf.d]# 

其中需要把ssl证书放在docker nginx 容器里面 /home/www.test.com_nginx/ 目录下

例如,如果证书在宿主机的文件夹为www.test.com_nginx

需要把目录切换到www.test.com_nginx当前目录下

bash 复制代码
docker cp www.test.com_nginx/  nginx:/home

在这里引用了大佬的文章,只是在我自己使用上做了总结

相关推荐
谢栋_7 分钟前
设计模式从入门到精通之(四)建造者模式
java·设计模式·建造者模式
HelloZheQ17 分钟前
从用户输入 URL 到后端响应的完整流程解析
java
小技与小术18 分钟前
nginx反向代理及负载均衡
linux·运维·nginx·负载均衡
GGBondlctrl22 分钟前
【Spring Boot】Spring 事务探秘:核心机制与应用场景解析
java·spring·事务·spring事务·transaction·声明式事务·编程式事务
多多*22 分钟前
后端技术选型 sa-token校验学习 下 结合项目学习 前后端登录
java·redis·git·学习·github·intellij-idea·状态模式
Seven9728 分钟前
《深入理解Mybatis原理》Mybatis中的缓存实现原理
java·mybatis
黄名富31 分钟前
Kafka 主题管理
java·分布式·kafka
哥谭居民000137 分钟前
学技术步骤,(tomcat举例)jar包api手写tomcat静态资源基础服务器
java·服务器·tomcat
苹果酱056737 分钟前
React性能优化: 使用React.lazy与Suspense提高加载效率
java·vue.js·spring boot·mysql·课程设计
飞的肖1 小时前
前端全局水印, 拖拉拽图片 ,拽入等比压缩,上传服务器后,java 转base64 加水印,然后前端http预览,确认保存,拽出删除。
java·开发语言·前端·图片上传