Docker - 公共仓库
Docker 公共仓库是存储 Docker image 的集中式位置,这些 image 本质上是用于创建 container 的模板。这些仓库通过为开发人员或用户提供简单的方式来访问预构建的软件包并下载,从而便于分享和分发容器化应用。公共仓库对所有人开放;它们通常包含大量与各种用例相关的 image,例如运行流行的操作系统如 Ubuntu 或 CentOS,或复杂的软件栈如 WordPress 或 Node.js。
公共仓库的最佳示例是 Docker Hub,它充当 Docker 的默认 registry。此仓库托管了大量官方和社区贡献的 image,用户可以轻松地将它们拉取并在任何系统上运行。公共仓库促进了协作,并可以通过允许人们分享预配置的环境以及库和其他强大工具来加速软件开发进程。
Docker 公共仓库 vs 私有仓库
以下是一对一比较,突出了 Docker 私有仓库与公共仓库之间的关键差异。
| 特性 | 公共仓库 | 私有仓库 |
|---|---|---|
| 可见性 | 任何人都可访问 | 仅授权用户可访问 |
| 访问控制 | 无细粒度访问控制 | 细粒度访问控制(团队和角色) |
| 费用 | 免费使用 | 通常需要订阅以获得更多存储和功能 |
| 用途 | 适合开源项目和分享 | 适合专有和敏感项目 |
| 隐私 | image 公开可见 | image 隐藏不公开查看 |
| 安全性 | 对谁能访问和使用 image 的控制较少 | 通过受限访问增强安全性 |
| 协作 | 开放给社区协作 | 限制为指定协作者 |
| 可扩展性 | 免费存储空间有限 | 计划提供可扩展存储选项 |
流行的 Docker 公共仓库
在本节中,让我们来看看 3 个最著名且广泛使用的公共 Docker 仓库。
Docker Hub
Docker Hub 是 Docker 的默认公共 registry。它是最常用的仓库,包含大量来自知名供应商的官方 image 以及大量社区贡献的 image。
主要特性
- 丰富的 Image 仓库 − 它提供了一个庞大的 Docker image 仓库,包括流行软件的官方 image 和各种社区贡献的 image。
- 官方 Image − 它提供了一组精选的高质量 image,由软件供应商自行维护和更新。
- Automated Builds − 它提供 automated builds 功能,当你的源代码仓库发生变化时,可以触发构建。
- Organizations and Teams − 通过创建 organizations 和管理 teams 的细粒度功能,实现协作和访问控制。
- Webhooks − 支持 webhooks,从而实现与外部服务和工具的日常集成。
Red Hat Quay
Red Hat Quay 是另一个流行的企业级 container registry,提供了一个安全且高度可扩展的平台,用于存储、分发和管理 containerized image。
主要特性
- Security and Compliance − 它提供多种强大的安全功能,包括 vulnerability scanning、image signing 和 role-based access control。
- Enterprise-Grade Scaling − 专为高可用性和大规模 container 部署需求而设计。
- Image Scanning and Vulnerability Analysis − 通过与 Clair 的集成,支持全面的 image scanning 和 vulnerability analysis。
- Geo-replication − 支持 geo-replication,有助于灾难恢复并提升不同区域的性能。
- Integration with the Red Hat Ecosystem − 轻松集成到 Red Hat 生态系统中的其他产品和服务。
GitHub Container Registry
GitHub Container Registry 是 GitHub 上的一个完全集成的 container registry,便于在源代码附近存储和共享 container image。
主要特性
- Tight Integration with GitHub − 它帮助你轻松管理 container image,与代码仓库并行。
- Anonymous Access to Public Images − 允许对 public image 进行 anonymous access,任何人都可以轻松访问。
- Fine-Grained Permissions − 提供细粒度权限,精确管理谁可以访问你的 image。
- Automated Builds − 只要 GitHub 仓库中的代码发生变化,即自动构建。
- Interface familiar − 一个类似于 GitHub 的熟悉界面,用于管理你的 container image。
与公共仓库合作的 Docker 命令
Docker 提供了许多命令,您可以使用它们来操作公共仓库。通过这些命令,您可以轻松从命令行创建、构建、拉取、标记并推送 Docker image 到仓库。由于 Docker Hub 是最常用的公共仓库,我们将使用它来演示与仓库交互的重要 Docker 命令。
创建 Dockerfile
在构建 image 之前,您需要创建一个 Dockerfile,它本质上就是一个包含创建 Docker image 指令或步骤的文本文件。
# 示例 Dockerfile FROM ubuntu:latest RUN apt-get update && apt-get install -y nginx COPY index.html /var/www/html CMD ["nginx", "-g", "daemon off;"]
在这里,我们从仓库拉取最新的 Ubuntu image 标签,安装 nginx 并更新操作系统,将 html 文件复制到 /var/www/html 位置,并运行 nginx 命令。
构建 Docker Image
您可以使用以下 docker build 命令从 Dockerfile 构建 Docker image。
$ docker build -t my-nginx-image
在上述命令中,我们从当前位置(由末尾的点指定)中存在的 Dockerfile 构建 Docker image。
创建 Docker Hub 账户
要操作和与 Docker Hub 公共仓库交互,您需要在 Docker Hub 创建一个账户。
登录 Docker Hub
创建账户后,在推送 image 到 Docker Hub 之前,您需要通过命令行登录。
$ docker login
这将提示您验证登录凭据。
标记 Docker Image
当您为 Docker image 打标签时,可以更容易识别和管理多个版本的 Docker image。标签格式为 username/repository:tag。
$ docker tag my-nginx-image myusername/my-nginx-image:latest
在上述命令中,我们为 my-nginx-image 打上了标签 myusername/my-nginx-image:latest。您可以使用 docker images 命令列出本地现在的所有 image。
将 Docker Image 推送到 Docker Hub
要将 image 推送到 Docker Hub,您可以使用 docker push 命令。
$ docker push myusername/my-nginx-image:latest
从 Docker Hub 拉取 Docker Image
要从 Docker Hub 拉取 image,您可以使用 docker pull 命令。
$ docker pull myusername/my-nginx-image:latest
从 Image 运行 Docker Container
如果您想从拉取的 image 运行 container,您可以使用 docker run 命令从该 image 启动一个 container。
$ docker run -d -p 80:80 myusername/my-nginx-image:latest
上述命令以 detached 模式从 my-nginx-image 运行 Docker container,并将 Docker container 的端口 80 连接到主机机器的端口 80。这将允许您从本地浏览器访问容器中运行的 nginx 服务器页面。
列出 Docker Image
要列出本地机器上的所有 Docker image,您可以使用 docker images 命令。
$ docker images
删除 Docker Image
要从本地机器删除 Docker image,您可以使用 docker rmi 命令。
$ docker rmi myusername/my-nginx-image:latest
我们可以在生产应用中使用公共 Docker 仓库吗?
尽管公共 Docker 仓库方便且提供了丰富的 image 选择,但将它们用于生产应用可能存在风险,因为它们可能包含未经测试或不安全的 image,这可能会使您的应用易受安全威胁。通常建议您在生产环境中自行构建和维护 image,并在适当测试后确保它们符合组织的安全标准。然而,在开发过程中搜索基础 image 或不同技术时,公共仓库会很有用。
Conclusion
在本章中,我们讨论了如何使用 Docker 公共仓库。我们了解了创建、标记、拉取、推送和运行容器化应用的命令。我们考察了流行的 Docker 公共仓库以及它们各自提供的功能。本指南中概述的命令和流程提供了一个全面的框架,用于利用 Docker 的强大功能来实现容器化。