admin管理员组文章数量:1558081
前言
什么是数据卷容器
当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们关闭docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。
通俗地来说,docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。
特点:
- 数据卷可以在容器之间共享或重用数据
- 数据卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
实现
需求:
这里有两个容器,一个java进程容器(game-server
),一个是mysql57
的容器,在game-server下有sql的可执行文件,用来初始数据库的,那么我该如何使用game-server的sql文件去初始化mysql57容器呢?
Docker下的实现方式
docker官方文档
这里采用--volumes-from
命令,使子容器完成去父容器的volume
的传递。
- 这里先启动java容器,注意这里cmd为/bin/bash,并不是启动java进程
docker run -d --name server-game -v /sql/ -it server-game:1.0.0 /bin/bash
- 接下来先启动我们的mysql57容器,假设这里我的mysql绑定的IP地址是
- 使用容器mysql仅仅作为mysql的客户端,得到java进程下的sql文件,完成初始化
docker run -it --name mysql-client --volumes-from server-game \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 \
/bin/bash /data/p-0/winner/ci/cleandb.sh
Docker-compose的实现
1.首先创建一个公共的数据卷
docker volume create --name=sqldata
2.配置game-server的启动文件,docker-compose-server.yml
version: "3.3"
#3.3 need docker engine 17.06.0+
services:
win-mgr:
image: server-game:1.0.0
container_name: server-game
volumes:
- sqldata:/sql/
volumes:
sqldata:
external: true
特别注意这里,external
为true
3.mysql的启动文件
version: "3.3"
volumes:
sqldata:
external: true
services:
mysql-master:
image: mysql:5.7
container_name: mysql57
environment:
- MYSQL_ROOT_PASSWORD=123456
ports:
- "13306:3306"
volumes:
- /home/${USER}/docker/mysql57/conf.d:/etc/mysql/conf.d
- /home/${USER}/docker/mysql57/data:/var/lib/mysql
- sqldata:/win-sql
版权声明:本文标题:Docker的数据卷容器—容器间实现文件传递与共享 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727334253a1108891.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论