Docker的数据持久化

默认情况下,在运行中的容器里创建的文件,被保存在一个可写的容器层:

  • 如果容器被删除了,则数据也没有了

  • 这个可写的容器层是和特定的容器绑定的,也就是这些数据无法方便的和其它容器共享

Docker主要提供了两种方式做数据的持久化

  • Data Volume, 由Docker管理,(/var/lib/docker/volumes/ Linux), 持久化数据的最好方式

  • Bind Mount,由用户指定存储的数据具体mount在系统什么位置

1.Data Volume

以下的示例程序每隔一分钟将时间打印到txt文件中

//Dockerfile
FROM alpine:latest
RUN apk update
RUN apk --no-cache add curl
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-amd64 \
    SUPERCRONIC=supercronic-linux-amd64 \
    SUPERCRONIC_SHA1SUM=048b95b48b708983effb2e5c935a1ef8483d9e3e
RUN curl -fsSLO "$SUPERCRONIC_URL" \
    && echo "${SUPERCRONIC_SHA1SUM}  ${SUPERCRONIC}" | sha1sum -c - \
    && chmod +x "$SUPERCRONIC" \
    && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
    && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
COPY my-cron /app/my-cron
WORKDIR /app

VOLUME ["/app"] //持久化

# RUN cron job
CMD ["/usr/local/bin/supercronic", "/app/my-cron"]

//my-cron
*/1 * * * * date >> /app/test.txt

 通过以下方式创建镜像以及验证是否持久化成功。

★使用-v参数时,dockerfile不写入volume也可实现数据持久化

docker image build -f dockerfile-volume -t my-cron-volume . //创建镜像
docker container run -d my-cron-volume // 后台运行容器
docker container run -d -v cron-data:/app my-cron-volume // 指定volume存储地址,可以重复使用
docker container exec -it ID sh //进入交互式模式
docker container rm -f ID //删除容器后测试本地是否存储文件

docker volume ls // 显示目前的volume
DRIVER    VOLUME NAME
local     1e8dc1e5821317f7

docker volume inspect 1e8dc1e5821317f7 //将刚显示的volume name替换显示详细信息
[
    {
        "CreatedAt": "2022-09-27T22:36:00+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/1e8dc1e5821317f7/_data",
        "Name": "1e8dc1e5821317f7",
        "Options": null,
        "Scope": "local"
    }
]


ls /var/lib/docker/volumes/1e8dc1e5821317f7/_data //输入详细信息中的地址即可看到持久化的文件
my-cron  test.txt 

MySQL练习

需指定登录数据库的密码,并设定持久化位置

docker container run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -v mysql-data:/var/lib/mysql mysql:5.7 

2.Bind Mount

直接将当前目录挂载到docker中,不使用docker内部路径不生成volume。

docker container run -d -v $(pwd):/app my-cron-volume //windows使用${pwd}

使用场景  

当本地没有某种编译环境,可以直接使用docker镜像编译再将编译好的可执行文件持久化到本地

3.多个机器之间的容器共享数据

多个机器之间的容器共享数据 - Docker Tips

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值