Nginx管理内容和配置文件
NGINX提供的内容和NGINX配置文件可以通过以下几种方式进行管理:
- 在Docker主机上维护文件
- 从Docker主机复制文件到容器
- 在容器中维护文件
在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命令。