Docker - 公共仓库



Docker公共仓库是用于存储Docker镜像的集中式位置,Docker镜像本质上是用于创建容器的模板。这些仓库通过为开发者或用户提供一种简单的方法来访问和下载预构建的软件包,从而简化了容器化应用程序的共享和分发。公共仓库对所有人开放;它们通常包含大量与各种用例相关的镜像,例如运行流行的操作系统(如Ubuntu或CentOS)或复杂的软件栈(如WordPress或Node.js)。

Docker Hub是公共仓库的最佳示例,它是Docker的默认注册表。该仓库托管着大量的官方和社区贡献的镜像,可以轻松地将它们拉取并在任何用户的系统上运行。公共仓库促进了协作,并通过允许人们共享预配置的环境以及库和许多其他强大的工具来加快软件开发速度。

Docker公共仓库与私有仓库

以下是突出显示Docker私有仓库和公共仓库之间关键区别的一对一比较。

特性 公共仓库 私有仓库
可见性 任何人都可以访问 仅授权用户可访问
访问控制 无细粒度访问控制 细粒度访问控制(团队和角色)
成本 免费使用 通常需要订阅才能获得更多存储空间和功能
用途 非常适合开源项目和共享 非常适合专有项目和敏感项目
隐私 镜像公开可见 镜像对公众隐藏
安全 对谁能访问和使用镜像的控制较少 通过受限访问增强安全性
协作 对社区协作开放 仅限于指定的协作者
可扩展性 免费存储空间有限 按计划提供可扩展的存储选项

流行的Docker公共仓库

在本节中,让我们看一下三个最突出和最广泛使用的公共Docker仓库。

Docker Hub

Docker Hub是Docker的默认公共注册表。它是使用最广泛的仓库,包含大量来自知名厂商的官方镜像和大量社区贡献的镜像。

主要功能

  • 大型镜像仓库 − 它提供了一个庞大的Docker镜像仓库,包括流行软件的官方镜像和各种社区贡献的镜像。
  • 官方镜像 − 提供经过精心挑选的高质量镜像子集,这些镜像由软件供应商自己维护和更新。
  • 自动化构建 − 它提供了自动化构建的功能,您可以一旦源代码仓库发生更改就触发构建。
  • 组织和团队 − 通过创建组织和管理团队的细粒度功能来启用协作和访问控制。
  • Webhooks − 这将允许webhooks,以便可以与外部服务和工具进行日常集成。

Red Hat Quay

Red Hat Quay是另一个流行的企业级容器注册表,它是一个安全且可扩展的平台,可以存储、分发和管理容器化镜像。

主要功能

  • 安全性和合规性 − 它提供了一些强大的安全功能,包括漏洞扫描、镜像签名和基于角色的访问控制。
  • 企业级可扩展性 − 专为高可用性和大规模容器部署的需求而设计。
  • 镜像扫描和漏洞分析 − 通过与Clair集成,它支持全面的镜像扫描和漏洞分析。
  • 地理复制 − 它支持地理复制,这有助于灾难恢复并提高不同区域的性能。
  • 与Red Hat生态系统的集成 − 它可以轻松地与Red Hat生态系统中的其他产品和服务集成。

GitHub容器注册表

GitHub容器注册表是一个跨GitHub的完全集成的容器注册表,便于在靠近您的源代码的地方存储和共享容器镜像。

主要功能

  • 与GitHub紧密集成 − 它可以帮助您轻松管理容器镜像以及代码库。
  • 对公共镜像的匿名访问 − 它允许匿名访问公共镜像,任何人都可以轻松访问。
  • 细粒度权限 − 提供细粒度权限来精确管理谁可以访问您的镜像。
  • 自动化构建 − 只要您的代码在GitHub仓库中发生更改,就会自动构建。
  • 熟悉的界面 − 一个类似于GitHub的熟悉界面来管理您的容器镜像。

用于操作公共仓库的Docker命令

Docker有很多命令可以用来操作公共仓库。使用这些命令,您可以轻松地在命令行中创建、构建、拉取、标记和推送Docker镜像到仓库。由于Docker Hub是最常用的公共仓库,我们将使用它来演示与仓库交互的重要Docker命令。

创建Dockerfile

在构建镜像之前,您需要创建一个Dockerfile,它本质上只是一个包含创建Docker镜像的指令或步骤的文本文件。

# Example Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html
CMD ["nginx", "-g", "daemon off;"]
Creating a Dockerfile

在这里,我们从仓库中拉取最新的已标记的Ubuntu镜像,安装nginx并更新操作系统,将html文件复制到/var/www/html位置,并运行nginx命令。

构建Docker镜像

您可以使用以下docker build命令从Dockerfile构建Docker镜像。

$ docker build -t my-nginx-image 
Building the Docker Image

在上面的命令中,我们从当前位置(由末尾的点指定)的Dockerfile构建Docker镜像。

创建Docker Hub账户

要操作和使用Docker Hub公共仓库,您需要在Docker Hub创建一个账户。

登录Docker Hub

创建账户后,您需要通过命令行登录,然后才能将镜像推送到Docker Hub。

$ docker login
Logging into Docker Hub

这将提示您验证您的登录凭据。

标记Docker镜像

标记Docker镜像可以更容易地识别和管理多个版本的Docker镜像。标记格式为用户名/仓库名:标记。

$ docker tag my-nginx-image myusername/my-nginx-image:latest
Tagging the Docker Image

在上面的命令中,我们已经用标记myusername/my-nginx-image:latest标记了我们的my-nginx-image。您可以使用“docker images”命令列出您本地现在所有的镜像。

将Docker镜像推送到Docker Hub

要将镜像推送到Docker Hub,您可以使用docker push命令。

$ docker push myusername/my-nginx-image:latest
Pushing the Docker Image to Docker Hub

从Docker Hub拉取Docker镜像

要从Docker Hub拉取镜像,您可以使用docker pull命令。

$ docker pull myusername/my-nginx-image:latest
Pulling a Docker Image from Docker Hub

从镜像运行Docker容器

如果要从已拉取的镜像运行容器,可以使用docker run命令启动一个来自该镜像的容器。

$ docker run -d -p 80:80 myusername/my-nginx-image:latest
Running a Docker Container from the Image

上面的命令以分离模式运行Docker容器,并将Docker容器的80端口连接到主机机的80端口。这将允许您从本地浏览器访问在容器中运行的nginx服务器页面。

列出Docker镜像

为了列出您本地机器上的所有Docker镜像,您可以使用docker images命令。

$ docker images
Listing Docker Images

删除Docker镜像

要从本地机器删除Docker镜像,可以使用docker rmi命令。

$ docker rmi myusername/my-nginx-image:latest
Removing Docker Images

我们可以将公共Docker仓库用于生产应用程序吗?

虽然公共Docker仓库使用方便,并且拥有大量的镜像选择,但将其用于生产环境应用程序存在风险,因为它们可能包含未经测试或不安全的镜像,这可能会使您的应用程序容易受到安全威胁。通常建议您在生产环境中自行构建和维护镜像,并在适当测试后确保它们符合组织的安全标准。但是,在开发过程中搜索基础镜像或不同技术时,公共仓库会很有用。

结论

本章讨论了如何使用Docker公共仓库。我们了解了创建、标记、拉取、推送和运行容器化应用程序的命令。我们还了解了流行的Docker公共仓库以及每个仓库提供的功能。本指南中概述的命令和流程提供了一个全面的框架,用于利用Docker的力量来促进容器化。

广告