写在前面
前一段时间准备使用 Docker 模拟一下现有项目的线上生产环境, 搭建过程还算顺利,
使用的 docker image 有以下这些:
- centos
- node 业务逻辑层
- redis 数据缓存层
- mongodb/mysql 数据持久化层, 可动态切换数据库类型
- nginx 做基于域名的虚拟主机转发
1) elasticsearch
1) kibana
1) logstash
由于下载源在国外网速很慢, 甚至很多已经被墙, 开始在单机测试的时候, 软件就下载了两天之久.
现在要将服务多机部署, 解决方案:
- 重新下载一次现有的 image 包
- 使用国内第三方加速源
- 使用 save/load 导出导入到另一台机器
- 构建私有 Registry
重新下载肯定不现实, 国内第三方和国外官方源都有限支持私有项目(一些工程不能公有开源),
save/load 方法当出现较多包时管理麻烦, 较好的解决方案就是构建私有 Registry.
国内一些第三方加速 & 第三方服务托管
时速云: https://hub.tenxcloud.com
数人云: http://www.dataman-inc.com/
灵雀云: http://www.alauda.cn/ & https://hub.alauda.cn/
…
打包原有已下载 images
tar
/ \
save/ export\
/load \import
/ commit \
image -------- container
run
- 镜像转成容器:sudo docker run imagename01
- 容器转成镜像:sudo docker commit
imagename01 - 容器转成文件:sudo docker export
> /home/export.tar - 镜像转成文件:sudo docker save imagename01 > /home/save.tar
- export.tar 文件转成镜像:cat /home/export.tar | sudo docker import - imagename02:latest
- save.tar 文件转成镜像:docker load < /home/save.tar
注:一般情况下,save.tar 比 export.tar 大一点点而已,export 比较小,因为它丢失了历史和数据元 metadata
构建私有 Registry
拉取 Docker 镜像
docker pull registry
基于镜像创建服务
mkdir -p /data/docker/zz-registry
docker run -d -p 5000:5000 -v /data/docker/zz-registry:/tmp/registry registry
上传已有镜像
docker tag node-dev:latest 127.0.0.1:5000/node-dev:latest
docker push 127.0.0.1:5000/node-dev
ls /data/docker/zz-registry
查看 映射目录发现已经有文件被创建了
其他机器使用私有源
docker pull ip:port/node-dev