解决docker镜像失效的方法😎
# 起因
前几个星期在更新博客、重新部署项目时,docker构建拉取镜像始终不能成功。我就纳了闷了,明明只是多了几篇文章,配置也都没改,怎么之前行现在就不行了呢?难道是docker坏了?
经过一番搜索才发现,今年6月份,由于神秘力量,国内的公开docker镜像源基本已经下架了。因为服务器无法正常部署,那段时间又刚好在准备毕业答辩,博客的事情就先鸽了,如今毕业的适宜已经处理完啦,那就来着手解决一下docker镜像的问题吧。
# 上海交大镜像源
# 中科大镜像源
阿里的镜像源也是,我之前用的是这个
# 解决方法
一位技术大佬写了一个叫docker_image_pusher的开源项目,可以利用Github Action将国外的Docker镜像转存到阿里云的私有仓库,这样国内的服务器就可以访问和使用了。我们来看看怎么实现
# 创建阿里云私有仓库
先登陆阿里云,进入阿里云的容器镜像服务,准备新建一个个人实例
然后新建一个命名空间
上面这两步应该会让你设置密码和命名空间的名称,这个先记录一下,后面要用到
点击访问凭证,会显示用户名和仓库地址,这个也记录一下,后面要用到
# Fork项目
接下来就要去forkgithub的项目docker_image_pusher了,它能够帮忙将国外的Docker镜像转存到阿里云的私有仓库。
项目地址:https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Ftech-shrimp%2Fdocker_image_pusher
Fork一下项目
然后到fork后自己的项目中,进到setting > Secret and variables > Actions > New Repository secret,准备配置环境变量
点击new repository secret,依次将之前记录的信息填入 ALIYUN_NAME_SPACE: 命名空间 ALIYUN_REGISTRY: 仓库地址 ALIYUN_REGISTRY_PASSWORD: 密码 ALIYUN_REGISTRY_USER:用户名
完成后再切到code,编辑images文件
在文件里面输入想要拉取的镜像,然后点击commit
提交后就会自动开始拉取镜像了,切到action,action里面会显示正在运行,成功的话显示是这样
这样镜像就已经转存到阿里云的私有仓库了
# 查看镜像
回到阿里云,点击镜像仓库,就能够看到刚刚转存进去的镜像了
点击镜像名称,可以看详细的镜像信息
# 拉取阿里云私有仓库镜像
按照镜像信息里面的操作,把私有仓库的镜像拉到本地进行使用
登陆云服务器后,输入
docker login --username=xxxxxx registry.cn-guangzhou.aliyuncs.com
登陆成功后输入
docker pull registry.cn-guangzhou.aliyuncs.com/moyuu/node:[镜像版本号]
我这里用的是node:16-alpine,所以输入
docker pull registry.cn-guangzhou.aliyuncs.com/moyuu/node:16-alpine
输入完后镜像就拉取到本地了
# 配置docker file
接下来要配置使用本地的镜像,以咱们博客网站的dockerfile为例子~
FROM registry.cn-guangzhou.aliyuncs.com/moyuu/node:16-alpine
WORKDIR /project
COPY package*.json /project/
RUN npm install
COPY . /project
RUN npm run build
FROM registry.cn-guangzhou.aliyuncs.com/moyuu/nginx:1.21.6
COPY /project/docs/.vuepress/dist /usr/share/nginx/MoyuuBlog
COPY /project/nginx.conf /etc/nginx/conf.d/nginx.conf
将对应的镜像改为本地docker镜像的地址就可以啦,然后输入
docker build -t moyuu-blog .
开始构建镜像,完成后输入
docker run -itd -p 8085:3000 --name moyuu-blog-container moyuu-blog
创建容器,这样项目就部署成功啦
# 总结
由于不可抗力导致无法拉取docker镜像,网站也停了好久,不过问题总算解决了,博客网站也重新上线啦,以后还会不定期总结工作学习过程中遇到的知识,希望也能对大家有所帮助