docker拉取镜像问题解决
docker拉取镜像问题解决
目前很多国内的docker镜像源都不能用了,这无疑影响了开发运维的效率。本文将以实践的方式给出如何解决此类问题。
最近笔者在部署一个后台服务的时候,需要部署mysql,redis、rabbitmq等中间件。redis的部署很简单,直接安装就好了,可是mysql要复杂得多,因为涉及到要设置root账号和密码,之前这样部署,看了网上很多博客,都难以解决。但是如果用docker去部署mysql,直接就是一行命令的事情,什么账户密码数据库可以全部设置好,相当地方便,也不容易出现各种系统版本环境变量乱七八糟的问题。
但是docker部署也有一个问题,直接拉去官方仓库的镜像对于笔者这种手上暂时没有网络工具的人来说不现实,那么只能设置为国内的代理镜像源,但众所周知,国内的大学或者知名大厂的开放镜像源现在基本上不能使用了,如下图,尝试了很多。
至于阿里云上的个人镜像源加速,据我了解和使用,也是没用的,只能拉取部分镜像。如下图,有一些国内打包好的镜像可以拉取,但是很多常见的组件如Redis等都没有对应的镜像。
这里分享一个搜索技巧,对于像激活码、镜像源这种变动性很大的东西,搜索的时候最好限制一下搜索的时间范围,优先考虑那种近期发布的信息。通过搜索,笔者了解到了目前还能使用的一个镜像网站docker.unsee.tech。由于无论怎么设置镜像源(修改/etc/docker/daemon.json
),直接使用docker pull mysql
这种方式去拉取,实际访问的网站都不是自己设置的代理镜像源,导致无法正常拉取,解决这类问题的方法是直接使用docker pull {镜像源}/{镜像}:{版本}
的方式,如下图所示:
然后使用docker tag
命令重命名,方便后续操作。
然后以下给出所有相关的docker起容器并且设置端口映射和设置账户密码的命令,实测有效:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -p 3306:3306 -d mysql
docker run --name redis -d -p 6379:6379 -e REDIS_PASSWORD=my-secret-pw redis
docker run --name rabbitmq -d -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=myuser -e RABBITMQ_DEFAULT_PASS=mypassword rabbitmq:3-management
然后mysql创建数据库表很也很简单,将sql脚本通过docker cp
命令拷贝到对应容器中,然后进入容器,输入mysql -urrot -p
进入mysql,通过source
命令执行脚本完成创建数据库表的工作。
至于rabbitmq消息队列的配置,由于设置了端口映射,可以直接在容器所在宿主机通过浏览器访问对应的管理端口,输入命令中设置的账号密码,进入管理系统,设置交换机和队列。