赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 容器镜像服务
  4. 实践教程
  5. 在Dockerfile中使用构建打包镜像并运行

在Dockerfile中使用构建打包镜像并运行

  • 实践教程
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

通过使用多阶段构建应用以及结合阿里云容器镜像服务(ACR)的镜像构建服务,可以使Java应用具有构建安全、构建速度快、镜像文件体积小等优点。

前提条件

  • 开通阿里云容器镜像服务。

  • 在使用容器镜像服务之前,需要先安装Docker。关于如何安装Docker,请参见安装Docker。

  • 请准备一个托管在GitHub、GitLab或者Bitbucket平台上的Java源代码仓库。

    说明

    您可以拷贝并托管位于GitHub上的一个简单的Java Maven项目来体验整个流程。

背景信息

镜像构建的通用问题

镜像构建服务使用Dockerfile来帮助用户构建最终镜像,但在具体实践中,存在一些问题:

  • Dockerfile编写有门槛

    开发者(尤其是Java)习惯了语言框架的编译便利性,不知道如何使用Dockerfile构建应用镜像。

  • 镜像容易臃肿

    构建镜像时,开发者会将项目的编译、测试、打包构建流程编写在一个Dockerfile中。每条Dockerfile指令都会为镜像添加一个新的镜像层,从而导致镜像层次深,镜像文件体积特别大。

  • 存在源码泄露风险

    打包镜像时,源代码容易被打包到镜像中,从而产生源代码泄露的风险。

多阶段构建优势

针对Java这类的编译型语言,使用Dockerfile多阶段构建,具有以下优势:

  • 保证构建镜像的安全性

    当您使用Dockerfile多阶段构建镜像时,需要在第一阶段选择合适的编译时基础镜像,进行代码拷贝、项目依赖下载、编译、测试、打包流程。在第二阶段选择合适的运行时基础镜像,拷贝基础阶段生成的运行时依赖文件。最终构建的镜像将不包含任何源代码信息。

  • 优化镜像的层数和体积

    构建的镜像仅包含基础镜像和编译制品,镜像层数少,镜像文件体积小。

  • 提升构建速度

    使用构建工具(Docker、Buildkit等),可以并发执行多个构建流程,缩短构建耗时。

步骤一:绑定源代码仓库

在容器镜像服务控制台,绑定您托管的代码仓库,以下内容以GitHub为例。

  1. 登录容器镜像服务控制台。

  2. 在顶部菜单栏,选择所需地域。

  3. 在实例列表页面单击个人版实例。

  4. 在个人版实例管理页面左侧导航栏中选择仓库管理 > 代码源。

  5. 在GitHub对应的操作列,单击绑定账号。在弹出的对话框中单击点击前往源代码仓库登录,跳转到GitHub。

  6. 在授权界面,单击Authorize AliyunDeveloper。绑定成功后,会弹出您已成功绑定GitHub账号的提示信息。返回至代码源界面,GitHub栏中显示已绑定,表示绑定成功。image

步骤二:新建镜像仓库

  1. 登录容器镜像服务控制台。

  2. 在顶部菜单栏,选择所需地域。

  3. 在实例列表页面单击个人版实例。

  4. 在个人版实例管理页面左侧导航栏中选择仓库管理 > 镜像仓库,然后单击创建镜像仓库。

  5. 设置镜像仓库信息。

    配置项

    描述

    示例

    地域

    镜像仓库所在区域。

    华东1(杭州)

    命名空间

    仓库所属命名空间。一个镜像仓库必须且仅属于一个命名空间。一个命名空间下可以包含多个镜像仓库。

    test23432

    仓库名称

    请输入仓库名称。

    test

    仓库类型

    仓库类型分为公开和私有。无论是公开还是私有类型仓库,推送镜像都需要先进行登录。公开仓库所有人均可使用,为了避免您的数据受到损失,建议您使用私有仓库。

    • 公开:拉取镜像时可以免登录,直接通过网络拉取。

    • 私有:必须要通过Docker客户端进行登录,才能拉取镜像。

    私有

    摘要

    简要描述信息。

    -

    描述信息

    完整描述信息,支持Markdown格式。

    使用创建的Dockerfile,结合ACR的镜像构建服务,进行构建打包以及运行镜像。

  6. 单击下一步,设置代码源。

    参数

    描述

    代码源

    将代码源设为GitHub,选择绑定源代码仓库中绑定的源代码仓库。

    构建设置

    本示例使用代码变更时自动构建镜像和海外机器构建。

    • 代码变更时自动构建镜像:当分支有代码提交后会自动触发构建规则。

    • 海外机器构建:构建时会在海外机房构建,构建成功后推送到指定地域。

    • 不使用缓存:每次构建时会强制重新拉取基础依赖镜像,可能会增加构建时间。

  7. 单击创建镜像仓库。

    创建完成后,会跳转至镜像仓库详情页面,您可以在仓库详情页面查看仓库的基本信息。

  8. 在左侧导航栏,单击仓库名称左侧的23030201图标。在镜像仓库页面,您可以查看您刚才创建的镜像仓库,仓库状态显示正常,即表示仓库创建成功。

步骤三:执行构建

  1. 在左侧导航栏中选择仓库管理 > 镜像仓库,单击仓库名称或目标仓库操作列的管理,进入仓库详情页面。

  2. 单击左侧导航栏中的构建,在构建规则设置区域的单击添加规则。

  3. 设置构建规则。

    配置项

    描述

    示例

    类型

    定义了推送代码到托管仓库,触发构建规则的事件。目前有Branch和Tag两种类型的推送。

    Branch

    Branch/Tag

    设置构建的代码分支。

    master

    构建上下文目录

    设置Dockerfile文件所在的目录。这里的目录指的是相对目录,以代码分支的根目录为父目录。本教程中Dockerfile完整路径是/Dockerfile,此处填写/。

    /

    Dockerfile文件名

    设置Dockerfile文件名,默认为Dockerfile。例如:Dockerfile完整路径是/Dockerfile,此处填写Dockerfile。

    Dockerfile

    镜像版本

    设置镜像版本。

    V1.0.0

  4. 单击确认,返回至构建页面。

  5. 在构建规则设置区域中,找到创建的规则,单击目标规则对应操作列的立即构建。

    在构建日志区域中找到构建记录,当构建状态显示成功,表示构建成功。

步骤四:在Docker中配置镜像加速器

由于当前运营商网络问题,可能会导致您拉取Docker Hub镜像变慢。建议您手动拉取镜像到本地节点,然后重启Pod。执行如下命令,在Docker中配置镜像加速器。

  1. 登录容器镜像服务控制台。在顶部菜单栏,选择创建的容器实例所在地域。

  2. 在左侧导航栏,选择镜像工具>镜像加速器。在加速器区域,复制加速器地址。

  3. 执行如下命令,在Docker中配置镜像加速器。请将https://g******w9.mirror.aliyuncs.com替换为您在上一步骤中复制的加速器地址。以下是Ubuntu和CentOS配置方式,更多系统版本请参见配置镜像加速器。

    mkdir -p /etc/docker # 创建配置文件目录。
    tee /etc/docker/daemon.json <<-'EOF' # 写入加速配置。
    {
      "registry-mirrors": ["https://g******w9.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload  # 重新加载配置文件。
    systemctl restart docker # 重启Docker服务。

执行结果

查看构建的镜像

在个人版实例管理页面左侧导航栏中选择仓库管理>镜像仓库,单击仓库名称或目标仓库操作列的管理,单击左侧导航栏的镜像版本,查看构建的镜像。

在Docker中运行镜像

2024年09月09日起,新个人版实例的访问域名作出调整,详情请参见新个人版实例使用限制。您根据情况选择不同的推送和拉取镜像方式。

新版个人版实例

  1. 在Docker执行如下命令,登录阿里云Docker Registry。请将命令中的acr_e2******@test.aliyunid.com替换为您的阿里云账号全名,密码为您在准备环境和资源中设置的密码;cn-hangzhou替换为您个人版实例所在的地域。crpi-xxxx替换为您个人版实例ID,您登录容器镜像服务控制台单击个人版实例,然后在概览页面的实例信息页签中获取实例ID。

    docker login --username=acr_e2******@test.aliyunid.com crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com
  2. 执行如下命令,拉取镜像。

    docker pull crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0
  3. 执行如下命令,查看Docker镜像。

    docker images
  4. 执行如下命令,运行镜像。

    docker run -ti crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0
    Hello World!

旧版个人版实例

  1. 在Docker执行如下命令,登录阿里云Docker Registry。请将命令中的acr_e2******@test.aliyunid.com替换为您的阿里云账号全名,密码为您在准备环境和资源中设置的密码;cn-hangzhou替换为您个人版实例所在的地域。

    docker login --username=acr_e2******@test.aliyunid.com registry.cn-hangzhou.cr.aliyuncs.com
  2. 执行如下命令,拉取镜像。请将命令中的cn-hangzhou替换为您个人版实例所在的地域;test23432替换为您实际使用的命名空间;test:V1.0.0替换为实际使用的仓库名称以及镜像版本。

    docker pull registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0
  3. 执行如下命令,查看Docker镜像。

    docker images
  4. 执行如下命令,运行镜像。请将命令中的cn-hangzhou替换为您个人版实例所在的地域;test23432替换为您实际使用的命名空间;test:V1.0.0替换为实际使用的仓库名称以及镜像版本。

    docker run -ti registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0
    Hello World!
相关文章

使用OCI v1.1.0规范管理和关联容器镜像及其衍生制品 2025-04-18 15:15

从2024年04月起,新创建的ACR企业版实例将支持OCI的Image和Distribution规范v1.1.0,包括对Reference Types的支持。这意味着您除了可以存储和分发容器镜像外,还能管理和分发非容器镜像内容的OCI制品,如镜像签名和软件物料清单(SBOM)。这使您能够像管理容器镜

使用触发器构建容器DevOps 2025-04-18 15:15

通过容器镜像服务可以便捷地构建基于容器的DevOps开发环境。本文介绍如何使用触发实现镜像代码被修改后,自动触发镜像构建,且自动触发容器服务上应用的重新部署。 前提条件 已绑定企业版实例与阿里云Codeup代码平台。<

使用Jenkins实现镜像的CICD 2025-04-18 15:15

若您期望实现从源代码自动构建、推送镜像到最终部署应用的一体化自动化操作。您可以使用Jenkins实现镜像的CI/CD,只要您在GitLab中提交源代码,容器镜像会自动使用源代码构建镜像,容器服务会自动拉取镜像部署应用,并自动发送事件通知到钉钉群。 前提条件

Java项目容器化构建最佳实践 2025-04-18 15:15

使用Dockerfile将源代码构建成容器镜像,进行镜像分发、部署。相比于Golang或Python项目,Java项目因企业一般会选择自建依赖仓库(如Maven)导致容器化构建难度高,因不熟悉Dockerfile缓存机制导致构建速度较慢。本文从典型用户场景(云上自建GitLab代码仓库、自建Mave

在Dockerfile中使用构建打包镜像并运行 2025-04-18 15:15

通过使用多阶段构建应用以及结合阿里云容器镜像服务(ACR)的镜像构建服务,可以使Java应用具有构建安全、构建速度快、镜像文件体积小等优点。 前提条件

本地构建和推送多架构镜像到容器镜像服务 2025-04-18 15:15

使用ARM架构资源部署容器通常可以节省不少成本,但也可能导致维护成本增加,您可能需要面向x86、ARM架构分别构建镜像并设置不同的Tag。您可以使用docker buildx来构建多架构镜像,并通过docker manifest实现一个Tag管理多架构的容器镜像。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号