第三节:容器的构建与部署自动化

@(Openshif开源云平台)

实验1目的:手工实现java应用的容器化,熟悉没有openshift时容器化的流程。

实现自己的MySQL+Jenkins的镜像
解释:MySQL、Jenkins都是独立的开源容器
环境:CentOS虚拟机一台(未安装任何应用或包)

加速器

提示:如果省去了这个步骤,下载过程你就等个十天半个月吧 : )
1)yum加速(阿里云)

#备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的CentOS-Base.repo 到/etc/yum.repos.d/
#运行
yum makecache

2)docker加速参考

Java应用手工容器化实现步骤

#1)安装下载源代码的工具git
yum install -y git

#2)从github上下载java web的源代码
[root@master ~]# cd /opt
[root@master ~]# git clone https://github.com/nichochen/mybank-demo-maven.git

#3)安装应用build所需要的Java开发包JDK和Maven
yum install -y maven

#4)通过maven编译刚才下载的Java代码
cd  mybank-demo-maven/
mvn package
#这个步骤后会在该文件夹下生成一个target文件,进入后有一个Root.war

#5)下载docker并启动
yum install -y docker
systemctl start docker

#6)下载基础镜像,不加冒号和后面的版本号码即下载最新版本
docker pull tomcat:7.0.79-jre7-alpine

#7)编写Dockerfile(不能设置成其他的名字)
[root@master mybank-demo-maven]# touch Dockerfile
[root@master mybank-demo-maven]# vim Dockerfile
FROM tomcat:7.0.79-jre7-alpine
ADD ./target/ROOT.war /usr/local/tomcat/webapps/mybank.war
#将本地的ROOT文件拷贝到容器中,命名为mybank.war

#8)执行docker build构建镜像(将代码和基础镜像融合在一起build) ,将新生成的镜像命名改成mybank-tomca(注意后面的小点)
docker build -t mybank-tomcat .
#显示如下
Step 1 : FROM tomcat:7.0.79-jre7-alpine
 ---> b3034ce7bae7
Step 2 : ADD ./target/ROOT.war /usr/local/tomcat/webapps/mybank.war
 ---> 6b64b2fbd196
Removing intermediate container 06271aa2cfd5
Successfully built 6b64b2fbd196

#9)查看新生成的镜像
docker images|grep mybank-tomcat
mybank-tomcat       latest               6b64b2fbd196        4 minutes ago       154 MB

#10)测试镜像。通过docker run命令测试新创建的镜像,通过参数-p 8080:8080将容器的8080端口映射到主机的8080端口,方便测试
[root@master mybank-demo-maven]# docker run -it --rm -p 8080:8080 mybank-tomcat
>>INFO: Server startup in 3650 ms

#11)在虚拟机的浏览器中输入网址http://master.example.com:8080/mybank/,可以看到小猪的页面,点击按钮会出现报错,是因为没有安装数据库,之后ctl+c终断

#12)push新生成的镜像到自己的镜像仓库中,在阿里云中可以自己建一个镜像仓库,首先通过tag只想目标仓库的镜像名称
[root@master ~]# docker tag mybank-tomcat:latest registry.cn-hangzhou.aliyuncs.com/ivyfan/dockertest
[root@master ~]# docker push registry.cn-hangzhou.aliyuncs.com/ivyfan/dockertest/mybank-tomcat:latest

Openshift自动构建与部署

实验目的:体会Source to Image(S2I)的流程:
下载源代码或者代码更新 ->上传到代码配置库 -> 定下载到基础镜像环境中编译构建 -> 输出的应用部署到容器中(形成一个包含应用和基础运行环境的崭新镜像)-> 镜像部署到集群

1)下载oc(openshift的command-line)
在官网网页选择你的系统压缩包下载

2)模板构建:通过yaml写的一个文件进行构建,yaml中定义了基础镜像的来源,参考《开源容器云openshift》,但是尝试后发现基础镜像widfly已经不再openshift hub中,因此采用 3)构建

#下载模板
#1)切换到自己的project中
oc project ci3

#2)在github中下载widfly模板
#github中提供了很多模板:#http:github.com/openshift/origin/tree/v1.3.0/examples

oc create -f https://raw.githubusercontent.com/nichochen/openshift-book-source/master/template/wildfly-basic-s2i.template.json  -n ci3
>> template "wildfly-basic-s2i" created

3)在Brose catalog中选择Java,然后是Red Hat JBoss Web Server(Tomcat),再加上app的源代码git Repository URL:https://github.com/nichochen/mybank-demo-maven
等待部署成功 :D

第三节:容器的构建与部署自动化_第1张图片

4)将route添加到hosts中,就可以看见小猪页面了~
4)查看静态配置信息——Build Config

#1)查看build config的配置信息,openshift可以根据这个静态的配置信息触发多次,形成多个构建实例
oc get bc mybank-fxw -o yaml

#2)查看构建记录
oc get build
  1. 查看镜像部署的配置——Deployment Config,即前一BC阶段为了生成一个镜像,并将镜像push到内部镜像仓库中(log中可以查到最后的push),DC阶段是为了将镜像部署到多个pod上
#1)查看DC
oc get dc mybank-fxw -o yaml

如何触发更新

原因:过程简化(openshift触发一次build,再触发一次部署、形成实例)

触发方式:手动触发和web hook触发

#1)为Jenkins授权
oc policy add-role-to-user edit system:service account:ci1:default -n ci1
>>role "edit" added: ["system:service" "account:ci1:default"]

你可能感兴趣的:(第三节:容器的构建与部署自动化)