dockerpush本地仓库(docker 仓库)

## Docker Push 到本地仓库

简介

Docker 允许您将镜像推送到各种类型的仓库,包括公共仓库(如 Docker Hub)和私有仓库(如 Harbor、Nexus、Artifactory)。 您也可以将镜像推送到本地运行的 Docker Registry,这对于测试、开发以及在隔离环境中共享镜像非常有用。本文将详细介绍如何将 Docker 镜像推送到本地仓库。### 1. 启动本地 Docker Registry首先,您需要启动一个本地 Docker Registry。可以使用官方的 registry 镜像来实现:```bash docker run -d -p 5000:5000 --restart=always --name registry registry:2 ```这将在本地启动一个 Registry,监听 5000 端口。 `--restart=always` 参数确保 Registry 在 Docker daemon 重启后自动启动。### 2. 标记镜像以便推送到本地 Registry在推送镜像之前,需要使用本地 Registry 的地址和端口对其进行标记。 标记镜像的语法如下:```bash docker tag : localhost:5000/: ```

``: 您的 Docker 镜像名称。

``: 镜像的标签(例如 `latest`、`v1.0` 等)。 如果省略标签,则默认为 `latest`。例如,要将名为 `my-app` 的镜像标记为 `localhost:5000/my-app:latest`,您可以运行:```bash docker tag my-app:latest localhost:5000/my-app:latest ```### 3. 推送镜像到本地 Registry标记镜像后,您可以使用 `docker push` 命令将其推送到本地 Registry:```bash docker push localhost:5000/my-app:latest ```如果推送成功,您将看到类似于以下内容的输出:``` The push refers to repository [localhost:5000/my-app] e3fbbfb44187: Pushed latest: digest: sha256:xxxxxxxxxxxxxxxxx size: xxx ```### 4. 从本地 Registry 拉取镜像要从本地 Registry 拉取镜像,您可以使用 `docker pull` 命令:```bash docker pull localhost:5000/my-app:latest ```### 5. HTTP 问题 (对于较新版本的 Docker Desktop)如果您使用的是较新版本的 Docker Desktop (例如 v4.x 以上),您可能会遇到 `http: server gave HTTP response to HTTPS client` 错误。这是因为 Docker Desktop 默认使用 HTTPS 连接 Registry。有几种解决方法:

配置 Docker Daemon 以允许不安全的 Registry:

编辑 `/etc/docker/daemon.json` (如果该文件不存在,请创建它),并添加以下内容:```json{"insecure-registries" : ["localhost:5000"]}```然后,重新启动 Docker daemon。

使用 HTTPS 运行 Registry (推荐):

这是更安全的方法,但需要生成证书并配置 Registry。 这超出了本文的范围,但您可以在 Docker Registry 的官方文档中找到相关信息。

使用 `--tls-verify=false` (不推荐):

这将禁用 TLS 验证,不建议用于生产环境。```bashdocker push --tls-verify=false localhost:5000/my-app:latest```### 总结本文介绍了如何将 Docker 镜像推送到本地运行的 Registry。这对于在本地测试和开发镜像非常有用。记住要根据您的 Docker Desktop 版本和安全需求选择合适的解决方案来处理 HTTP/HTTPS 问题。 推荐使用 HTTPS 方式运行 Registry 以确保安全性。

Docker Push 到本地仓库**简介**Docker 允许您将镜像推送到各种类型的仓库,包括公共仓库(如 Docker Hub)和私有仓库(如 Harbor、Nexus、Artifactory)。 您也可以将镜像推送到本地运行的 Docker Registry,这对于测试、开发以及在隔离环境中共享镜像非常有用。本文将详细介绍如何将 Docker 镜像推送到本地仓库。

1. 启动本地 Docker Registry首先,您需要启动一个本地 Docker Registry。可以使用官方的 registry 镜像来实现:```bash docker run -d -p 5000:5000 --restart=always --name registry registry:2 ```这将在本地启动一个 Registry,监听 5000 端口。 `--restart=always` 参数确保 Registry 在 Docker daemon 重启后自动启动。

2. 标记镜像以便推送到本地 Registry在推送镜像之前,需要使用本地 Registry 的地址和端口对其进行标记。 标记镜像的语法如下:```bash docker tag : localhost:5000/: ```* ``: 您的 Docker 镜像名称。 * ``: 镜像的标签(例如 `latest`、`v1.0` 等)。 如果省略标签,则默认为 `latest`。例如,要将名为 `my-app` 的镜像标记为 `localhost:5000/my-app:latest`,您可以运行:```bash docker tag my-app:latest localhost:5000/my-app:latest ```

3. 推送镜像到本地 Registry标记镜像后,您可以使用 `docker push` 命令将其推送到本地 Registry:```bash docker push localhost:5000/my-app:latest ```如果推送成功,您将看到类似于以下内容的输出:``` The push refers to repository [localhost:5000/my-app] e3fbbfb44187: Pushed latest: digest: sha256:xxxxxxxxxxxxxxxxx size: xxx ```

4. 从本地 Registry 拉取镜像要从本地 Registry 拉取镜像,您可以使用 `docker pull` 命令:```bash docker pull localhost:5000/my-app:latest ```

5. HTTP 问题 (对于较新版本的 Docker Desktop)如果您使用的是较新版本的 Docker Desktop (例如 v4.x 以上),您可能会遇到 `http: server gave HTTP response to HTTPS client` 错误。这是因为 Docker Desktop 默认使用 HTTPS 连接 Registry。有几种解决方法:* **配置 Docker Daemon 以允许不安全的 Registry:**编辑 `/etc/docker/daemon.json` (如果该文件不存在,请创建它),并添加以下内容:```json{"insecure-registries" : ["localhost:5000"]}```然后,重新启动 Docker daemon。* **使用 HTTPS 运行 Registry (推荐):** 这是更安全的方法,但需要生成证书并配置 Registry。 这超出了本文的范围,但您可以在 Docker Registry 的官方文档中找到相关信息。* **使用 `--tls-verify=false` (不推荐):** 这将禁用 TLS 验证,不建议用于生产环境。```bashdocker push --tls-verify=false localhost:5000/my-app:latest```

总结本文介绍了如何将 Docker 镜像推送到本地运行的 Registry。这对于在本地测试和开发镜像非常有用。记住要根据您的 Docker Desktop 版本和安全需求选择合适的解决方案来处理 HTTP/HTTPS 问题。 推荐使用 HTTPS 方式运行 Registry 以确保安全性。

标签列表