Docker-06:构建仓库

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker推送阿里云仓库,以及使用Docker registry 完成私有化仓库构建

1. 目录

Docker

2. 概念

Docker 仓库类似我们的代码仓库,就是 Docker 存放镜像文件目的地。常用的 Docker 仓库有阿里云镜像仓库、 docker hub ,我们只演示阿里云镜像仓库,另外一种操作类似。在最后一个章节,我们还会展示下如何利用 Docker 官方提供的 Registry 来构建私有仓库。

3. 环境准备

我通过在 Windows 10 操作系统的虚拟机,安装的 CentOS 7.0CentOS 是最小安装版,安装后需要将服务器内核和补丁全部更新一遍。

CentOS 安装 Docker 后,可以查看 Docker 版本为 20.10.17 ,截止当前是 Docekr 社区版当中的最新版本。

  • Windows 10 Home 64bit
  • VMware Workstation Pro 16
  • CentOS 7.0
  • docker 20.10.17

4. 构建阿里云中央仓库

此处说明都是基于已有 Aliyun 账号的前提下,还没有的话,自行申请。

4.1. 阿里云操作

  • 登录阿里云

https://cr.console.aliyun.com/

  • 选择个人实例

20220827225846

20220827225920

  • 创建命名空间

20220827230017

20220827230034

20220827230113

  • 设置访问凭证

20220827232001

20220827232031

  • 创建镜像仓库

20220827230223

20220827230338

点击 创建镜像仓库 后,选择 本地仓库

20220827230444

20220827230749

此后,我们对照着 操作指南 一步步操作,即可完成

4.2. 容器操作

4.2.1. 登录阿里云Docker Registry


docker login --username=wcngs@qq.com registry.cn-hangzhou.aliyuncs.com

20220827232059

4.2.2. 将镜像推送到Registry

这一步骤应该在拉取镜像之后,因为我这是新建仓库,所有没有镜像可被拉取的,选择直接推一个镜像上去。


docker tag etcd registry.cn-hangzhou.aliyuncs.com/rothschil/local_namespace:v1

docker push registry.cn-hangzhou.aliyuncs.com/rothschil/local_namespace:v1

20220827234947

20220827235012

4.2.3. 从Registry中拉取镜像


docker pull registry.cn-hangzhou.aliyuncs.com/rothschil/local_namespace:v1

5. 构建私有仓库

私有仓库是为了弥补很多场景下,内部安全考虑以及使用外部仓库不便捷的情况下,才考虑使用自行构建私有仓库。构建私有仓库的技术来源于 Docker Registry

5.1. Docker Registry

5.1.1. 启动

操作指令如下:


docker run -d -p 5000:5000 --restart=always --name registry -v /data/registry:/var/lib/registry registry:2
  • -d : 以守护进程方式运行
  • -p :将私有镜像仓库容器内部默认暴露的5000端口映射到宿主机的5000端口
  • --restart=always :容器退出时总是重启容器
  • --name registry :容器命名为 registry
  • -v /data/registry:/var/lib/registry :将容器默认存储路径 /var/lib/registry 挂载到宿主机的 /data/registry 目录
  • registry:2 : 使用 Docker RegistryV2 版本

20220828092929

5.1.2. 重命名

在推送私有镜像仓库之前,对镜像命名必须符合 IP:Port/repository 格式,我们对需要推送的镜像进行重命名。


docker tag boot_myapp:latest localhost:5000/boot_myapp

5.1.3. 推送


docker push localhost:5000/boot_myapp

20220828093434

5.1.4. 验证

我上面是推送在虚拟机上,所以在宿主机浏览器中访问虚拟机的端口 http://192.168.147.128:5000/v2/boot_myapp/tags/list192.168.147.128 是我虚拟机地址。


http://localhost:port/v2/${images_name}/tags/list

20220828093726

最后一步再查看宿主机的挂载磁盘 /data/registry ,我们的镜像已经发布到本地仓库中了。

20220828093856

5.2. 配置身份鉴权<可选>

上一节我们说到了,我们如何创建一个本地仓库,以及发布一个镜像到我们的本地仓库,这里存在一个问题,就是这个仓库是私有的,却是任何人都可以访问,没有到身份鉴权,所以在实际运用过程中,我们会对私有仓库添加一套身份鉴权操作,保护我们私有仓库的安全。

因为涉及到身份安全,需要一套安全证书,这里使用 openssl

5.2.1. 生成签名证书


mkdir -p /usr/local/registry/certs

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt
  • -openssl req: 创建证书签名请求等功能;
  • -newkey : 创建CSR证书签名文件和RSA私钥
  • -rsa:2048: 指定创建的RSA私钥长度为2048;
  • -nodes : 对私钥不进行加密;
  • -sha256: 使用SHA256算法;
  • -keyout: 创建的私钥文件名称及位置;
  • -x509: 自签发证书格式;
  • -days: 证书有效期;
  • -out: 指定CSR输出文件名称及位置;

按照提示录入证书的基本信息即可!

20220828094737

5.2.2. 创建用户名

  • 创建存储鉴权密码文件目录

mkdir -p /usr/local/registry/auth
  • 安装 httpd 已安装的则略过本步骤

yum install -y httpd
  • 创建用户和密码

htpasswd -Bbn root 123456 > /usr/local/registry/auth/htpasswd

5.2.3. 删除Docker Registry

此前用 Docker Registry 创建的容器删除,因为此前没有带身份鉴权。


docker rm -f ${CONTAINER ID}

5.2.4. 创建Docker Registry


docker run -id --name registry -p 5000:5000 --restart=always \
   -v /data/registry:/var/lib/registry \
   -v /usr/local/registry/certs:/certs \
   -v /usr/local/registry/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
   registry

5.2.5. 重命名和推送

使用 root/123456 创建的用户名和密码登录即可!


docker login localhost:5000

docker tag redis:4.0.10 localhost:5000/redis:4.0.10

docker push localhost:5000/redis:4.0.10

20220828100846

至此,我们的 Docker 私有化仓库就完成了!

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
10天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
16天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
85 2
|
25天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
75 7
|
24天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
57 6
|
23天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
25 4
|
24天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
33 3
|
29天前
|
jenkins 测试技术 持续交付
Docker最佳实践:构建高效的CI/CD流水线
【10月更文挑战第17天】在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为提高开发效率和软件质量的重要手段。Docker作为一种容器技术,为构建一致且隔离的开发环境提供了强有力的支撑。本文将探讨如何利用Docker来优化CI/CD流程,包括构建环境的标准化、镜像管理以及与CI/CD工具(如Jenkins、GitLab CI)的集成。
49 5
|
28天前
|
JavaScript Docker Python
下个时代的开发工具-Nix:声明式的运行环境构建器、简单场景下的docker替身
Nix 是一个独特的包管理工具和构建系统,采用声明式方法管理软件包和运行环境。它通过精确控制依赖关系和环境配置,确保软件的可重复性、隔离性和可追溯性。Nix 支持多语言开发环境,提供声明式配置、环境隔离、回滚与版本控制等核心功能,适用于复杂开发场景,有效解决依赖冲突和环境不一致问题。
|
10天前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
10天前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
38 0