前言

默认情况下 docker commit 时 Mysql 数据会绕过容器的文件系统不会 commit 到 image,正常情况也是不会将mysql数据保留在镜像上传至hub,这已经涉及数据泄露了,可替代的方法是通过docker-entrypoint-initdb.d来实现启动容器初始化数据

客户再三要求想直接使用 docker save 出来的镜像,启动镜像后容器中保留之前 commit 时的数据

$ docker load -i mysql.tar
$ docker run -d --network host mysql

Docke 持久化数据的主要方式有两种

  • bind mount:使用宿主机的目录挂载在容器中, 例如: docker run -v /data/mysql:/var/lib/mysql
  • volume: volume也是绕过容器的文件系统,直接将数据写到宿主机,只不过volume是由docker管理,docker下的volume默认都在宿主机的/var/lib/docker/volumes目录下

实现

解决这个问题比较方便的方法就是docker build image时指定一下--datadir

Dockerfile

FROM mysql:5.7
RUN mkdir /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]

从此镜像启动的容器,数据的操作都是在容器文件系统中,这时commit就会保留数据

点赞(2)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部