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 私有化仓库就完成了!

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1天前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第20天】 在微服务架构日益普及的今天,Docker作为其重要的实现技术之一,承载着大量应用的运行。然而,随之而来的是对于容器健康状态、资源使用情况以及性能指标的监控需求急剧增加。本文旨在探讨构建一个高效且稳定的Docker容器监控体系,不仅涵盖了监控工具的选择与配置,还详细阐述了监控数据的分析与处理流程。通过精心设计的监控策略和实时响应机制,我们能够确保系统的稳定性,并及时发现及处理潜在的问题。
|
4天前
|
Kubernetes 持续交付 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【5月更文挑战第17天】在当今云计算和微服务架构的大潮中,Docker容器化技术和Kubernetes容器编排系统成为了后端开发领域的热门技术栈。本文将探讨如何通过Docker和Kubernetes的结合使用来构建一个高效、可扩展且易于管理的微服务环境。我们将从基础概念出发,深入到实际操作层面,最后讨论这种组合对持续集成和持续部署(CI/CD)流程的影响,旨在为开发者和企业提供一种可靠的后端服务解决方案。
|
6天前
|
存储 前端开发 JavaScript
基于 GitHub Workflow和 Docker 构建 NextJS
基于 GitHub Workflow和 Docker 构建 NextJS
9 0
|
6天前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第14天】 在现代微服务架构中,Docker容器作为应用部署的基本单元,其运行状态的监控对于保障系统稳定性和性能至关重要。本文将探讨如何构建一个高效且稳定的Docker容器监控体系,涵盖监控工具的选择、关键指标的采集、数据可视化以及告警机制的设计。通过对Prometheus和Grafana的整合使用,实现对容器资源利用率、网络IO以及应用健康状态的全方位监控,确保系统的高可用性和故障快速响应。
|
6天前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第13天】在微服务架构和容器化部署日益普及的背景下,对Docker容器的监控变得尤为重要。本文将探讨一种构建高效稳定Docker容器监控体系的方法,通过集成Prometheus和cAdvisor工具,实现对容器资源使用情况、性能指标和运行状态的实时监控。同时,结合Grafana进行数据可视化,为运维人员提供直观的分析界面,以便及时发现和解决潜在问题,保障系统的高可用性和稳定性。
31 6
|
6天前
|
运维 安全 API
构建高效自动化运维体系:Ansible与Docker的协同实践
【5月更文挑战第13天】在现代IT基础设施管理中,自动化运维已成为提升效率、确保一致性和降低人为错误的关键。本文通过深入探讨Ansible和Docker的集成实践,揭示了如何构建一个灵活、可扩展且高效的自动化运维体系。我们将从理论到实践,展示如何利用这两种技术实现自动化部署、管理和扩展应用服务,以及它们如何帮助运维团队应对快速变化的业务需求和复杂的IT环境。
30 1
|
6天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
6天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
6天前
|
算法 计算机视觉 Docker
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
|
6天前
|
开发框架 安全 网络安全
【Docker 专栏】Docker 多平台应用构建与部署
【5月更文挑战第8天】Docker作为一种关键的容器化技术,简化了多平台应用的构建与部署。它提供一致的运行环境,确保应用在不同平台无缝运行;通过分层构建机制加速镜像创建,提升开发效率。Docker的可移植性、高效部署及资源利用率是其主要优势。流程包括开发环境准备、构建镜像、测试验证及部署。然而,面临操作系统差异、网络安全和资源限制等挑战,需注意安全、版本管理和性能优化。Docker在多平台场景的应用将持续发挥价值。
【Docker 专栏】Docker 多平台应用构建与部署