一、背景
最近需要进行一些测试环境的迁移,设计到一些docker的迁移,发现了一个镜像源的问题。另外,也发现之前使用上有没有做数据持久化,导致每次重新部署,数据都要清空,不是很方便,趁着这次机会,记录下mysql、redis、mongo在docker中的数据持久化。
二、Docker镜像源问题
一直使用docker,为了加速,使用的都是docker的镜像源,在/etc/docker/daemon.json
中配置:
1 | { |
这样可以加速镜像的下载过程,但是今天在迁移时候发现,在镜像下载时,不携带任何tag,正常来说应该是下载lastest标签,但是上面的镜像源,lastest标签并不是最新的镜像。
查阅资料:阿里云-官方镜像加速
里面提到:
1 | 根据Docker公司政策,2020年11月01日起将逐步向Docker Hub匿名和免费用户实施速率和拉取请求次数限制。ACR镜像加速器无法保证一定拉取到latest最新的镜像版本,建议您指定镜像版本拉取。关于Docker Hub拉取请求次数限制的详细介绍,请参见Download rate limit。 |
之前的使用中一直没有注意,这次在拉取一个镜像时,发现因为版本不对导致的报错,才发现这个问题。解决方法时拉取镜像时指定最新的版本号即可。
三、数据持久化
先创建/home/ryan/Docker
文件夹(根据自己的实际情况调整路径),用于储存docker相关的数据。
1. mysql
先创建/home/ryan/Docker/mysql
文件夹,用于储存mysql相关的数据。
创建/home/ryan/Docker/mysql/conf
和/home/ryan/Docker/mysql/data
两个文件夹。
然后使用:
1 | docker run -itd --name mysql --restart=always -p 3306:3306 -v /home/ryan/Docker/mysql/conf:/etc/mysql/conf.d -v /home/ryan/Docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.3.0 |
如果是数据持久化后,删除容器重建容器,则不再需要-e MYSQL_ROOT_PASSWORD=123456
参数,使用之前的账户密码就可以。
2. redis
先创建/home/ryan/Docker/redis
文件夹,用于储存redid相关的数据。
创建/home/ryan/Docker/redis/redis.conf
文件和/home/ryan/Docker/redis/data
文件夹。
其中redis.conf的内容可以参考Redis configuration,找到对应版本的配置文件,复制到/home/ryan/Docker/redis/redis.conf
文件中。修改其中部分配置(以7.2版本为例):
1 | # bind 127.0.0.1 -::1 # 注释掉这行以正常连接容器内的redis |
然后使用:
1 | docker run --restart=always -p 6379:6379 --name redis -v /home/ryan/Docker/redis/redis.conf:/etc/redis/redis.conf -v /home/ryan/Docker/redis/data:/data -d redis:7.2.4 redis-server /etc/redis/redis.conf --appendonly yes |
3. mongo
先创建/home/ryan/Docker/mongo
文件夹,用于储存redid相关的数据。
创建/home/ryan/Docker/mongo/data
文件夹。
然后使用:
1 | docker run --name mongo -p 27017:27017 -v /home/ryan/Docker/mongo/data:/data -d mongo:6.0.13 |