【云小课】应用平台第12课 编译构建之Docker篇-轻松带您完成Docker镜像构建
编译构建(CloudBuild)基于云端大规模并发加速,为客户提供高速、低成本、配置简单的混合语言构建能力,提供大量构建步骤、模板等,并通过缓存、私有依赖库、开源镜像站等实现开箱即用的编译构建体验,帮助用户缩短构建时间,提升构建效率。
编译构建默认提供常见语言的构建模板(请参见模板构建),包括常用的依赖包、工具等。如果已有模板不能满足您的要求,如缺少必要的依赖包、工具等,该怎么办呢?
Docker镜像来帮您,您可以通过自定义Docker镜像,加入项目需要的依赖和工具,将所需环境打包制作成Docker镜像并推送至SWR镜像仓库,并且可以随用随取,快速构建部署,减少项目对运行环境的依赖。
Docker是一个开源的应用容器引擎,主要理念就是环境打包部署,可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows机器上。Docker可以通过一个简单的Dockerfile文件来构建整个容器,用户可以手动编写Dockerfile文件,通过发布Dockerfile来定义应用的环境和依赖,对于持续交付非常有利。
概念延伸:
-
容器镜像服务(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为模板创建的代码仓库),再通过编译构建构建该项目,即可完成镜像制作和推送。
准备工作
-
准备项目代码
-
进入代码托管服务,单击,选择“按模板新建”。
-
在“Java Maven Demo”模板。
页面,搜索并选择 -
进入下一步,填写仓库名称(codehub01)等信息,单击“确定”完成仓库创建。
-
准备Dockerfile
-
准备基础镜像,本例使用CentOS7作为基础镜像。
在编译构建首页,单击右上角,选择“自定义构建环境”,进入“自定义构建环境”页面。
可以看到两个基础镜像,单击“基于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基础工具。用户还可以根据需要自定义添加项目需要的其他依赖和工具。
-
获取构建包路径。
Maven构建包名格式为artifactId-version.packaging,构建包默认生成于“./target”目录。
查看代码仓库pom.xml文件坐标定义,如:坐标定义如下图所示,则最终构建包路径为:./target/javaMavenDemo-1.0.jar。
-
使用上一步获取的构建包路径编写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
-
编写完成后,将Dockerfile上传到代码托管根目录。
在代码仓库“文件”页签,单击,选择“上传文件”,弹出“上传文件”对话框,选择已经准备好的Dockerfile文件,填写备注信息,然后单击“上传”。
-
创建组织
在编译构建添加“制作镜像并推送到SWR仓库”步骤时,需要指定SWR组织名,请提前创建组织。
- 前往容器镜像服务控制台。
-
在左侧菜单栏选择“组织管理”,单击右上角“创建组织”,在弹出的页面中填写组织名称,然后单击“确定”,完成组织创建。
制作、推送镜像
-
进入编译构建服务,新建构建任务(任务名:cloudbuild01)。
选择代码源:“源码源”选择“DevCloud”;“源码仓库”选择已经创建好的代码仓库codehub01。
选择构建模板:选择“Maven”。
Maven模板预置了“Maven构建”和“上传软件包到软件发布库”两个构建步骤,以及配套的默认构建命令,多数场景下,直接使用可完成构建并将生成的软件包上传到软件发布库。
本例中,构建生成的软件包用于制作镜像,因此可以删除“上传软件包到软件发布库”构建步骤;如果需要归档软件包到发布库,也可以选择保留,构建包路径与准备工作章节中描述的一致,一般会自动生成。
-
在“Maven构建”构建步骤后添加“制作镜像并推送到SWR仓库”构建步骤,并配置相关信息。
步骤显示名称:取默认值即可。
工具版本:取默认值即可。
镜像仓库:取默认值即可。
授权用户:取默认值即可。
组织:选择在准备工作章节已创建的组织。
镜像名称:自定义,注意需要符合SWR对镜像名格式要求,此处取默认值。
镜像标签:自定义,注意需要符合SWR对镜像标签格式要求,此处取默认值。
工作目录:取默认值即可。
Dockerfile路径:准备好的Dockerfile已存放于代码托管根目录,当前构建目录即为项目根目录,所以取默认值“./Dockerfile”即可。
-
配置完成后,单击“新建并执行”。
-
构建成功后,进入容器镜像服务。
单击“我的镜像”,选择“制作镜像并推送到SWR仓库”构建步骤中填写的组织,即可查看刚构建并上传的镜像。
二、使用Docker环境完成项目构建
介绍如何使用容器镜像服务的公共镜像实现Maven项目构建。
通过已经构建并推送至容器镜像仓的镜像环境,完成Maven项目构建,并将构建产物上传到软件发布库。
获取镜像地址
-
登录容器镜像服务。
-
在我的镜像列表找到刚制作好的镜像,单击镜像名称,进入镜像详情页面。
单击“编辑”,在“编辑镜像”弹框中将镜像类型设置为“公开”,然后单击镜像版本所在行,获取镜像地址。
使用镜像构建并上传软件包
-
进入编译构建服务,新建构建任务(任务名:cloudbuild02)。
选择代码源:“源码源”选择“DevCloud”;“源码仓库”选择已经创建好的代码仓库codehub01(也可以换成其他Java项目)。
选择构建模板:不使用模板,直接创建。
-
添加并配置“使用SWR公共镜像”和“上传软件包到软件发布库”两个构建步骤。
使用SWR公共镜像
镜像地址:将获取的镜像地址粘贴到输入框,并去掉地址开头的“docker pull”。
命令:输入构建命令,具体可参考各类型构建的示例命令,本例可复制Maven构建的默认命令。
上传软件包到软件发布库
构建包路径:构建结果所在路径,支持正则表达式。如:Maven构建可以使用**/target/*.?ar匹配所有构建出来的jar包和war包。
发布版本号:构建包在发布仓库的存储目录,推荐不填,不填写时,自动使用构建编号作为目录名。
包名:上传到发布库的文件名都会改成包名,推荐不填,不填会保留原文件名。
-
配置完成后,执行任务。
-
构建成功后,进入发布服务,即可看到上传到软件发布库的构建包。
仅需使用步骤“使用SWR公共镜像”即可完成Maven构建,由此可见,自定义镜像即可作为项目的构建环境。
了解更多
我猜,您可能还想知道这些:
- 点赞
- 收藏
- 关注作者
评论(0)