前言
默认情况下 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就会保留数据
发表评论 取消回复