使用公共存储库托管 Docker 镜像

Docker 是一个软件平台,用于创建隔离的虚拟化环境,以便轻松构建、部署和测试应用程序。在本教程中,我们将学习如何在 Docker Hub 上托管 Docker 镜像。Docker Hub 是 Docker 提供的托管仓库服务,用于查找和共享镜像。就像 GitHub 允许托管应用程序代码一样,DockerHub 允许托管应用程序镜像。

Docker 镜像

为了运行这些应用程序,我们首先需要创建当前应用程序状态的镜像。镜像有时也称为项目的快照。镜像本质上是只读的,由包含源代码、库、依赖项、工具以及应用程序运行所需的其他文件的文件组成。Docker镜像是一个只读模板,其中包含一组用于创建可在 Docker 平台上运行的容器的指令

什么是 Docker Registry?

Docker 镜像仓库是一项存储和管理 Docker 镜像的服务。Docker 镜像仓库可以由第三方托管,可以是公共镜像仓库,也可以是私有镜像仓库。以下是一些 Docker 镜像仓库的示例:

Docker Hub

DockerHub 是一个容量巨大的存储区域,用于存储 Docker 容器所需的所有镜像。DockerHub 提供两种类型的镜像:私有镜像和公共镜像。

  • 公共镜像仓库:这些仓库模拟了公共架子,任何人都可以拍照。只需知道 Jenkins 持续集成服务器的名称,例如“jenkins/jenkins”。

  • 私有镜像仓库:这类存储库类似于上锁的存储空间,只有特定人员拥有密钥。如果您想允许哪些人可以查看和访问您的镜像,它们会非常方便。

  • 官方仓库:自诩为标准。它们经过安全和最佳实践检查,因此您可以放心,它们是可靠的。您只需提供镜像名称,例如“nginx”,无需提供用户名或公司信息。

  • 自动构建: DockerHub 的众多特色之一,就是它能够在源代码更新时自动生成镜像。感觉就像一个机器人在帮你做这些繁重的工作!

  • 安全扫描:就像保安检查包裹中是否存在任何隐藏的威胁一样,DockerHub也可以检查您的图像中是否存在漏洞。

使用 DockerHub 的常见操作

  • 推送镜像:您可以将本地生成的 Docker 镜像推送到 DockerHub。这样,您只需在其他机器上安装它,其他人就可以访问它。

  • 拉取镜像:可以从 DockerHub 下载镜像到本地系统。当你需要启动一个以 Docker 镜像形式提供的服务或应用程序时,这非常有用。

  • 创建仓库:您可以通过 DockerHub 设置仓库来整理您的 Docker 镜像。您可以根据需要创建私有或公共仓库。

  • 管理存储库:可以通过向私有存储库添加贡献者、编辑其描述以及更改其可见性设置(公共或私有)来控制存储库。

  • 启用自动构建:当更改发布到关联的源代码存储库(例如 GitHub)时,DockerHub 可能会自动构建 Docker 镜像。此功能使自动构建成为可能。通过这样做,您可以确保您的 Docker 镜像反映代码的最新修改。

  • 监控构建日志: DockerHub 在启动自动构建时提供构建日志,使您能够跟踪构建进度并解决任何潜在问题。

  • 安全扫描: DockerHub 可以自动扫描 Docker 镜像的已知漏洞。它提供全面的分析,列出镜像层中的所有安全漏洞,并根据严重程度进行排序。

  • 版本控制:您可以使用 DockerHub 为图像标记版本号,轻松管理应用程序或服务的不同版本。

  • 与源代码控制集成:GitHub 和 Bitbucket等源代码控制系统可以与 DockerHub 集成,使您能够根据代码更改安排构建,并确保您的 Docker 镜像始终使用您的源代码进行更新。

  • 协作: DockerHub 允许多位用户在同一个仓库上协作,从而促进团队合作。除了管理设置、拉取和推送照片之外,协作者还可以参与开发过程。

私有镜像仓库

  • 内部网络分发:您希望在公司内部分发 Docker 镜像,而无需使用互联网。这样可以保证速度和安全性。

  • 更快的 CI/CD 管道:使用本地私有镜像仓库将加速开发流程。尤其是在本地环境中,在您自己的网络内更快地拉取和推送镜像,可以加快部署速度。

  • 大型集群部署:私有镜像仓库使跨多台设备部署新镜像的过程更加精简高效。由于您不再依赖外部服务器,因此部署速度更快、可靠性更高。

  • 严格控制存储:使用私有镜像仓库时,您可以完全掌控镜像的存储位置。这对于安全性和合规性目标至关重要。

如何选择正确的镜像仓库?

以下是选择正确的容器注册表的简单方法:

  • 了解您的需求:确定您需要的收银功能。您应该选择哪种方式——现场支付还是云端支付?您的支付流程需要哪些功能?

  • 检查功能:需要关注的基本特性包括访问控制、安全扫描以及与现有工具的交互。请选择具备您所需功能的镜像仓库。

  • 安全第一:确保注册表的安全性和合规性。检查加密、访问控制以及是否符合 HIPAA 和 GDPR 等法规。

Docker 镜像仓库

Docker 仓库是具有相同名称、具有不同标签的不同 Docker 镜像的集合。标签本质上是仓库中镜像的标识符。在本教程中,我们将使用 Docker Hub 来托管我们的仓库,该仓库可供公众免费使用。

步骤 1:在 Docker Hub 上创建帐户。前往 DockerHub 并创建一个新帐户或登录到您现有的帐户。

Docker 中心

步骤 2:创建存储库(可选)

在 Docker Hub 上,您可以通过点击“创建仓库”按钮来创建一个仓库。为仓库命名并添加描述,并确保其标记为public。托管公共仓库时无需执行此步骤。此步骤用于托管私有仓库。

Docker 存储库

存储库名称图像小部件。

Docker Push 命令

步骤3:构建Docker镜像

现在我们将生成一个基本的快速应用程序并从中创建一个图像。

$ mkdir express-app && cd express-app   
$ npx express-generator -e

Docker 构建镜像

现在,为应用程序创建一个Dockerfile并复制内容,如下所示:

$ touch Dockerfile
FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json 
# AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 3000

CMD [ "npm", "start" ]

DockerFile

您现在可以使用 docker build 命令构建此 Dockerfile。

$ docker build -t rhythmshandlya/express-app .

Docker 构建

需要注意的一点是,由于没有指定标签名称,它将被赋予:latest标签。

步骤 4:在本地运行此图像。

$ docker run -p 3000:3000 rhythmshandlya/express-app

端口映射

步骤 5:将镜像推送到 Docker Hub。要将本地镜像推送到 Docker Hub,我们需要使用终端登录 Docker Hub。

$docker login

Docker 登录

$ docker push rhythmshandlya/express-app

Docker Push

在 DockerHub 中推送镜像

步骤 6:玩转标签。我们可以修改这个应用程序,并给它一个 0.0.1 的版本标签。

$ docker build -t rhythmshandlya/express-app:0.0.1 .   
$ docker push rhythmshandlya/express-app:0.0.1

输出:

已推送标签的图像

现在我们已经将我们的图像公开,任何人都可以在他们的机器上拉取并运行它们。

$ docker pull rhythmshandlya/express-app:latest  
或  
$ docker push rhythmshandlya/express-app:0.0.1

有哪些顶级容器注册中心?

Docker Hub

数百万个 Docker 镜像托管在最大的公共容器注册中心 Docker Hub 上。它提供自动构建、镜像漏洞扫描、与 Bitbucket 和 GitHub 的交互,以及公共和私有存储库。Docker Hub 还提供官方存储库,其中包含经过安全性和最佳实践验证的镜像。

亚马逊 ECR

AWS 提供名为 Amazon ECR 的完全托管容器注册表服务。Amazon ECSAmazon EKS与其他 AWS 服务的无缝集成,方便用户在 AWS 上轻松部署容器化应用程序。ECR 提供多种功能,例如镜像管理的生命周期策略、使用 Amazon ECR Public Vulnerability Insights 进行镜像扫描以及静态加密。

Google 容器注册表 (GCR)

Google Kubernetes Engine (GKE)和其他Google Cloud Platform (GCP)服务已与 Google Cloud 的托管容器注册表服务 GCR 集成。GCR 提供的功能包括使用容器分析进行漏洞扫描、使用 IAM 角色进行访问控制以及与Google Cloud Build连接以实现自动构建。

Azure 容器注册表 (ACR)

Azure Kubernetes 服务 (AKS)及其他 Azure 服务与 Microsoft 的托管容器注册表服务 ACR 集成。高可用性地理复制、基于Azure Active Directory 的基于角色的访问控制 (RBAC)以及使用Docker Content Trust 的映像签名只是 ACR 提供的部分功能。

Harbor

Harbor 是一个开源容器镜像仓库项目,包含基于角色的访问控制、镜像复制、漏洞筛查和基于策略的镜像保存等企业级功能。Harbor 可以部署在本地或云端,并可与Kubernetes、Docker 和其他容器技术进行交互。

GitLab 容器注册表

由于GitLab集成的容器注册表与CI/CD 流水线紧密耦合,开发人员可以直接在 GitLab 中创建、测试和启动容器化应用程序。它内置容器扫描、项目权限访问控制以及图片版本控制等功能。

JFrog Artifactry

JFrog Artifactory 支持 Docker 镜像,它是一个通用的构件库管理器,也兼容Maven 、npm 和 NuGet 等其他软件包格式。Artifactory 提供复制、访问控制、元数据管理和复杂的搜索功能等功能。

Leave a Comment