mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-12 12:51:08 +00:00
Fix and update
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
## Docker Registry
|
||||
|
||||
## Docker Registry
|
||||
|
||||
Docker Registry 是镜像分发和管理的核心组件。本节将介绍 Registry 的基本概念、公共和私有服务的选择,以及镜像的安全管理。
|
||||
|
||||
### 一句话理解 Registry
|
||||
|
||||
> **Docker Registry 是存储和分发 Docker 镜像的服务,类似于代码的 GitHub 或包管理的 npm。**
|
||||
@@ -10,6 +14,14 @@
|
||||
|
||||
#### Registry、仓库、标签的关系
|
||||
|
||||
### 核心概念
|
||||
|
||||
要熟练使用 Docker Registry,首先需要理清它与仓库(Repository)、标签(Tag)之间的关系。
|
||||
|
||||
#### Registry、仓库、标签的关系
|
||||
|
||||
Docker Registry 中可以包含多个 Repository,每个 Repository 可以包含多个 Tag。下图清晰地展示了它们之间的层级关系。
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ Docker Registry │
|
||||
@@ -39,6 +51,10 @@
|
||||
|
||||
#### 镜像的完整名称
|
||||
|
||||
#### 镜像的完整名称
|
||||
|
||||
一个完整的 Docker 镜像名称由 Registry 地址、用户名/组织名、仓库名和标签组成。了解其结构有助于我们更准确地定位镜像。
|
||||
|
||||
```
|
||||
[registry地址/][用户名/]仓库名[:标签]
|
||||
```
|
||||
@@ -47,6 +63,7 @@
|
||||
|
||||
```bash
|
||||
## 完整格式
|
||||
|
||||
registry.example.com/mycompany/myapp:v1.2.3
|
||||
│ │ │ │
|
||||
│ │ │ └── 标签
|
||||
@@ -55,13 +72,16 @@ registry.example.com/mycompany/myapp:v1.2.3
|
||||
└── Registry 地址
|
||||
|
||||
## Docker Hub 官方镜像(省略 registry 和用户名)
|
||||
|
||||
nginx:1.25
|
||||
ubuntu:24.04
|
||||
|
||||
## Docker Hub 用户镜像
|
||||
|
||||
jwilder/nginx-proxy:latest
|
||||
|
||||
## 其他 Registry
|
||||
|
||||
ghcr.io/username/myapp:v1.0
|
||||
gcr.io/google-containers/pause:3.6
|
||||
```
|
||||
@@ -70,6 +90,10 @@ gcr.io/google-containers/pause:3.6
|
||||
|
||||
### 公共 Registry 服务
|
||||
|
||||
### 公共 Registry 服务
|
||||
|
||||
公共 Registry 服务为开发者提供了便捷的镜像获取途径。其中最著名的是 Docker Hub。
|
||||
|
||||
#### Docker Hub(默认)
|
||||
|
||||
[Docker Hub](https://hub.docker.com/) 是最大的公共 Registry,也是 Docker 的默认 Registry。
|
||||
@@ -81,10 +105,12 @@ gcr.io/google-containers/pause:3.6
|
||||
|
||||
```bash
|
||||
## 从 Docker Hub 拉取镜像
|
||||
|
||||
$ docker pull nginx # 官方镜像
|
||||
$ docker pull bitnami/redis # 第三方镜像
|
||||
|
||||
## 推送镜像到 Docker Hub
|
||||
|
||||
$ docker login
|
||||
$ docker push username/myapp:v1.0
|
||||
```
|
||||
@@ -118,7 +144,9 @@ $ docker push username/myapp:v1.0
|
||||
|
||||
### 私有 Registry
|
||||
|
||||
对于企业用户,通常需要搭建私有 Registry 来存储内部镜像。
|
||||
出于安全和隐私的考虑,企业往往需要搭建自己的私有 Registry。以下是几种常见的搭建方案。
|
||||
|
||||
#### 官方 Registry 镜像
|
||||
|
||||
#### 官方 Registry 镜像
|
||||
|
||||
@@ -126,13 +154,16 @@ Docker 官方提供了 [registry](https://hub.docker.com/_/registry/) 镜像,
|
||||
|
||||
```bash
|
||||
## 启动一个本地 Registry
|
||||
|
||||
$ docker run -d -p 5000:5000 --name registry registry:2
|
||||
|
||||
## 推送镜像到本地 Registry
|
||||
|
||||
$ docker tag myapp:v1.0 localhost:5000/myapp:v1.0
|
||||
$ docker push localhost:5000/myapp:v1.0
|
||||
|
||||
## 从本地 Registry 拉取
|
||||
|
||||
$ docker pull localhost:5000/myapp:v1.0
|
||||
```
|
||||
|
||||
@@ -155,6 +186,14 @@ $ docker pull localhost:5000/myapp:v1.0
|
||||
|
||||
#### 完整工作流程
|
||||
|
||||
### 镜像的推送和拉取
|
||||
|
||||
掌握镜像的推送(Push)和拉取(Pull)是使用 Docker Registry 的基本功。
|
||||
|
||||
#### 完整工作流程
|
||||
|
||||
下图展示了从开发环境构建镜像,推送到 Registry,再到生产环境拉取运行的完整流程。
|
||||
|
||||
```
|
||||
开发者机器 Registry 生产服务器
|
||||
│ │ │
|
||||
@@ -173,37 +212,50 @@ $ docker pull localhost:5000/myapp:v1.0
|
||||
|
||||
#### 常用命令
|
||||
|
||||
运行以下命令:
|
||||
|
||||
```bash
|
||||
## 登录 Registry
|
||||
|
||||
$ docker login # 登录 Docker Hub
|
||||
$ docker login registry.example.com # 登录其他 Registry
|
||||
|
||||
## 拉取镜像
|
||||
|
||||
$ docker pull nginx:1.25
|
||||
|
||||
## 标记镜像(准备推送)
|
||||
|
||||
$ docker tag myapp:latest registry.example.com/myteam/myapp:v1.0
|
||||
|
||||
## 推送镜像
|
||||
|
||||
$ docker push registry.example.com/myteam/myapp:v1.0
|
||||
|
||||
## 登出
|
||||
|
||||
$ docker logout
|
||||
```
|
||||
|
||||
### 镜像的安全性
|
||||
|
||||
### 镜像的安全性
|
||||
|
||||
在使用公共镜像或维护私有镜像时,安全性是不容忽视的重要环节。
|
||||
|
||||
#### 使用官方镜像
|
||||
|
||||
Docker Hub 的[官方镜像](https://hub.docker.com/search?q=&type=image&image_filter=official)(标有 "Official Image" 标识)经过 Docker 团队审核,相对更安全。
|
||||
|
||||
```bash
|
||||
## 官方镜像示例
|
||||
|
||||
nginx # ✅ 官方
|
||||
mysql # ✅ 官方
|
||||
redis # ✅ 官方
|
||||
|
||||
## 第三方镜像(需要自行评估可信度)
|
||||
|
||||
bitnami/redis # ⚠️ 需要评估
|
||||
someuser/myapp # ⚠️ 需要评估
|
||||
```
|
||||
@@ -214,19 +266,25 @@ someuser/myapp # ⚠️ 需要评估
|
||||
|
||||
```bash
|
||||
## 启用镜像签名验证
|
||||
|
||||
$ export DOCKER_CONTENT_TRUST=1
|
||||
|
||||
## 此后的 pull/push 会验证签名
|
||||
|
||||
$ docker pull nginx:latest
|
||||
```
|
||||
|
||||
#### 漏洞扫描
|
||||
|
||||
运行以下命令:
|
||||
|
||||
```bash
|
||||
## 使用 Docker Scout 扫描镜像漏洞
|
||||
|
||||
$ docker scout cves nginx:latest
|
||||
|
||||
## 使用 Trivy(开源工具)
|
||||
|
||||
$ trivy image nginx:latest
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user