docker存储卷
本文基于马哥的docker和k8s视频总结, 在此致谢马哥.
- 分层构建, 联合挂载
- 绑定挂载卷: 容器上的目录和宿主机目录都需自行指定
- 由docker管理的卷: 容器上的目录自行指定, 宿主机目录由docker管理, 自动创建和关联
在容器中使用存储卷
- 实现容器和宿主机共享一份数据文件
docker run --help
-v, --volume list Bind mount a volume
由docker管理的卷
# docker管理的卷, -v选项指定容器里面的目录
docker container run --name bbox1 -it --rm -v /data/ busybox
/ # ls / # 可以查看到/data目录
/ # ls /data # 此时/data目录中无数据
docker inspect bbox1 | grep -A 10 Mounts
"Mounts": [
{
"Type": "volume",
"Name": "32f93d0afb5af3fff2a841a32cbbc8677256bff022ad0d278c081d85ef87cd53",
"Source": "/var/lib/docker/volumes/32f93d0afb5af3fff2a841a32cbbc8677256bff022ad0d278c081d85ef87cd53/_data", # 可以查看到容器上的/data目录对应宿主机上"Source"值对应的目录
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
# 在容器上的/data目录创建文件, 宿主机上映射的目录内可以查看到对应内容
# 同样的在宿主机上映射的目录创建的目录, 同理可在容器的/data目录内看到对应内容
绑定挂载卷
# 绑定挂载卷
docker container run --name bbox2 -it -v HOSTDIR:VOLUMEDIR busybox
HOSTDIR # 宿主机上的目录
VOLUMEDIR # 容器里的目录
docker container run --name bbox2 -it --rm -v /data/volume/bbox2:/data busybox
# 在宿主机上 ls -R /data 可以看见指定目录被自动依次创建
echo test >> /data/volume/bbox2/test.txt
特别注意: 容器被删除后所使用的数据(包括目录和文件)依旧被保留 <==> 持久存储 !
这就意味着下次再次启动容器时只要命令指定的内容一致, 而且
-v
选项指定的目录也一直, 则新建的容器可以使用原来的数据和文件
使用模板过滤信息
# 根用"."表示
docker inspect bbox2 -f {{.Mounts}}
[{bind /data/volume/bbox2 /data true rprivate}]
docker inspect bbox2 -f {{.NetworkSettings.IPAddress}}
172.17.0.2
如何让一个容器复制另外一个容器的存储卷
共享存储卷.pngdocker run --help
--volumes-from list Mount volumes from the specified container(s)
# 可以自己新建一个专门用于做基础支撑的容器, 然后让其他容器都以这个容器为模板进行创建
# 这个用于做基础支撑的容器不要去删除!
# 先创建一个基础支撑容器, 此容器可以关闭
docker container create --name infracon -it \
-v /data/infracon/volume/:/data/web/html \
busybox
# 然后依次以基础支撑容器为模板创建你需要创建的容器
# 注意创建的容器内的程序可能会有依赖关系, 因此要注意创建的先后顺序!
docker container run --name mariadb1 -it --volumes-from infracon --network container:infracon mariadb
docker container run --name tomcat1 -it --volumes-from infracon --network container:infracon tomcat
docker container run --name nginx1 -it --volumes-from infracon --network container:infracon nginx
- 以基础支撑容器为模板创建的容器在用命令
docker inspect container_name
查看信息时看不到IP地址的信息, 因为它是Join进来的, 但是在容器内会有显示, 说明你创建的新容器没有问题
docker-compose
docker的容器编排工具, 实现单机编排容器与制作镜像
网友评论