在使用docker容器过程中,经常需要把docker容器中的目录挂载到宿主机中。如果容器中的目录(target)中存在数据,这个时候直接挂载到宿主机的source目录中,会发现容器target目录下的文件会丢失。
关于容器卷的使用,请参考https://zhuanlan.zhihu.com/p/597209476
docker volume create --name vol_simple
docker run -it -v vol_simple:/data ...
说明
启动容器后,容器中的/data数据会被写入到vol_simple中。测试后发现如果同时再启动一个容器挂载卷后, vol_simple中的数据不会因为新的容器的出现而发生数据改变。
vim Dockerfile
# 设置基础镜像
FROM base_image:1.0.0
# 把当前目录下的文件复制到镜像的/datatmp下
COPY data /datatmp
#制作一个docker-entrypoint.sh脚本,也可以自己写命令
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
#!/bin/sh
# 把/datatmp目录下的文件复制到/data目录下
mv /datatmp/* /data
# 启动服务...
sh java -jar app.jar
# 进入到Dockerfile所在的文件目录下(后面的 . 不要忘了)
docker build -t myapp:1.0.0 .
#/host/data是宿主机路径
docker run -it -v /host/data:/data ...
说明
每次重新docker run启动容器,都会把容器中/datatmp/*下的文件复制一遍到/data目录下