Nginx管理内容和配置文件

来自泡泡学习笔记
跳到导航 跳到搜索

NGINX提供的内容和NGINX配置文件可以通过以下几种方式进行管理:

  1. 在Docker主机上维护文件
  2. 从Docker主机复制文件到容器
  3. 在容器中维护文件


在Docker主机上维护内容和配置文件

当创建容器时,您可以将Docker主机上的本地目录挂载到容器中的目录。NGINX镜像使用默认的NGINX配置,该配置将/usr/share/nginx/html作为容器的根目录,并将配置文件放在/etc/nginx中。对于在本地目录/var/www中存放内容和在/var/nginx/conf中存放配置文件的Docker主机,运行以下命令:

$ docker run --name mynginx2 
   --mount type=bind,source=/var/www,target=/usr/share/nginx/html,readonly 
   --mount type=bind,source=/var/nginx/conf,target=/etc/nginx/conf,readonly 
   -p 80:80 
   -d nginxplus


在Docker主机上的本地目录/var/www和/var/nginx/conf中对文件所做的任何更改都会反映在容器中的/usr/share/nginx/html和/etc/nginx目录中。readonly选项意味着这些目录只能在Docker主机上更改,而不能在容器内更改。


从Docker主机复制内容和配置文件

在创建容器期间,Docker可以从Docker主机上的本地目录复制内容和配置文件。一旦创建了容器,通过在文件更改时创建新容器或在容器内修改文件来维护文件。


复制文件的一种简单方法是创建一个Dockerfile,其中包含在基于NGINX镜像生成新Docker镜像期间运行的命令。对于Dockerfile中的文件复制(COPY)命令,本地目录路径相对于Dockerfile所在的构建上下文。


假设内容目录是content,配置文件所在的目录是conf,这两个目录都是Dockerfile所在目录的子目录。NGINX镜像具有默认的NGINX配置文件,包括default.conf,位于/etc/nginx/conf.d目录中。要仅使用Docker主机上的配置文件,请使用RUN命令删除默认文件:

FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY content /usr/share/nginx/html
COPY conf /etc/nginx


通过在Dockerfile所在的目录运行以下命令来创建NGINX镜像。命令末尾的句点(“.”)将当前目录定义为构建上下文,其中包含Dockerfile和要复制的目录:

docker build -t mynginx_image1 .


基于mynginx_image1镜像创建一个名为mynginx3的容器:

docker run --name mynginx3 -p 80:80 -d mynginx_image1


要对容器中的文件进行更改,请按照下一节中描述的使用辅助容器。


在容器中维护内容和配置文件

由于无法使用SSH访问NGINX容器,要直接编辑内容或配置文件,您需要创建一个具有shell访问权限的辅助容器。为了让辅助容器能够访问文件,需要创建一个为镜像定义了正确的Docker数据卷的新镜像:


使用Dockerfile复制nginx内容和配置文件,并为镜像定义卷:

FROM nginx
COPY content /usr/share/nginx/html
COPY conf /etc/nginx
VOLUME /usr/share/nginx/html
VOLUME /etc/nginx


通过运行以下命令创建新的NGINX镜像:

docker build -t mynginx_image2 .


基于mynginx_image2镜像创建一个名为mynginx4的NGINX容器:

docker run --name mynginx4 -p 80:80 -d mynginx_image2


启动一个名为mynginx4_files的辅助容器,该容器具有shell,可以访问我们刚刚创建的mynginx4容器的内容和配置目录:

$ docker run -i -t --volumes-from mynginx4 --name mynginx4_files debian /bin/bash
root@b1cbbad63dd1:/#


其中:

新创建的mynginx4_files辅助容器以前台运行,具有持久的标准输入(-i选项)和tty(-t选项)。mynginx4中定义的所有卷都作为辅助容器中的本地目录挂载。

debian参数表示辅助容器使用Docker Hub中的Debian镜像。因为NGINX镜像也使用Debian,所以使用Debian作为辅助容器是最高效的,而不是让Docker加载另一个操作系统。

/bin/bash参数表示在辅助容器中运行bash shell,提供一个shell提示符,您可以根据需要修改文件


要启动和停止容器,请运行以下命令:

docker start mynginx4_files
docker stop mynginx4_files


要退出shell但保持容器运行,请按Ctrl+p,然后按Ctrl+q。要重新获得对运行中容器的shell访问权限,请运行此命令:

docker attach mynginx4_files


要退出shell并终止容器,请运行exit命令。