4. docker存储卷

docker存储卷

本文基于马哥的docker和k8s视频总结, 在此致谢马哥.

  • 分层构建, 联合挂载
why data volume.png
data valume.png
data volume1.png
volume type.png
  • 绑定挂载卷: 容器上的目录和宿主机目录都需自行指定
  • 由docker管理的卷: 容器上的目录自行指定, 宿主机目录由docker管理, 自动创建和关联

在容器中使用存储卷

  • 实现容器和宿主机共享一份数据文件
在容器中使用存储卷.png
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

如何让一个容器复制另外一个容器的存储卷

共享存储卷.png
docker 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的容器编排工具, 实现单机编排容器与制作镜像

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 23:45睡,5:25起 今天特殊情况,提前下班,变速跑改成慢跑,换了一条路线,风景很美,空气也很好,和先生商量了...
    法簽阅读 154评论 0 1
  • 解忧花儿阅读 348评论 2 6
  • 当有持续的,扰动发生时是否还能坚持己见 看到因,而非果看到差异与不同,而非流行的观念 在大众中拥有不同的目光与呼吸...
    咸叔说阅读 192评论 0 1
  • 人的心理真的很微妙,总认为自已还是了解一些人的心理规律的,但在现实中运用这些规律去与人相处时,往往效果会向相反的方...
    秦聪1阅读 248评论 1 0
  • 就不明白有些女人,宁愿躺美容床上几个小时也不愿运动运动,活动活动。 一直觉得,没有活力的女人就像一潭死水,脸蛋再好...
    婵婵的每一天都值得记录阅读 215评论 0 1

友情链接更多精彩内容