@(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
4)将route添加到hosts中,就可以看见小猪页面了~
4)查看静态配置信息——Build Config
#1)查看build config的配置信息,openshift可以根据这个静态的配置信息触发多次,形成多个构建实例
oc get bc mybank-fxw -o yaml
#2)查看构建记录
oc get build
- 查看镜像部署的配置——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"]