【Docker】五 Docker Hub管理镜像

简介: Docker Hub是Docker官方维护的Docker Registry,上面存放着很多优秀的镜像。不仅如此,Docker Hub还提供认证、工作组结构、工作流工具、构建触发器等工具来简化我们的工作。 前文已经讲过,我们可使用 `docker search` 命令搜索存放在Docker Hub中的镜像。这篇文章我们来详细探讨Docker Hub的使用。
Docker Hub是Docker官方维护的Docker Registry,上面存放着很多优秀的镜像。不仅如此,Docker
Hub还提供认证、工作组结构、工作流工具、构建触发器等工具来简化我们的工作。 前文已经讲过,我们可使用 docker search 命令搜索存放在Docker Hub中的镜像。这篇文章我们来详细探讨Docker Hub的使用。

1 Docker Hub管理镜像

1.1 注册与登录

Docker Hub的使用非常简单,只需注册一个Docker Hub账号,就可正常使用了。登录后,我们可看到 Docker Hub的主⻚,如图所示。

在这里插入图片描述

我们也可使用 docker login 命令登录Docker Hub。输入该命令并按照提示输入账号和密码,即可完 成登录。例如:

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't hav
e a Docker ID, head over to https://hub.docker.com to create one.
Username: itmuch
Password:
Login Succeeded

1.2 创建仓库

点击Docker Hub主⻚上的"Create Repository"按钮,按照提示填入信息即可创建一个仓库。

在这里插入图片描述

如图,我们只需填入相关信息,并点击Create按钮,就可创建一个名为microservice-discovery-eureka 的公共仓库。

1.3 推送镜像

下面我们来将前文构建的镜像推送到Docker Hub。使用以下命令即可,例如:

docker push itmuch/microservice-discovery-eureka:0.0.1

经过一段时间的等待,就可推送成功。这样,我们就可在Docker Hub查看已推送的镜像。

2 使用Docker Registry管理镜像

很多场景下,我们需使用私有仓库管理Docker镜像。相比Docker Hub,私有仓库有以下优势:

  • 节省带宽,对于私有仓库中已有的镜像,无需从Docker Hub下载,只需从私有仓库中下载即可;
  • 更加安全;
  • 便于内部镜像的统一管理。

我们来探讨如何搭建、使用私有仓库。可使用docker-registry项目或者Docker Registry 2.0来搭建 私有仓库,但docker-registry已被官方标记为过时,并且已有2年不维护了,不建议使用。

我们先用Docker Registry 2.0搭建一个私有仓库,然后将Docker镜像推送到私有仓库。

2.1 原理图

在这里插入图片描述

2.2 搭建Docker Registry 2.0

Docker Registry 2.0的搭建非常简单,只需执行以下命令即可新建并启动一个Docker Registry 2.0。

docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

2.3 将镜像推送到Docker Registry 2.0

前文我们使用 docker push 命令将镜像推送到了Docker Hub,现在我们将前文构建的 itmuch/microservice-discovery-eureka:0.0.1推送到私有仓库。

只需指定私有仓库的地址,即可将镜像推送到私有仓库。

docker push localhost:5000/itmuch/microservice-discovery-eureka:0.0.1

执行以上命令,我们发现推送并没有成功,且提示以下内容:

The push refers to a repository [localhost:5000/itmuch/microservice-discovery-eurek a]
An image does not exist locally with the tag: localhost:5000/itmuch/microservice-di scovery-eureka

我们知道,Docker Hub是默认的Docker Registry,因此,itmuch/microservice-discovery-eureka:0.0.1 相当于docker.io/itmuch/microservice-discovery-eureka:0.0.1。因此,要想将镜像推送到私有仓库,需 要修改镜像标签,命令如下:

docker tag itmuch/microservice-discovery-eureka:0.0.1 localhost:5000/itmuch/microse rvice-discovery-eureka:0.0.1

修改镜像标签后,再次执行以下命令,即可将镜像推送到私有仓库。

docker push localhost:5000/itmuch/microservice-discovery-eureka:0.0.1

2.4 TIPS

  1. docker-registry的GitHub:https://github.com/docker/docker-registry
  2. Docker Registry 2.0的GitHub:https://github.com/docker/distribution
  3. 本节中“私有仓库”表示私有Docker Registry,并非Docker中仓库的概念。
  4. Docker Registry 2.0需要Docker版本高于1.6.0。
  5. Docker Registry 2.0能够满足我们大部分场景下的需求,但它不包含界面、用户管理、权限控制等 功能。如果想要使用这些功能,可使用Docker Trusted Registry。

3 使用Nexus管理Docker镜像

3.1 Nexus简介

Nexus是一个多功能的仓库管理器,是企业常用的私有仓库服务器软件。目前常被用来作为Maven私服、Docker私服。本文基于 Nexus 3.5.2-01 版本进行讲解。

3.2 Nexus下载

前往:https://www.sonatype.com/download-oss-sonatype ,根据操作系统,下载对应操作系统下的安装包即可。

3.3 安装

Nexus在不同系统中安装略有区别,但总体一致。下面以在Linux系统中的安装为例说明:

  • 创建一个Linux用户,例如:nexus
useradd nexus
  • 解压Nexus安装包,为将解压后的文件设置权限,并修改属主为nexus用户
chmod -R 755 *
chown -R nexus:nexus *
  • 将目录切换到 $NEXUS_HOME/nexus-3.5.2-01/bin 目录
  • 需改 nexus.rc 文件,将其内容改为:
run_as_user="nexus"

表示使用nexus用户启动Nexus。

  • 执行如下命令,查看Nexus为我们提供哪些命令。
./nexus --help

可显示类似如下的内容:

Usage: ./nexus {start|stop|run|run-redirect|status|restart|force-reload}
  • 指定如下命令,即可启动Nexus
./nexus start

稍等片刻,Nexus即可成功启动。

3.4 账户

Nexus提供了默认的管理员账户,账号密码分别是admin/admin123。用户可自行修改该默认账号密 码。

3.5 创建Docker仓库

  • 访问http://localhost:8081 并登录
  • 点击“Create repository”按钮,创建仓库。Nexus支持多种仓库类型,例如:maven、npm、
    docker等。本文创建一个docker仓库。一般来说,对于特定的仓库类型(例如docker),细分
    三类,分别是proxy、hosted、group,含义如下:
  • hosted,本地代理仓库,通常我们会部署自己的构件到这一类型的仓库,可以push和pull。
  • proxy,代理的远程仓库,它们被用来代理远程的公共仓库,如maven中央仓库,只能pull。
  • group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组,只能 pull。

本文创建一个hosted类型的仓库 配置仓库,如图,填入如下结果:

在这里插入图片描述

3.6 Docker配置

下面,我们需要为Docker指定使用Nexus仓库。

  • 修改 /etc/docker/daemon.json ,在其中添加类似如下的内容。
{
  "insecure-registries" : [
    "192.168.1.101:8082"
  ]
... }
  • 重启Docker

3.7 登录私有仓库

docker login 192.168.1.101:8082

即可登录私有仓库。然后,我们就可进行pull、push操作了。

3.8 容器启动Nexus

docker run -d -p 8081:8081  --name nexus sonatype/nexus3
相关文章
|
11天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
4天前
|
缓存 Linux 开发工具
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
|
5天前
|
Java Maven Docker
Docker化Spring Boot3应用:从镜像构建到部署
本文介绍了如何在Linux上通过命令行构建和运行Spring Boot 3服务的Docker镜像。首先,基于Ubuntu创建包含JDK 21的基础镜像,然后使用Maven打包Spring Boot应用。接着,构建服务镜像,将应用和依赖添加到镜像中,并设置工作目录和暴露端口。最后,利用docker-compose部署服务,挂载宿主机目录以方便更新静态文件。Docker简化了应用部署,确保了不同环境的一致性。
43 2
Docker化Spring Boot3应用:从镜像构建到部署
|
9天前
|
存储 Linux Docker
CentOS7修改Docker容器和镜像默认存储位置
CentOS7修改Docker容器和镜像默认存储位置
|
11天前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
53 2
如何删除 Docker 镜像、容器和卷?
|
11天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
11天前
|
Java 数据库连接 Docker
【Docker 专栏】Docker 容器内环境变量的管理与使用
【5月更文挑战第9天】本文介绍了Docker容器中环境变量的管理与使用,环境变量用于传递配置信息和设置应用运行环境。设置方法包括在Dockerfile中使用`ENV`指令或在启动容器时通过`-e`参数设定。应用可直接访问环境变量或在脚本中使用。环境变量作用包括传递配置、设置运行环境和动态调整应用行为。使用时注意变量名称和值的合法性、保密性和覆盖问题。理解并熟练运用环境变量能提升Docker技术的使用效率和软件部署质量。
【Docker 专栏】Docker 容器内环境变量的管理与使用
|
11天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
40 0
|
11天前
|
安全 JavaScript Docker
修改docker镜像版本,容器大小缩小10%!
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享其通过修改Docker镜像版本实现容器瘦身的技巧。将服务从`1.0.0`更新至`1.0.1`,基于Alpine版Docker镜像,容器体积减小至原来的10%。文章展示了问题背景、选择轻量级镜像的原因及步骤,包括Docker镜像版本对比、构建和启动新容器的过程,并证实功能未受影响。`file-server`更新将发布在GitHub上,期待用户试用。一起学习,每天进步!
36 2
修改docker镜像版本,容器大小缩小10%!
|
11天前
|
关系型数据库 MySQL 应用服务中间件
docker镜像、容器数据卷
docker镜像、容器数据卷