
介绍如何在 Docker 内部以及容器之间管理数据;在容器中管理数据主要有两种方式:数据卷(Volumes)、挂载主机目录 (Bind mounts)
镜像来源
[root@docker01 ~]# docker pull registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17[root@docker01 ~]# docker tag ed21b7a8aee9 nginx:1.17[root@docker01 ~]# docker images | grep 'nginx'nginx 1.17 ed21b7a8aee9 2 weeks ago 127MBregistry.cn-beijing.aliyuncs.com/google_registry/nginx 1.17 ed21b7a8aee9 2 weeks ago 127MB
数据卷【-v, --volume】
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
1、数据卷可以在容器之间共享和重用
2、对数据卷的修改会立马生效
3、对数据卷的更新,不会影响镜像
4、数据卷默认会一直存在,即使容器被删除
注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。
数据卷挂载方式1【重点,常用】
包括挂载目录和挂载文件
宿主机挂载的目录和文件
[root@docker01 ~]# mkdir -p data/nginx_test2 # 在宿主机创建目录[root@docker01 ~]# cat etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# hosts info 2020-04-18
宿主机操作
# data/nginx_test2:/data_volume_test2 目录挂载 前面:宿主机目录;后面:容器目录# etc/hosts:/etc/hosts 文件挂载 前面:宿主机文件;后面:容器文件[root@docker01 ~]# docker run -d -v data/nginx_test2:/data_volume_test2 -v etc/hosts:/etc/hosts --name nginx102 nginx:1.17 # 发布容器[root@docker01 ~]# docker inspect nginx102 # 然后在 Mounts 查看信息…………"Mounts": [{"Type": "bind","Source": "/etc/hosts","Destination": "/etc/hosts","Mode": "","RW": true,"Propagation": "rprivate"},{"Type": "bind","Source": "/data/nginx_test2","Destination": "/data_volume_test2","Mode": "","RW": true,"Propagation": "rprivate"}],…………# 在宿主机的挂载目录创建文件和目录[root@docker01 ~]# cd data/nginx_test2/[root@docker01 nginx_test2]# echo "aaa" > aaa[root@docker01 nginx_test2]# mkdir abc[root@docker01 nginx_test2]# lltotal 4-rw-r--r-- 1 root root 4 Apr 18 16:41 aaadrwxr-xr-x 2 root root 6 Apr 18 16:41 abc
容器操作
# 进入容器[root@docker01 ~]# docker exec -it nginx102 bash# 查看挂载目录信息root@8c8db5089c0e:/# lsbin boot data_volume_test2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr varroot@8c8db5089c0e:/# cd data_volume_test2/root@8c8db5089c0e:/data_volume_test2# ls -ltotal 4-rw-r--r-- 1 root root 4 Apr 18 08:41 aaadrwxr-xr-x 2 root root 6 Apr 18 08:41 abc# 查看挂载文件信息root@2537d3854b42:/# cat etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# hosts info 2020-04-18
数据卷挂载方式2【了解】
宿主机操作
[root@docker01 ~]# docker run -d -v data_volume --name nginx101 nginx:1.17 # 发布时,加入数据卷信息 -v data_volume594ea376d9301263046b13c72304af9c74a2a7516d0f3d8292f020ceba94742d[root@docker01 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES594ea376d930 nginx:1.17 "nginx -g 'daemon of…" 5 seconds ago Up 3 seconds 80/tcp nginx101[root@docker01 ~]# docker inspect -f {{.Mounts}} nginx101 # 或者执行 docker inspect nginx101 然后在 Mounts 查看信息[{volume b7bXXXX897 var/lib/docker/volumes/b7bXXXX897/_data data_volume local true }][root@docker01 ~]# cd var/lib/docker/volumes/b7bXXXX897/_data # 进入数据卷目录[root@docker01 _data]# echo "1111" > 111 # 创建文件并写入数据[root@docker01 _data]# mkdir aaa/bbb -p # 创建多个目录
进入容器操作
[root@docker01 ~]# docker exec -it nginx101 bash # 进入容器root@594ea376d930:/# ls -l # 查看容器根目录信息total 8drwxr-xr-x 2 root root 4096 Mar 27 00:00 bindrwxr-xr-x 2 root root 6 Feb 1 17:09 bootdrwxr-xr-x 2 root root 6 Apr 17 14:35 data_volume # 存在该目录drwxr-xr-x 5 root root 340 Apr 17 14:35 dev…………root@594ea376d930:/# cd data_volume/ # 进入数据卷root@594ea376d930:/data_volume# ls -l # 可见文件和目录都在容器中存在total 4-rw-r--r-- 1 root root 5 Apr 17 14:44 111drwxr-xr-x 3 root root 17 Apr 17 14:44 aaa
查看容器的挂载信息
root@594ea376d930:/# mount # 查看容器挂载信息………………/dev/sda2 on /data_volume type xfs (rw,relatime,attr2,inode64,noquota) # 找到数据卷信息………………
挂载主机目录【--mount】
包括挂载目录和挂载文件
宿主机挂载的目录和文件
[root@docker01 ~]# mkdir -p /data/nginx_test3 # 在宿主机创建目录[root@docker01 ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# hosts info 2020-04-18
宿主机操作
[root@docker01 ~]# docker run -d --mount type=bind,source=/data/nginx_test3,target=/data_volume_test3 --mount type=bind,source=/etc/hosts,target=/etc/hosts --name nginx103 nginx:1.17 # 发布容器[root@docker01 ~]# docker inspect nginx103 # 在Mounts可见容器的挂载信息…………"Mounts": [{"Type": "bind","Source": "/data/nginx_test3","Destination": "/data_volume_test3","Mode": "","RW": true,"Propagation": "rprivate"},{"Type": "bind","Source": "/etc/hosts","Destination": "/etc/hosts","Mode": "","RW": true,"Propagation": "rprivate"}],…………# 在宿主机的挂载目录创建文件和目录[root@docker01 ~]# cd /data/nginx_test3/[root@docker01 nginx_test3]# echo "123" > 123[root@docker01 nginx_test3]# mkdir -p 111/222[root@docker01 nginx_test3]# lltotal 4drwxr-xr-x 3 root root 17 Apr 18 18:05 111-rw-r--r-- 1 root root 4 Apr 18 18:05 123[root@docker01 nginx_test3]# tree.├── 111│ └── 222└── 1232 directories, 1 file
容器操作
# 进入容器[root@docker01 ~]# docker exec -it nginx103 bash# 查看挂载目录信息root@c9427fcbc26c:/# lsbin boot data_volume_test3 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr varroot@c9427fcbc26c:/# ls -l data_volume_test3/total 4drwxr-xr-x 3 root root 17 Apr 18 10:05 111-rw-r--r-- 1 root root 4 Apr 18 10:05 123# 查看挂载文件信息root@c9427fcbc26c:/# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# hosts info 2020-04-18
完毕!
———END———
如果觉得不错就关注下呗 (-^O^-) !

文章转载自OpenInfo,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




