基于Docker的Nginx的安装与配置

基于Docker的Nginx的安装与配置

  • 1 为Nginx创建一个容器
    • 1.1 学习docker run
    • 1.2 通过docker run为Nginx创建并启动一个容器
  • 2 配置Nginx
    • 2.1 学习docker的bind mount技术
    • 2.2 在Nginx容器中找到想修改的文件所在的目录
      • 2.2.1 认识nginx.conf文件
      • 2.2.2 访问Nginx服务,默认返回index.html
    • 2.3 找到后,在主机创建对应的目录,为后续挂载做准备 [在主机的终端进行操作]
      • 2.3.1 创建目录
      • 2.3.2 拷贝文件
      • 2.3.3 在主机中修改Nginx的index.html
    • 2.4 删除就Ngingx容器,重启新Nginx容器
    • 2.5 新Nginx容器,新的index.html

1 为Nginx创建一个容器

  • 实际中,后端代码部署在远端容器中以向外提供后端服务。
  • 类似的,我们可以在本地为Nginx创建一个容器,并提供Nginx服务。

1.1 学习docker run

  • 一般情况,启动一个服务,需要先拉取该服务的镜像,然后为该镜像启动一个容器。这个可以用一条命令来实现:docker run
  • 通过docker --help查看如何使用docker命令:
    基于Docker的Nginx的安装与配置_第1张图片
  • 进一步查看:docker run --help
    基于Docker的Nginx的安装与配置_第2张图片

Options很多,一般掌握最基本的的,也就够用了。如果遇到不够用的情况,把诉求描述给gpt,让它帮忙写就好了,或者google一下。

1.2 通过docker run为Nginx创建并启动一个容器

  • macOS的shell中执行:
docker run \
--restart always \
--name Nginx \
-d \
-p 80:80 \
nginx

常用参数的详细解释:
(1)--restart always:是设定重启策略,意味着无论容器的退出状态码是什么,Docker都会自动重启这个容器。这样可以保证在Docker进程或主机重启后,容器将自动启动。
(2)--name Nginx:是设定这个新建的Docker容器的名字为"Nginx"。如果不设定,Docker将自动给它分配一个随机的名字。
(3)-d是让这个容器在后台运行,而不是在当前的shell里。
(4)-p 80:80是设定端口映射,将主机的80端口映射到容器的80端口。这样,我们可以通过主机的80端口访问到容器内运行的服务。
(5)nginx是这个新建的Docker容器所使用的镜像的名字。
基于Docker的Nginx的安装与配置_第3张图片

  • 通过本地的Docker客户端(Portainer也可以)查看Nginx容器
    在这里插入图片描述
  • 已经可以使用Nginx容器提供的Nginx服务了:
    基于Docker的Nginx的安装与配置_第4张图片

2 配置Nginx

不支持定制的软件,不是好软件:)

  • 思路:将Nginx容器中的配置文件拷贝到主机,修改后,再删除之前的Nginx容器,并以“绑定挂载卷”的方式重新启动新Nginx容器,就可以让容器读到更新后的配置文件。
  • 这里直接采用docker的bind mount技术来更新配置文件。

2.1 学习docker的bind mount技术

Docker有两个选项让容器在主机上存储文件,即使在容器停止后文件也能持久保存:volume和 bind mount。

  • bind mount的效果:docker run [省略其他option] -v /path/to/nginx/conf:/etc/nginx/conf.d nginx

将主机上的 /path/to/nginx/conf 目录挂载到 Nginx 容器的 /etc/nginx/conf.d 目录后,在主机的 /path/to/nginx/conf 目录中编辑 Nginx 的配置文件,容器内的 /etc/nginx/conf.d 目录会实时看到这些更改。

  • 因此,要先找到想修改的文件所在的目录。

2.2 在Nginx容器中找到想修改的文件所在的目录

那我们就是要在Nginx容器中通过命令行来交互。

  • 执行命令:docker exec -it Nginx /bin/bash

(1)docker exec:这是Docker的一个命令,用来在运行的容器中执行命令。
(2)-it:这是两个参数,i代表交互模式,t为该命令分配一个伪TTY(终端)
(3)命令含义:在名为Nginx的容器中以交互模式启动一个bash shell
在这里插入图片描述

  • 通过查找Nginx配置相关的资料,可以知道我们要关注:/etc/nginx目录
    在这里插入图片描述

2.2.1 认识nginx.conf文件

基于Docker的Nginx的安装与配置_第5张图片

  • /etc/nginx/nginx.conf文件是Nginx的主配置文件。它用于存储和管理nginx服务器的配置信息。在这个文件中,咱可以配置如何处理进入服务器的请求,如何转发这些请求,还可以配置日志、缓存和其他的服务器参数等。
  • 这个文件的配置语法是基于指令和参数的,每行都是一个指令和它的参数。指令之间由分号分隔,而参数之间则由空格分隔。

(1)在Nginx容器中,这个配置文件通常会被映射到宿主机的某个文件,以便于在容器外部进行编辑和管理。【这正是我们要做的】
(2)需要注意的是,任何对这个文件的修改都需要重启Nginx服务才能生效。

  • 在Nginx配置中,include指令用于包含其他配置文件,可以使主配置文件保持清晰和简洁,同时也方便管理和维护。当Nginx启动或重启时,它会读取include指令指定的所有文件,并把这些文件的配置内容合并到主配置文件中。[include /etc/nginx/conf.d/*.conf]

因此,我们不仅要关注nginx.conf,还要关注conf.d目录

2.2.2 访问Nginx服务,默认返回index.html

  • 这个index.html在哪?/usr/share/nginx/html/index.html
    基于Docker的Nginx的安装与配置_第6张图片

2.3 找到后,在主机创建对应的目录,为后续挂载做准备 [在主机的终端进行操作]

2.3.1 创建目录

  • mkdir -p ~/docker_mount/nginx/conf/conf.d
  • mkdir -p ~/docker_mount/nginx/html

2.3.2 拷贝文件

  • docker container cp Nginx:/etc/nginx/nginx.conf ~/docker_mount/nginx/conf
  • docker container cp Nginx:/etc/nginx/conf.d/default.conf ~/docker_mount/nginx/conf/conf.d/

(1)/etc/nginx/conf.d/目录下只有default.conf
(2)docker container cp 不支持*,即Nginx:/etc/nginx/conf.d/*是不对的

  • docker container cp Nginx:/usr/share/nginx/html/index.html ~/docker_mount/nginx/html

2.3.3 在主机中修改Nginx的index.html

  • 修改
    在这里插入图片描述
    基于Docker的Nginx的安装与配置_第7张图片

2.4 删除就Ngingx容器,重启新Nginx容器

  • 删除:docker stop Nginx && docker rm Nginx
    基于Docker的Nginx的安装与配置_第8张图片
  • 以“bind mount”方式重启Nginx容器
docker run \
--restart always \
--name Nginx \
-d \
-v /Users/forrest.../docker_mount/nginx/html:/usr/share/nginx/html \
-v /Users/forrest.../docker_mount/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/forrest.../docker_mount/nginx/conf/conf.d:/etc/nginx/conf.d \
-p 80:80 \
nginx

基于Docker的Nginx的安装与配置_第9张图片

2.5 新Nginx容器,新的index.html

基于Docker的Nginx的安装与配置_第10张图片

  • 之后直接在主机上修改配置,然后执行:docker stop Nginx && docker start Nginx

你可能感兴趣的:(搭建环境,docker,java后端技术栈,docker,nginx)