Docker 安装 Nginx

更新时间 2022-07-12 18:03:34

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.2 + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 144 小节,累计 22w+ 字,讲解图:923 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 440+ 小伙伴加入,欢迎点击围观

本小节中,我们将学习如何通过 Docker 快速安装 Ngnix, 并反向代理到后台的 Web 服务。

一、下载 Nginx 镜像

docker pull nginx:1.19.4

PS:小哈这里下载的是 1.19.4 版本 Nginx 镜像,你可以在 Docker Hub 上查找你想要的可用版本镜像。

命令执行成功后,通过 docker images 命令检查一下镜像是否下载成功:

检查ngnix镜像是否下载成功检查ngnix镜像是否下载成功

二、运行 Nginx 容器

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

参数说明:

  • -p 80:80: 将容器的 80 端口映射到宿主机的 80 端口上;
  • -d: 以后台方式运行镜像;
  • --name: 指定容器的名称为 nginx;

命令执行完成后,通过 docker ps命令确认一下容器是否启动成功。

Nginx 容器运行成功后,访问 http://localhost,即可看到 Nginx 欢迎页面:

提示:访问 http://localhost 在不指定端口的情况下,默认端口号为 80

nginx访问成功nginx访问成功

三、复制 Nginx 配置文件至宿主机

因为容器重启会丢失内部数据,因此要将需要持久化的文件挂载到宿主机中,以防数据丢失。

挂载之前,复制容器中需要持久化的相关配置文件到宿主机的指定路径下:

# 复制名称为 nginx 容器中 /etc/nginx/nginx.conf 文件夹到宿主机的 /docker/nginx 路径下,宿主机的持久化目录根据你的需要自定义路径
docker cp nginx:/etc/nginx/nginx.conf /docker/nginx
# 复制名称为 nginx 容器中 /etc/nginx/conf.d 文件到宿主机的 /docker/nginx 路径下
docker cp nginx:/etc/nginx/conf.d /docker/nginx

复制完成后,查看指定路径的配置文件,如下:

四、修改 Nginx 配置文件,添加反向代理

先通过命令 ifconfig 命令获取 docker0网卡的 ip 地址:

PS: 因为我需要反向代理的服务部署在本机的 Docker 容器中,所以用的这个 IP,如果你用的外网其他地址,可自行修改。

接下来,在 conf.d/default.config 中添加反向代理相关配置:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 反向代理到后台 Web 服务
proxy_pass http://172.17.0.1:8090;

五、删除刚刚启动的 Nginx 容器,新启动一个

先删除之前启动的 nginx 容器:

docker rm -f nginx

完成后,执行启动 Nginx 容器命令:

docker run -d \ 
-p 80:80 \ 
--name nginx \
-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/logs:/var/log/nginx \
nginx:1.19.4 

参数说明:

  • -p 80:80:将容器的 80 端口映射到主机的 80 端口;
  • -v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf:将容器中的 /etc/nginx/nginx.conf 文件挂载到宿主机中的 /docker/nginx/nginx.conf 文件;
  • -v /docker/nginx/conf.d:/etc/nginx/conf.d:将容器中 /etc/nginx/conf.d 目录挂载到宿主机中的 conf.d 目录下;
  • -v /docker/nginx/logs:/var/log/nginx:将容器中的 /var/log/nginx 目录挂载到宿主机中的 /docker/nginx/logs 目录下, 用以查看 Nginx 日志;

运行命令成功后,再次访问 http://localhost,即可看到反向代理到 Web 服务成功了:

访问80端口,看方向代理是否成功访问80端口,看方向代理是否成功