Docker 学习 丨 数据卷容器

464 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

Docker 学习 丨 数据卷容器

初识Dockerfile

Dockerfile 就是用来构建 docker 镜像的构建文件, 就是一段命令脚本

# 测试 Dockerfile 初体验
mkdir docker-test-volume
cd docker-test-volume
vim dockerfile # 通过脚本生成一个镜像
# 创建一个 dockerfile,名字可以随机 建议 Dockerfile
# 文件中 的内容 指令(大写)
FROM centos 

VOLUME ["volume01", "volume02"] # 挂载目录

CMD echo "----end----"
CMD /bin/bash

---------------------------------------------
:wq
# 构建镜像
docker build -f dockerfile -t dmw/contos .

# . 是创建在当前目录下
# -t name:tag

docker images # 查看新创建的镜像
#########################################################
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
dmw/contos   latest    bcb7b9d02259   7 days ago    231MB
#########################################################

# 通过新创建的镜像创建容器
docker run -it bcb7b9d02259 /bin/bash
ls # 查看挂载的容器卷 "volume01", "volume02"

Docker 创建了多个 centos 如何数据同步?

image.png

# 测试: 启动三个容器启动

docker images # 查看新创建的镜像
#########################################################
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
dmw/contos   latest    bcb7b9d02259   7 days ago    231MB
#########################################################


docker run -it --name docker01 bcb7b9d02259 /bin/bash
ctrl + p + q # 退出容器

docker run -it --name docker02 --volumes-from docker01 bcb7b9d02259 /bin/bash
cd volume01
touch hello.java

docker + p + q

docker ps

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
7860ba22b527   bcb7b9d02259   "/bin/bash"              2 minutes ago   Up 2 minutes             docker02
cba0ed436116   bcb7b9d02259   "/bin/sh -c /bin/bash"   4 minutes ago   Up 4 minutes             docker01

docker attach docker01
cd volum01

[root@cba0ed436116 volume01]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 23 15:42 hello.java

# 此时验证 docker02 创建的 hello.java 在 docker01中已同步
# 此时 docker01 就可以称之为数据卷容器

# 练习 创建 docker03 与 docker01文件共享

# 测试: 删除 docker01 查看 docker02 和 docker03是否可以访问 hello.java 
# 结果: 依旧可以访问

# 这是一种备份拷贝机制

多个 MYSQL 实现数据共享

docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

# 此时,可以实现两个容器数据同步
# 本地开发可以使用 docker 创建 mysql, 实际项目部署不建议使用 docker 安装 mysql

结论

容器之间配置信息的传递, 数据卷容器的生命周期一直持续到没有容器使用位置

一旦持久化到了本地, 本地的数据是不会被删除的