Ryan Shang

生死看淡,不服就干

0%

Docker镜像源问题及Docker数据持久化

一、背景

最近需要进行一些测试环境的迁移,设计到一些docker的迁移,发现了一个镜像源的问题。另外,也发现之前使用上有没有做数据持久化,导致每次重新部署,数据都要清空,不是很方便,趁着这次机会,记录下mysql、redis、mongo在docker中的数据持久化。

二、Docker镜像源问题

一直使用docker,为了加速,使用的都是docker的镜像源,在/etc/docker/daemon.json中配置:

1
2
3
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}

这样可以加速镜像的下载过程,但是今天在迁移时候发现,在镜像下载时,不携带任何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
2
3
# bind 127.0.0.1 -::1 # 注释掉这行以正常连接容器内的redis
requirepass xxxxxx # 连接redis的密码
appendonly yes # 开启持久化

然后使用:

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