将Docker镜像推送到私有仓库

2023/05/23

1. 概述

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

2. 私有Docker仓库

私有Docker仓库提供对其包含的镜像的受限访问。与公共仓库不同,只有授权用户才能访问镜像;这样,就可以只允许特定的用户组访问,例如组织、团队,甚至是单个用户。这使其成为不想公开其Docker镜像的项目的完美选择。

通过仓库设置实现Docker仓库的私有化。关于如何完成此操作的详细信息可能因不同的提供商而异,但通常,这只是选中复选框的问题。

现在我们知道私有Docker仓库有什么用,让我们探讨如何将镜像推送到这样的仓库。这些步骤与将镜像推送到公共仓库相同。唯一的区别是仓库被标记为私有。

3. 准备镜像

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

3.1. 构建新镜像

首先,我们从一个简单的Spring Boot应用程序创建一个Docker镜像,该应用程序包含一个返回“Hello World”的RestController:

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

我们使用以下Dockerfile:

FROM openjdk:17
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   471MB

3.2 准备现有镜像

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

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

为了将它推送到我们的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          471MB
username/fancy-repository       v1.0.0      e20b5a89a0f2    2 weeks ago          471MB

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

4. 推送镜像

此时我们已经准备好Docker镜像,可以将它推送到我们的私有仓库。第一步是使用以下命令登录DockerHub注册表(如果你没有DockerHub账号,请从此创建一个):

docker login

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

docker push [OPTIONS] NAME[:TAG]

在我们的例子中,我们不需要指定任何选项,只需要提供镜像名称和标签。该命令如下所示:

docker push username/fancy-repository:v1.0.0

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

docker search username/fancy-repository

我们将得到以下输出,显示我们的镜像详细信息并证明它在DockerHub上实际可用:

NAME                        DESCRIPTION   STARS     OFFICIAL   AUTOMATED
username/fancy-repository                 0                             

5. 总结

在本文中,我们探讨了如何将Docker镜像推送到私有仓库。我们了解了私有仓库是什么以及它的用途,然后我们演示了如何准备镜像并将其推送到私有仓库。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章