首页 > 技术文章 > HM-SpringCloud微服务系列3.5【Docker镜像仓库】

yppah 2022-01-21 00:28 原文

1 常见镜像仓库服务

image

2 搭建私有镜像仓库

2.1 简化版镜像仓库(不演示)

  • 搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
  • 官网地址:https://hub.docker.com/_/registry
  • Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
  • 搭建方式比较简单,命令如下(镜像仓库服务默认5000端口):
    docker run -d \
    	--restart=always \
    	--name registry	\
    	-p 5000:5000 \
    	-v registry-data:/var/lib/registry \
    	registry
    
  • 命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
  • 访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像。

2.2 带有图形化界面的镜像仓库(演示)

2.2.1

注意:在此2.2之前需要先进行2.3配置Docker信任地址

带有图形化界面的版本不是docker官方的,是第三方开发的,属于官方简化版镜像仓库额外的服务。
使用DockerCompose部署带有图象界面的DockerRegistry,命令如下(官方简化版镜像仓库服务&第三方图像化界面服务的组合部署):

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=haifei私有docker镜像仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

2.2.2

"insecure-registries":["http://192.168.2.109:8080"]
image
image

2.2.3

  1. 在/tmp/目录下新建文件夹registry-ui
    image
  2. 在/tmp/registry-ui/目录下新建docker-compose.yml
    image
  3. 利用filezilla工具将上面的部署命令粘贴进docker-compose.yml
    image
    image
    image
    image
  4. 通过命令docker-compose up -d部署服务
    image
  5. 通过命令docker-compose logs -f查看日志
    image
    可以看到已经启动成功了
    现在本地浏览器远程访问http://192.168.2.109:8080/测试一下
    image
    image

2.3 配置Docker信任地址

我们的私服采用的是http协议,默认不被Docker信任,所以需要做如下配置:

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://YourIp:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

3 推送 & 拉取镜像

3.1 tag

  • 推送镜像到私有镜像服务必须先tag
  • 重新tag本地镜像,名称前缀为私有仓库的地址http://YourIp:8080/
  • 命令:docker tag nginx:latest 192.168.2.109:8080/nginx:1.0,此处以nginx为例
  • 含义:将原先的nginx:latest重命名为新的192.168.2.109:8080/nginx:1.0
    image
    image
  • 可以看到192.168.2.109:8080/nginx:1.0nginx:latest的ID一样,所以两者实际上是一样的;也可以说该镜像只有一份实物,但有两个名字

3.2 向镜像仓库推送镜像

  • 命令:docker push 192.168.2.109:8080/nginx:1.0
    image
    image
    image

3.3 从镜像仓库拉取镜像

  • 命令:docker pull 192.168.2.109:8080/nginx:1.0
  • 删除原有的192.168.2.109:8080/nginx:1.0镜像(实际是nginx:latest镜像的复制)
    image
  • 删除nginx:latest镜像(期间发现了依赖于该镜像的容器mn,先删除mn再删除nginx)
    image
    image
    image
  • 拉取新镜像
    image

4 小结

image

推荐阅读