【07】循序渐进学 docker:数据持久化

写在前面的话

 

学到这里相信有心的朋友都发现问题了,我们每次都会去删掉容器,在创建新的容器。那数据怎么办?岂不删库跑路了?

就算不是数据库,假设公司有日志保留的需求,那每一次发布岂不日志都被干掉了?

 

 

Data volume

 

MySQL 镜像的官方文档如下,其中涉及到很多参数也是上面的:

https://github.com/docker-library/docs/tree/master/mysql

该配置项对应到 Dockerfile 中的关键字就是 VOLUME,后面会详细学习,以下是 MySQL 5.7 的官方 Dockerfile,看看人家是怎么写的:

https://github.com/docker-library/mysql/blob/bb7ea52db4e12d3fb526450d22382d5cd8cd41ca/5.7/Dockerfile

 

首先删除掉目前所有容器,删除所有的 volume,运行一个 MySQL 容器,并设置不需要密码:

# 删除所有容器
docker rm -f $(docker ps -aq)

# 删除所有卷
docker volume rm $(docker volume ls -q)

# 创建 MySQL 容器
docker run -d --name db1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

 

然后进入容器,登入数据库创建一个名为 hello 的库:

docker exec -it db1 /bin/sh

具体操作如图:

 

之后退出容器,再删除掉它:

docker container rm -f db1

此时查看数据卷:

docker volume ls

结果如图:

可以看到,虽然删除了容器,但是 VOLUME 中还是保留了一个卷。那这个卷怎么使用呢?

此时再度新建一个 MySQL 容器,和之前不同,这次把这个容器的卷指向这个之前的卷:

docker run -d --name db2 -v 651246525fdde44a562bace3388705562d477d28c200128a7a7af8c1e2bf11c2:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

说明:在 -v 参数后面使用了 /var/lib/mysql,这个目录来自之前的 MySQL Dockerfile 中有定义一项:VOLUME /var/lib/mysql

此时查看卷:

docker volume ls

发现并没有新加新创建的卷,进入容器查看数据库:

docker exec -it db2 /bin/sh

查看数据库结果如图:

发现之前建立的 hello 库还在,唯一有点小遗憾,那就是 VOLUME NAME 因为是随机,当然这个是可以解决的。

 

新建一个 MySQL 容器,指定 VOLUME 名称:

docker run -d --name db3 -v my-data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

查看:

docker volume ls

结果如图:

此时 VOLUME NAME 就变成自己定义的了。

 

 

Bind Mouting

 

这是数据持久化的第二种方式,相比于第一种以卷的形式存储,这种方式更适合用于前端静态文件更新,这里以 nginx 镜像为例:

docker run -d --name web1 -p 8080:80 -v /data/html:/usr/share/nginx/html nginx

进入本地宿主机 /data/html 目录,增加 index.html:

cd /data/html/
vim index.html

内容如下:

<h1>Hello world</h1>

访问测试:

 

这样实现的效果就相当于把容器里面某个指定的目录映射到宿主机本地某个目录,只需要在本地修改文件就达到了修改容器中文件的目的。

 

 

部署 Wordpress 实践

 

这里新增一个实践用于熟悉传参和数据持久化的问题。

【1】启动 MySQL 容器:

docker run -d -v wordpress-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress --name wordpress-db mysql:5.7

设置了数据库的密码和新建了一个数据库,并给数据卷做了重命名。

 

【2】启动 Wordpress 容器:

docker run -d --link wordpress-db --name wordpress-web -e WORDPRESS_DB_HOST=wordpress-db:3306 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -e WORDPRESS_DB_NAME=wordpress -p 8080:80 wordpress

具体参数可以参考:

https://github.com/docker-library/docs/tree/master/wordpress

采取 --link 的方式就行数据库连接。第一次由于需要下载,可能比较慢,完成以后访问测试:

 

 

小结

 

在本节中我们知道了数据的持久化,也接触了 Dockerfile 中一个新的关键字 VOLUME,将某个目录制作成数据卷,相当重要。

转载于:https://www.cnblogs.com/Dy1an/p/10613577.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值