小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
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 如何数据同步?
# 测试: 启动三个容器启动
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
结论
容器之间配置信息的传递, 数据卷容器的生命周期一直持续到没有容器使用位置
一旦持久化到了本地, 本地的数据是不会被删除的