Docker镜像自动构建

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 原文地址基于Git的代码版本控制,能保证每个开发人员的开发成果得到有效的保护,不会发生因为其他人的“误操作”操作将自己辛辛苦苦写的代码删除,而且能够跟踪每一次的改动,能快速回滚到之前任一版本。

原文地址

基于Git的代码版本控制,能保证每个开发人员的开发成果得到有效的保护,不会发生因为其他人的“误操作”操作将自己辛辛苦苦写的代码删除,而且能够跟踪每一次的改动,能快速回滚到之前任一版本。
基于Docker镜像的版本控制,能保证应用服务的正常迭代更新,某一版本出问题了可以快速切换至其他镜像版本。

1,镜像仓库

镜像的版本控制,主要是通过给image加tag来区分。首先,我们需要一个镜像仓库,最好是私有仓库。目前国内阿里云和腾讯云都提供免费的私有镜像服务,当然,我们还可以自己搭建私有镜像仓库。

1.1,腾讯云镜像仓库:(https://console.qcloud.com/ccs

1.2,阿里云镜像仓库:(https://cr.console.aliyun.com

1.3,自建私有仓库

参考本人博客: docker私有仓库搭建

2, 上传镜像

以腾讯云镜像仓库为例。先开通镜像仓库,然后在命令行登录:

$ docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
Login Succeeded

username:腾讯云账号,p为密码

本地镜像上传

$ sudo docker tag [ImageId] ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]
$ sudo docker push ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]

例如:

$ docker tag fof_api:v20170808 ccr.ccs.tencentyun.com/sk/api:v20170808
$ docker push ccr.ccs.tencentyun.com/sk/api:v20170808

3, 下载镜像

$ docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
$ docker pull ccr.ccs.tencentyun.com/sk/api:v20170808

4,镜像制作

4.1 API镜像自动构建

API是基于python的Django框架编写的。在项目的根目录定义好Dockerfile和requirements.txt,具体参考docker版Django。然后定义Shell脚本(make.sh):

# make.sh
#!/bin/sh
git pull
echo "开始制作镜像..."
image_tag=`date +%Y%m%d_%H%M`
echo "当前时间:$image_tag"
docker build -t ccr.ccs.tencentyun.com/sk/api:${image_tag} .
echo "制作镜像成功!"

docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
docker push ccr.ccs.tencentyun.com/sk/api:${image_tag}

制作流程:

  1. 更新最新代码
  2. 制作镜像
  3. 镜像添加tag,这里tag是当前日期
  4. 上传镜像只腾讯云docker仓库

4.2 Web应用镜像自动构建

Web应用是用maven搭建的SpringMVC+MyBatis项目。打包生成war包可以通过maven命令行在服务器上执行。这里我们采用的服务器是centos7.3,java版本是1.8,maven版本是3.3.9。

$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_111/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-514.21.2.el7.x86_64", arch: "amd64", family: "unix"

在服务器上安装好java,maven后,配置maven repository路径:apache-maven-3.3.9/conf/settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/your/path/apache-maven-3.3.9/repository</localRepository>
    ...
</settings>
   

4.2.1 war包生成脚本

#mvn_on_centos.sh
#!/bin/sh
APP_PATH="/mydata/code/build/fofweb"
cd ${APP_PATH}/dzmsoft-ccs
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/dzmsoft-ucs
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeasy-base
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeasy-backstage
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeay-report
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeasy
mvn clean
mvn install -DskipTests

cd /mydata/code/deploy/web_war
mkdir ./ROOT
cd ROOT
cp /mydata/code/build/fofweb/fofeasy/target/fofeasy.war .
jar xvf fofeasy.war
rm fofeasy.war
cd ..
rm ROOT.tar.gz
tar czf ROOT.tar.gz ./ROOT
rm -rf ROOT/

这里,我们先生成fofeasy.war包,然后将war包移到脚本所在目录解压,打包成tar.gz。

4.2.2 镜像制作及上传

#make_power_image_on_centos.sh
#!/bin/sh

MVN_PATH="/mydata/code/deploy/web_war"
echo "MVN_PATH:${MVN_PATH}"
echo "开始生成WAR包..."
${MVN_PATH}/mvn_on_centos.sh
echo "WAR包生成成功!"

echo "复制War包到source目录"
cp ${MVN_PATH}/ROOT.tar.gz source/
echo "复制完成"

echo "开始制作镜像..."
image_tag=`date +%Y%m%d` #_%H%M
echo "当前时间:$image_tag"
docker build -t ccr.ccs.tencentyun.com/sk/power:v${image_tag} .
echo "制作镜像成功!"

docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
docker push ccr.ccs.tencentyun.com/sk/power:v${image_tag}
echo "上传镜像成功!"

5,镜像使用

本地push镜像(需先登录)

$ docker push ccr.ccs.tencentyun.com/sk/api:[tag]

上传成果的镜像在镜像仓库能看到:


还可以在后台自动构建,关联github工程,指定Dockerfile,commit触发自动构建。

PS: commit触发自动构建,在阿里云和腾讯云上测试没成果,需手动构建。

参考

使用阿里云免费构建docker私有仓库
Centos 下maven的安装与配置~

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
14天前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
144 70
|
7天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
56 27
|
13天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
85 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
8天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
57 22
|
16天前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
89 29
|
1月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
1月前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
54 3
docker push推送自己搭建的镜像
|
1月前
|
Docker 容器
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
74 9
|
2月前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
3268 30

热门文章

最新文章