1. 概述

本文介绍了如何将Docker镜像推送到私有仓库。我们首先创建一个示例应用程序作为Docker镜像的基础。然后,我们将看到如何登录到我们的私有Docker仓库,并学习如何标记镜像并将其推送到仓库。

2. 私有Docker仓库

私有Docker仓库提供了对其中包含的镜像的受限访问。与公共仓库不同,只有授权用户可以访问这些镜像。这样,可以仅允许特定用户群体(例如组织、团队甚至单个人员)访问,这使其非常适合那些不想使Docker镜像公开可用的项目。

将Docker仓库设置为私有是通过仓库设置完成的。不同提供商的具体操作可能会有所不同,但通常只需勾选一个复选框即可。

既然我们了解了私有Docker仓库的优点,接下来让我们探索如何将镜像推送到这样的仓库。推送到私有仓库的步骤与推送到公共仓库相同。唯一的区别在于,该仓库被标记为私有。

3. 准备镜像

首先,我们需要通过提供正确的别名和可选标签来准备镜像。这可以在构建镜像时完成,或者通过使用现有镜像并重命名它来完成。

3.1. 构建新镜像

我们从一个简单的Spring Boot应用开始,该应用包含一个RestController,向用户返回友好的“Hello World!”消息:

@RestController
public class HelloWorldController {
    @GetMapping("/helloworld")
    String helloWorld() {
        return "Hello World!";
    }
}

我们使用的Dockerfile如下:

FROM openjdk:11
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

最后,我们运行构建镜像的命令。它看起来像这样:

docker build [OPTIONS] PATH | URL | -

在我们的例子中,我们使用了-t选项,告诉我们要给镜像打上标签。我们也提供了点“.”作为jar文件的路径。选择正确的名字,由你的用户名和仓库名称组成非常重要版本标签是可选的。如果省略,镜像将被打上latest标签:

docker build -t username/fancy-repository:v1.0.0 .

现在我们可以使用以下命令列出现有的镜像:

docker images

结果,我们将看到新创建的镜像:

REPOSITORY                  TAG       IMAGE ID        CREATED              SIZE
username/fancy-repository   v1.0.0    e20b5a89a0f2   About a minute ago   665MB

3.2. 准备现有镜像

在某些情况下,我们不想从头开始创建镜像,而是推送到现有的镜像。本节将探讨所需的准备工作。假设我们在机器上有以下镜像:

REPOSITORY       TAG         IMAGE ID       CREATED        SIZE
existing-image   some-tag    e20b5a89a0f2   2 weeks ago   665MB

为了将其推送到我们的fancy-repository,我们首先需要使用以下命令为镜像分配适当的别名:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

在我们的例子中,SOURCE_IMAGE[:TAG] 是现有镜像的名称和标签。*TARGET_IMAGE[:TAG] *是包含我们想要推送到的仓库的用户名称和名称的别名这是命令在我们示例中的样子:

docker tag existing-image:some-tag username/fancy-repository:v1.0.0

我们可以通过使用以下命令检查结果:

docker images

现在我们可以看到额外的条目,显示仓库名称和新应用的版本标签。镜像ID、时间戳和大小相同,因为仍然是同一个镜像,只是有了另一个别名:

REPOSITORY                      TAG         IMAGE ID        CREATED               SIZE
existing-image                  some-tag    e20b5a89a0f2    2 weeks ago          665MB
username/fancy-repository       v1.0.0      e20b5a89a0f2    2 weeks ago          665MB

有了这些,我们就可以继续将镜像推送到私有仓库。

4. 推送镜像

现在我们已经准备好了Docker镜像,接下来就可以将其推送到私有仓库了。第一步是使用以下命令登录到DockerHub注册表:

docker login

最后一步是使用以下命令推送镜像:

docker push [OPTIONS] NAME[:TAG]

在我们的例子中,不需要指定任何选项,只需要提供镜像名称和标签。命令看起来像这样:

docker push username/fancy-repository:v1.0.0

这样,镜像就会上传到我们的私有Docker仓库。我们可以通过运行以下命令验证镜像是否已上传到DockerHub:

docker search username/fancy-repository

结果,我们会得到以下输出,显示镜像详细信息,并证明实际上已上传到DockerHub:

NAME                        DESCRIPTION   STARS     OFFICIAL   AUTOMATED
username/fancy-repository                 0                             

5. 总结

在这篇文章中,我们探索了如何将Docker镜像推送到私有仓库。我们了解了私有仓库是什么以及它的用途,并展示了如何准备并将其推送到私有仓库。

文章中提到的所有代码示例都可以在GitHub上找到。