当我们创建容器之后,不可避免会遇到修改配置文件的操作,但是直接在容器中操作需要安装 vim,不方便,也不建议这样操作。
所以这时就可以利用 docker 的目录挂载功能,将容器中需要修改配置文件的目录挂载到主机中,这样通过修改主机上的配置文件达到修改容器中配置文件的目的
一、创建容器时挂载目录文件
在我们刚创建容器时,为了以后修改容器文件的方便就可以直接建一个目录,实现和容器的目录挂载:
docker run -di -v /usr/local/yolo/nginx:/usr/local/yolo/nginx --name=nginx_yolo nginx:latest
比如我这里将 主机上的/usr/local/yolo/nginx
目录和创建的nginx容器的对应目录挂载,这两个目录没必要自己创建,建立时会自动创建。
以后操作容器内的什么文件,就可以直接在主机的/usr/local/yolo/nginx
目录下操作,对应的文件就会生成到容器的该目录下,然后再将容器的对应文件复制到你需要的地方即可。
比如这里,我想要修改 nginx 容器中default.conf
配置文件:
(1)在主机的/usr/local/yolo/nginx
目录下,编辑好default.conf
文件:
这步可以直接在该目录下创建修改文件,也可以通过Xftp直接本机编辑然后传到该目录下:
(2)进入容器内该目录下,看看是否存在修改的文件:
目录挂载成功,文件修改好之后,复制到容器需要的位置即可。
(3)这里以修改 nginx 端口为例,将修改后的文件替换原来的文件
进入 nginx 容器 中 default.conf
的目录下,查看具体的文件路径:
得到 default.conf
配置文件在容器的路径为:/etc/nginx/conf.d/
查看 是否是修改后的文件:
OK,至此修改成功,其实这类似 主机和容器的文件拷贝操作
二、通过数据卷实现docker 目录挂载
数据卷:其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。感觉像是由一个容器定义的一个数据挂载信息。其他的容器启动可以直接挂载数据卷容器中定义的挂载信息
首先创建一个普通容器:实现主机和容器对应目录的挂载
docker run -v /usr/local/yolo/:/usr/local/yolo/ --name dataVol centos:7 /bin/bash
然后创建一个新容器使用这个数据卷,也就是完成目录的映射,这里注意不用必须建立和数据卷一样的容器,它只是起一个目录映射的作用,方便多次使用
docker run -it --volumes-from dataVol --name=nginx1 nginx /bin/bash
--volumes-from
表示指定从哪个数据卷来挂载数据
此时在主机的对应目录添加一个文件:
去容器的对应目录查看:
三、总结
目录挂载,相对于直接在容器内编辑文件,方便管理,可以借助数据卷,实现固定的目录映射,方便整理和修改。
如果不需要存储配置文件,就是使用或者编辑一次的话,使用 cp 命令将主机上修改好的文件直接复制到相应容器的目录内会更加简单:docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来:docker cp 容器名称:容器目录 需要拷贝的文件或目录