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上找到。