构建、标记和发布镜像

2024-06-23 23:36
文章标签 镜像 标记 构建 发布

本文主要是介绍构建、标记和发布镜像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

构建、标记和发布镜像

目录

  • 构建镜像
  • 标记镜像
  • 发布镜像
  • 实践
    • 设置
    • 构建镜像
    • 推送镜像

在本指南中,您将学习以下内容:

  • 构建镜像:基于Dockerfile构建镜像的过程。
  • 标记镜像:为镜像命名的过程,这也决定了镜像的分发位置。
  • 发布镜像:使用容器注册表分发或共享新创建的镜像的过程。

构建镜像

通常情况下,镜像是使用Dockerfile构建的。最基本的构建命令如下:

docker build .

命令中的.提供了构建上下文的路径或URL。在这个位置,构建器会找到Dockerfile和其他引用的文件。

当您运行构建时,构建器会拉取基础镜像(如果需要),然后运行Dockerfile中指定的指令。

使用上述命令,镜像将没有名称,但输出会提供镜像的ID。例如,前面的命令可能产生如下输出:

docker build .
[+] Building 3.5s (11/11) FINISHED=> [internal] load build definition from Dockerfile                                            0.0s=> => transferring dockerfile: 308B                                                            0.0s=> [internal] load metadata for docker.io/library/python:3.12                                  0.0s=> [internal] load .dockerignore                                                               0.0s=> => transferring context: 2B                                                                 0.0s=> [1/6] FROM docker.io/library/python:3.12                                                    0.0s=> [internal] load build context                                                               0.0s=> => transferring context: 123B                                                               0.0s=> [2/6] WORKDIR /usr/local/app                                                                0.0s=> [3/6] RUN useradd app                                                                       0.1s=> [4/6] COPY ./requirements.txt ./requirements.txt                                            0.0s=> [5/6] RUN pip install --no-cache-dir --upgrade -r requirements.txt                          3.2s=> [6/6] COPY ./app ./app                                                                      0.0s=> exporting to image                                                                          0.1s=> => exporting layers                                                                         0.1s=> => writing image sha256:9924dfd9350407b3df01d1a0e1033b1e543523ce7d5d5e2c83a724480ebe8f00    0.0s

根据上述输出,您可以使用引用的镜像启动一个容器:

docker run sha256:9924dfd9350407b3df01d1a0e1033b1e543523ce7d5d5e2c83a724480ebe8f00

这种名称肯定不好记,这时候标记镜像就变得很有用。

标记镜像

标记镜像是给镜像一个易记名称的方法。不过,镜像的名称有一定的结构。一个完整的镜像名称有以下结构:

[HOST[:PORT_NUMBER]/]PATH[:TAG]
  • HOST:镜像所在的可选注册表主机名。如果没有指定主机名,默认为Docker的公共注册表docker.io。
  • PORT_NUMBER:如果提供了主机名,则为注册表端口号。
  • PATH:镜像的路径,由斜杠分隔的组件组成。对于Docker Hub,格式为[NAMESPACE/]REPOSITORY,其中namespace是用户或组织的名称。如果未指定namespace,则使用library,这是Docker官方镜像的命名空间。
  • TAG:自定义的、易于阅读的标识符,通常用于标识镜像的不同版本或变体。如果未指定标签,默认使用latest。

一些镜像名称的例子包括:

  • nginx,相当于docker.io/library/nginx:latest:从docker.io注册表、library命名空间、nginx镜像仓库中拉取latest标签的镜像。
  • docker/welcome-to-docker,相当于docker.io/docker/welcome-to-docker:latest:从docker.io注册表、docker命名空间、welcome-to-docker镜像仓库中拉取latest标签的镜像。
  • ghcr.io/dockersamples/example-voting-app-vote:pr-311:从GitHub Container Registry、dockersamples命名空间、example-voting-app-vote镜像仓库中拉取pr-311标签的镜像。

在构建期间标记镜像,可以添加-t--tag标志:

docker build -t my-username/my-image .

如果您已经构建了镜像,可以使用docker image tag命令添加另一个标签:

docker image tag my-username/my-image another-username/another-image:v1

发布镜像

构建并标记好镜像后,您就可以将其推送到注册表。使用docker push命令:

docker push my-username/my-image

在几秒钟内,镜像的所有层都将被推送到注册表。

需要认证

在推送镜像到仓库之前,您需要进行认证。只需使用docker login命令即可。

实践

在本指南中,您将使用提供的Dockerfile构建一个简单的镜像,并将其推送到Docker Hub。

设置

获取示例应用程序。

如果您有Git,可以克隆示例应用程序的仓库。否则,您可以下载示例应用程序。选择以下选项之一:

使用Git克隆

在终端中使用以下命令克隆示例应用程序仓库:

git clone https://github.com/docker/getting-started-todo-app

下载并安装Docker Desktop。

如果您还没有Docker账户,请现在创建一个。完成后,使用该账户登录Docker Desktop。

构建镜像

现在,您已经在Docker Hub上有了一个仓库,是时候构建一个镜像并将其推送到仓库了。

在示例应用程序仓库的根目录中,使用终端运行以下命令。将YOUR_DOCKER_USERNAME替换为您的Docker Hub用户名:

docker build -t YOUR_DOCKER_USERNAME/concepts-build-image-demo .

例如,如果您的用户名是mobywhale,则运行以下命令:

docker build -t mobywhale/concepts-build-image-demo .

构建完成后,您可以使用以下命令查看镜像:

docker image ls

该命令将产生类似以下的输出:

REPOSITORY                             TAG       IMAGE ID       CREATED          SIZE
mobywhale/concepts-build-image-demo    latest    746c7e06537f   24 seconds ago   354MB

您实际上可以使用docker image history命令查看镜像的历史记录(或如何创建镜像):

docker image history mobywhale/concepts-build-image-demo

您将看到类似以下的输出:

IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
f279389d5f01   8 seconds ago   CMD ["node" "./src/index.js"]                   0B        buildkit.dockerfile.v0
<missing>      8 seconds ago   EXPOSE map[3000/tcp:{}]                         0B        buildkit.dockerfile.v0 
<missing>      8 seconds ago   WORKDIR /app                                    8.19kB    buildkit.dockerfile.v0
<missing>      4 days ago      /bin/sh -c #(nop)  CMD ["node"]                 0B
<missing>      4 days ago      /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>      4 days ago      /bin/sh -c #(nop)  COPY file:4d192565a7220e13…   20.5kB
<missing>      4 days ago      /bin/sh -c apk add --no-cache --virtual .bui…   7.92MB
<missing>      4 days ago      /bin/sh -c #(nop)  ENV YARN_VERSION=1.22.19     0B
<missing>      4 days ago      /bin/sh -c addgroup -g 1000 node     && addu…   126MB
<missing>      4 days ago      /bin/sh -c #(nop)  ENV NODE_VERSION=20.12.0     0B
<missing>      2 months ago    /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>      2 months ago    /bin/sh -c #(nop) ADD file:d0764a717d1e9d0af…   8.42MB

此输出显示了镜像的各层,突出了您添加的层以及从基础镜像继承的层。

推送镜像

现在,您已经构建了镜像,是时候将镜像推送到注册表了。

使用docker push命令推送镜像:

docker push YOUR_DOCKER_USERNAME/concepts-build-image-demo

如果收到"requested access to the resource is denied"的错误,请确保您已经登录并且您的Docker用户名在镜像标签中是正确的。

稍等片刻,您的镜像应当被推送到Docker Hub。

这篇关于构建、标记和发布镜像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088595

相关文章

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启