【云小课】应用平台第12课 编译构建之Docker篇-轻松带您完成Docker镜像构建

举报
应用万花筒. 发表于 2020/12/25 17:14:47 2020/12/25
【摘要】 编译构建为用户提供常用的构建环境,当默认构建环境没法满足用户需求时,用户可以通过制作Docker镜像自定义构建环境,实现持续构建。

编译构建(CloudBuild)基于云端大规模并发加速,为客户提供高速、低成本、配置简单的混合语言构建能力,提供大量构建步骤、模板等,并通过缓存、私有依赖库、开源镜像站等实现开箱即用的编译构建体验,帮助用户缩短构建时间,提升构建效率。

编译构建默认提供常见语言的构建模板(请参见模板构建),包括常用的依赖包、工具等。如果已有模板不能满足您的要求,如缺少必要的依赖包、工具等,该怎么办呢?



codecixiaoke001.jpg


Docker镜像来帮您,您可以通过自定义Docker镜像,加入项目需要的依赖和工具,将所需环境打包制作成Docker镜像并推送至SWR镜像仓库,并且可以随用随取,快速构建部署,减少项目对运行环境的依赖。

Docker是一个开源的应用容器引擎,主要理念就是环境打包部署,可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows机器上。Docker可以通过一个简单的Dockerfile文件来构建整个容器,用户可以手动编写Dockerfile文件,通过发布Dockerfile来定义应用的环境和依赖,对于持续交付非常有利。

codecixiaoke002.png


概念延伸:

  • 容器镜像服务(Software Repository for Container,简称SWR)

    容器镜像服务是一种支持镜像全生命周期管理的服务,提供简单易用、安全可靠的镜像管理功能,帮助您快速部署容器化服务。您可以通过界面、社区CLI和原生API上传、下载和管理容器镜像。容器镜像服务可配合云容器引擎CCE云容器实例CCI使用,也可单独作为容器镜像仓库使用。在编译构建服务中,容器镜像服务作为容器镜像仓库,用来存储和拉取镜像。

  • 镜像(Image)

    容器镜像是一个模板,是容器应用打包的标准格式,在部署容器化应用时可以指定镜像,镜像可以来自于镜像中心或者用户的私有Registry。一个容器镜像可以包含一个完整的Ubuntu操作系统环境,里面仅安装了用户需要的应用程序及其依赖文件。容器镜像用于创建容器。容器引擎本身提供了一个简单的机制来创建新的镜像或者更新已有镜像,您也可以下载其他人已经创建好的镜像来使用。

  • 容器(Container)

    一个通过容器镜像创建的运行实例,一个节点可运行多个容器。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。

    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 组织

    容器镜像服务提供组织管理功能,方便用户根据自身组织架构来构建镜像,上传镜像前,需要先创建组织。组织用于隔离镜像仓库,每个组织可对应一个公司或部门,将其拥有的镜像集中在该组织下。同一用户可属于不同的组织。支持为账号下不同用户分配相应的访问权限(读取、编辑、管理)。

  • Dockerfile

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。


本节小课通过一个简单的Maven项目,带您体验:

一、使用编译构建完成Docker镜像构建

二、使用Docker环境完成项目构建


一、使用编译构建完成Docker镜像构建

本节介绍使用Dockerfile定制一个简单的容器镜像并推送到SWR仓库。

通过编译构建自定义构建环境获取基础镜像,基于基础镜像完成Dockerfile文件制作(添加Maven构建包),然后将文件存放于项目代码库(基于Java Maven Demo为模板创建的代码仓库),再通过编译构建构建该项目,即可完成镜像制作和推送。

准备工作

  • 准备项目代码

  1. 进入代码托管服务,单击codecixiaoke003.png,选择按模板新建


    codecixiaoke004.png

  2. 按模板新建 > 选择模板页面,搜索并选择Java Maven Demo模板。

  3. 进入下一步,填写仓库名称(codehub01)等信息,单击确定完成仓库创建。

  • 准备Dockerfile

  1. 准备基础镜像,本例使用CentOS7作为基础镜像。

    在编译构建首页,单击右上角codecixiaoke005.png,选择自定义构建环境,进入自定义构建环境页面。

    可以看到两个基础镜像,单击基于centos7包含各种常用工具的X86基础镜像,即可获取该基础镜像对应的Dockerfile文件。

    说明:

    该基础镜像基于centos7,用于X86构建环境,安装了OpenJDK 1.8.0_40,Maven 3.5.3,Ant 1.10.3,git,wget,zip,unzip,bzip2,gcc,make,cmake基础工具。用户还可以根据需要自定义添加项目需要的其他依赖和工具。

  2. 获取构建包路径。

    Maven构建包名格式为artifactId-version.packaging,构建包默认生成于./target目录。

    查看代码仓库pom.xml文件坐标定义,如:坐标定义如下图所示,则最终构建包路径为:./target/javaMavenDemo-1.0.jar。

    codecixiaoke006.png

  3. 使用上一步获取的构建包路径编写Dockerfile,在基础镜像中添加Maven项目构建包制作Docker镜像,内容如下:

    FROM swr.cn-north-1.myhuaweicloud.com/codeci/special_base_image:centos7-base-1.0.2
    MAINTAINER <devcloud@demo.com>
    USER root
    RUN mkdir /demo
    COPY ./target/javaMavenDemo-1.0.jar /demo/app.jar
  4. 编写完成后,将Dockerfile上传到代码托管根目录。

    在代码仓库文件页签,单击codecixiaoke007.png,选择上传文件,弹出上传文件对话框,选择已经准备好的Dockerfile文件,填写备注信息,然后单击上传

    codecixiaoke008.png

  • 创建组织

在编译构建添加制作镜像并推送到SWR仓库步骤时,需要指定SWR组织名,请提前创建组织。

  1. 前往容器镜像服务控制台
  2. 在左侧菜单栏选择组织管理,单击右上角创建组织,在弹出的页面中填写组织名称,然后单击确定,完成组织创建。

    codecixiaoke016.png

制作、推送镜像

  1. 进入编译构建服务,新建构建任务(任务名:cloudbuild01)。

    选择代码源源码源选择DevCloud源码仓库选择已经创建好的代码仓库codehub01。

    选择构建模板:选择Maven

    Maven模板预置了Maven构建上传软件包到软件发布库两个构建步骤,以及配套的默认构建命令,多数场景下,直接使用可完成构建并将生成的软件包上传到软件发布库。

    codecixiaoke017.png本例中,构建生成的软件包用于制作镜像,因此可以删除“上传软件包到软件发布库”构建步骤;如果需要归档软件包到发布库,也可以选择保留,构建包路径与准备工作章节中描述的一致,一般会自动生成。

  2. Maven构建构建步骤后添加制作镜像并推送到SWR仓库构建步骤,并配置相关信息。

    步骤显示名称:取默认值即可。

    工具版本:取默认值即可。

    镜像仓库:取默认值即可。

    授权用户:取默认值即可。

    组织:选择在准备工作章节已创建的组织。

    镜像名称:自定义,注意需要符合SWR对镜像名格式要求,此处取默认值。

    镜像标签:自定义,注意需要符合SWR对镜像标签格式要求,此处取默认值。

    工作目录:取默认值即可。

    Dockerfile路径:准备好的Dockerfile已存放于代码托管根目录,当前构建目录即为项目根目录,所以取默认值“./Dockerfile”即可。

    codecixiaoke009.png

  3. 配置完成后,单击新建并执行

  4. 构建成功后,进入容器镜像服务

    单击我的镜像,选择制作镜像并推送到SWR仓库构建步骤中填写的组织,即可查看刚构建并上传的镜像。

    codecixiaoke010.png


二、使用Docker环境完成项目构建

介绍如何使用容器镜像服务的公共镜像实现Maven项目构建。

通过已经构建并推送至容器镜像仓的镜像环境,完成Maven项目构建,并将构建产物上传到软件发布库

获取镜像地址

  1. 登录容器镜像服务

  2. 在我的镜像列表找到刚制作好的镜像,单击镜像名称,进入镜像详情页面。

    单击编辑,在编辑镜像弹框中将镜像类型设置为公开,然后单击镜像版本所在行codecixiaoke011.png,获取镜像地址。


    codecixiaoke012.png

使用镜像构建并上传软件包

  1. 进入编译构建服务,新建构建任务(任务名:cloudbuild02)。

    选择代码源:源码源选择DevCloud源码仓库选择已经创建好的代码仓库codehub01(也可以换成其他Java项目)。

    选择构建模板:不使用模板,直接创建。

  2. 添加并配置使用SWR公共镜像上传软件包到软件发布库两个构建步骤。

    使用SWR公共镜像

    镜像地址:将获取的镜像地址粘贴到输入框,并去掉地址开头的docker pull

    命令:输入构建命令,具体可参考各类型构建的示例命令,本例可复制Maven构建的默认命令。

    codecixiaoke013.png

    上传软件包到软件发布库

    构建包路径:构建结果所在路径,支持正则表达式。如:Maven构建可以使用**/target/*.?ar匹配所有构建出来的jar包和war包。

    发布版本号:构建包在发布仓库的存储目录,推荐不填,不填写时,自动使用构建编号作为目录名。

    包名:上传到发布库的文件名都会改成包名,推荐不填,不填会保留原文件名。

    codecixiaoke014.png

  3. 配置完成后,执行任务。

  4. 构建成功后,进入发布服务,即可看到上传到软件发布库的构建包。

    codecixiaoke015.png


仅需使用步骤使用SWR公共镜像即可完成Maven构建,由此可见,自定义镜像即可作为项目的构建环境。


了解更多

我猜,您可能还想知道这些:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。