Docker数据卷和容器编排的使用

2020-06-17 07:15:19易采站长站整理

前言

Docker 数据卷和容器编排,记录下来!

数据卷

数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录或文件,数据卷绕过了拷贝系统,可以达到本地磁盘I/O性能。

运行容器时,指定一个数据卷


$ docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 e445ab08b2be

此时,我们创建了一个数据卷并且挂载到容器的/usr/share/nginx/html/目录下。

使用

docker inspect
命令找到数据卷映射目录:

Docker默认将宿主机的/var/lib/docker/volumes/1baaa58867f6e5b6bed703b0eae6ae859d39fa293ad5d85f58bf73d6101914c6/_data目录作为source目录,接下来,进入到该目录中:

此时发现该目录下的文件内容与容器中/usr/share/nginx/html/目录下的文件内容一致,这是因为挂载一个空的数据卷到容器中的一个非空目录中,这个目录下的文件会被复制到数据卷中。

注意:由于Mac中的Docker有点特殊,上文提到的/var/lib/xxxx目录,如果是在Linux环境下,则直接进入即可, 如果是在mac中,需要首先执行如下命令,在新进入的命令行中进入到/var/lib/xxx目录下: screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

接下来修改数据卷中的index.html文件内容,如下:


$ echo "hello volumes">index.html

修改完成后,再回到浏览器中,输入127.0.0.1,查看nginx中index.html页面中的数据,发现已经发生改变。

注意:Linux环境下输入

curl 127.0.0.1

说明宿主机中的文件共享到容器中去了。

宿主机目录做数据卷

上文中对于数据卷的用法还不是最佳方案,一般来说,我们可能需要明确指定将宿主机中的一个目录挂载到容器中,这种指定方式如下:


$ docker run -itd --name nginx2 -v /root/www/:/usr/share/nginx/html/ -p 8889:80 98ebf73aba75

这样便是将宿主机中的

/root/www/
目录挂载到容器的
/usr/share/nginx/html/
目录下,接下来只需要在
/root/www/
目录下添加、修改html文件,都能在nginx访问中立马看到效果。这种用法对于开发测试非常方便,不用重新部署,重启容器等。

注意:宿主机目录是一个绝对路径。