如何共享docker容器的数据(包括compose version3里面的编写方式)

需要使用到数据卷(Volume)的概念

参考《Docker 中通过 Volume 实现持久化存储和数据共享》一文说法,最好是先创建一个volume container,单纯用来存储共享数据的。下面实践下:

# 先创建alpine容器,名称为vc_mysql,前缀vc代表是volume container,代表是为mysql创建的为了共享数据的数据卷,并且-v表示创建一个由docker容器自行管理的卷,指定容器内目录为/var/lib/mysql,容器外目录为
docker run -d -v /var/lib/mysql --name vc_mysql alpine

# 启动第一个mysql容器mysql_1,--volumes-from指定使用与容器vc_mysql一样的卷
docker run -d --name mysql_1 --volumes-from=vc_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=camunda -d mysql:5.6

# 第一个mysql中创建数据表(随意弄一个),为了留点操作痕迹
# docker stop 此容器

# 启动第二个mysql容器mysql_2,--volumes-from指定使用与容器vc_mysql一样的卷
docker run -d --name mysql_2 --volumes-from=vc_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=camunda -d mysql:5.6
# 会看到第二个mysql中也能看到第一个mysql中新建的表,代表数据是共享的

# 注意因为两个mysql共享数据,同时开启,会导致有一个数据库访问不了,记得使用一个时先停用另外一个

通过 docker inspect xxx(容器名:tag或容器id)命令,可以看到 vc_mysql, mysql_1, mysql_2 都是使用同一个卷的,如下图所示:

 

docker compose verion 3 的编写方式

参考资料:

https://docs.docker.com/compose/compose-file/#volume-configuration-reference

Docker-compose-v3弃用volumes_from

下面列出部署mysql和对应使用mysql的应用camunda工作流的docker-compose.yml实例

version: "3.7"
services:
    mysql4camunda_service:
        image: mysql:5.6
        container_name: mysql4camunda_container
        restart: always
        ports:
            - 3306:3306
        networks:                                                                                                                                                     
            - camunda_mysql_network
        env_file:
            - ./env/mysql.env
        volumes: #重点是设置这里
            - data-volume:/var/lib/mysql #重点是设置这里
    camunda4mysql_service:
        image: camunda/camunda-bpm-platform:7.11.0
        container_name: camunda4mysql_container
        restart: always
        ports:
            - 8080:8080
        networks:
            - camunda_mysql_network
        depends_on:
            - mysql4camunda_service
        env_file:
            - ./env/camunda.env
networks:
    camunda_mysql_network:
volumes: #重点是设置这里
    data-volume: #重点是设置这里

在docker-compose-v2中volumes_from是 可以正常使用的,但在v3中这一个参数被弃用,被另外一个参数顶级卷替代(全局)

其中上面的例子 volumes 可以自定义名称,表示挂载的点,同时可以共享给其他服务使用的。即使对这个服务使用docker-compose down命令删除容器和卷,但都不会删除掉这个卷,从下面可以看出来:

docker-compose down后(或者docker rm -vf $(docker ps -a -q)后),还是能看到它存在,证明这样操作是可以打到共享卷的效果的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以帮您编写一个docker-compose文件来监控docker容器、MySQL和网络连通性。以下是示例代码: ```yaml version: '3.7' services: prometheus: image: prom/prometheus container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' grafana: image: grafana/grafana container_name: grafana ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana node_ping: image: grafana/grafana-image-renderer:latest container_name: node_ping environment: - PING_HOST=google.com - PING_INTERVAL=10s mysql: image: mysql:latest container_name: mysql environment: MYSQL_ROOT_PASSWORD: example_password volumes: - mysql_data:/var/lib/mysql volumes: grafana_data: mysql_data: ``` 在这个docker-compose文件中,我们定义了四个服务: - Prometheus:一个开源的监控系统,用于收集和存储监控指标数据。我们将其映射到端口9090,以便我们可以通过Web界面访问它。 - Grafana:一个开源的可视化工具,用于显示监控数据。我们将其映射到端口3000,以便我们可以通过Web界面访问它。 - Node_ping:一个用于检查网络连通性的镜像,可以通过环境变量来指定要ping的主机和ping的时间间隔。 - MySQL:一个用于存储数据的关系型数据库。 此外,我们还定义了两个卷用于持久化数据。 请注意,这只是一个示例docker-compose文件,您需要根据您的实际需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenLeungX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值