OpenShift实战(七):OpenShift定制镜像S2I
1、基础镜像制作
由于公司的程序是Java开发,上线发布使用的是maven,如果使用openshift自带的S2I,每次都会全量拉取代码(代码比较多,每次全量拉太慢),然后每次打包都会再一次下载maven插件,官方也有save-artifacts的方法,貌似是保存编译的产物,但是我没有研究成功,所以就用了制作镜像的笨方法进行一些基础环境的搭建。
[root@master1 dockerfile]# cat Dockerfile
# There is a base Dockerfile
# Version 1.0
# Auther is Dukuan FROM centos: MAINTAINER Du Kuan
ADD ./apache-maven-3.0..tar.gz /usr/local/
ADD ./jdk1..0_144.tar.gz /usr/local
ADD ./apache-tomcat-8.5..tar.gz /tmp
ADD ./key.tar.gz /tmp
ADD ./data.tar.gz /
RUN useradd -m tomcat -u && mkdir /home/tomcat/{.ssh,git} && mkdir /data01 && chown -R tomcat.tomcat /data* && mv /tmp/apache-tomcat-8.5. /home/tomcat/ && mv /tmp/id_dsa /home/tomcat/.ssh && mv /tmp/known_hosts /home/tomcat/.ssh && yum install git -y && chown -R tomcat.tomcat /home/tomcat/ && chmod -R a+rw /home/tomcat && chmod a+rwx /home/tomcat/apache-tomcat-8.5./* && chmod +x /home/tomcat/apache-tomcat-8.5.23/bin/*.sh && yum clean all && chmod 600 /home/tomcat/.ssh/id_dsa && su - tomcat -c "cd /home/tomcat/git && git clone git@192.168.1.212:server/walrus-platform.git"
ENV JAVA_HOME=/usr/local/jdk1.8.0_144
ENV PATH=/usr/local/apache-maven-3.0.5/bin:${JAVA_HOME}/bin:${PATH}
USER 1001
# WORKDIR /home/tomcat/git
# RUN git clone git@192.168.1.212:server/walrus-platform.git
WORKDIR /home/tomcat/git/walrus-platform
RUN git checkout develop-feature-4.1-optimiz && mvn compile package -Dmaven.test.skip=true -Ptesting && mvn clean
USER 0
基础镜像Dockerfile
上面的Dockerfile包括拉取全量代码到Tomcat家目录下(公司使用的都是Tomcat用户),然后进行Maven打包,下载对应的插件,最后在clean,然后生成的镜像作为S2I的基础镜像。
执行构建
docker build -t xxx:xxx .
2、安装S2I
安装比较简单,在https://github.com/openshift/source-to-image/releases下载最新版S2I。
tar xf source-to-image-v1..9a-40ad911d-linux-amd64.tar.gz -C /usr/bin/
检验安装
[root@master1 bin]# s2i version
s2i v1..9a
[root@master1 bin]#
检验S2I安装
3、创建S2I
创建一个名为tomcat-s2i的S2I Builder镜像。第三个参数为工作目录的名称。
[root@openshift-master1]s2i create tomcat-s2i tomcat-s2i
[root@openshift-master1 tomcat-s2i]# ls
Dockerfile Makefile README.md s2i test
创建S2I
4、修改S2I的Dockerfile
由于已经制作了基础镜像,所以S2I的Dockerfile只需要将FROM改为上述创建的镜像即可。
# walrus-platform
FROM xxx:xxx
LABEL io.openshift.s2i.scripts-url=image:///usr/libexec/s2i io.k8s.description="Tomcat S2I Builder" io.k8s.display-name="tomcat s2i builder 1.0" io.openshift.expose-services="8080:http" io.openshift.tags="builder, tomcat"
COPY ./s2i/bin/ /usr/libexec/s2i
RUN chown -R tomcat.tomcat /usr/libexec/s2i && chmod +x /usr/libexec/s2i/bin/*
USER 1001
# 端口
EXPOSE 8080
ENTRYPOINT []
CMD ["usage"]
S2I Dockfile
5、修改S2I的assemble
assemble主要写一些编译的参数或命令,主要用于写重构的步骤,由于上述采用的定制的基础镜像,并将全部代码放到了Tomcat下,所以直接在Tomcat的家目录下进行操作,忽略openshift自带的build,相当于欺骗了openshift,用于避免每次全量拉取代码和每次重构下载插件。
#!/bin/bash -e
#
# S2I assemble script for the 'walrus' image.
# The 'assemble' script builds your application source so that it is ready to run.
#
# For more information refer to the documentation:
# https://github.com/openshift/source-to-image/blob/master/docs/builder_image.md
# # If the 'walrus' assemble script is executed with the '-h' flag, print the usage.
if [[ "$1" == "-h" ]]; then
exec /usr/libexec/s2i/usage
fi # Restore artifacts from the previous build (if they exist).
#
if [ "$(ls /tmp/artifacts/ 2>/dev/null)" ]; then
echo "---> Restoring build artifacts..."
mv /tmp/artifacts/. ./
fi echo "---> Installing application source..."
echo "+++++++++++++++++++++++${POM_ENV}++++++++++++++"
# WORKDIR on xxx now
mvn compile package -Dmaven.test.skip=true -P${POM_ENV}
find . -type f -name "*${WAR_NAME}*" | xargs -i cp {} /home/tomcat/apache-tomcat-8.5./webapps
mvn clean
rm -rf ./*
echo "---> Building application from source..."
# TODO: Add build steps for your application, eg npm install, bundle install, pip install, etc.
assemble
6、修改S2I的run
此文件主要写容器启动后需要执行的命令,我公司的就是启动Tomcat。
#!/bin/bash -e
#
# S2I run script for the 'walrus-platform' image.
# The run script executes the server that runs your application.
#
# For more information see the documentation:
# https://github.com/openshift/source-to-image/blob/master/docs/builder_image.md
# /home/tomcat/apache-tomcat-8.5./bin/startup.sh
tail -f /home/tomcat/apache-tomcat-8.5./logs/catalina.out
run
7、执行构建
通过执行make进行构建,通过docker images查看生成的镜像,镜像名称即为创建S2I写的名字
8、导入S2I
由于生成的S2I在本地,它需要能被openshift的所有节点都能下载,所以讲它直接push到自己的私有仓库中,如果没有私有仓库,可以使用docker-registry搭建一个简易的。
yum install docker-registry
systemctl start docker-distribution.service
systemctl enable docker-distribution.service
修改所有节点Docker配置
[root@master1]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker # Modify these options if you want to change the way the docker daemon runs
#OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
OPTIONS=' --selinux-enabled --log-driver=journald --registry-mirror=https://docker.mirrors.ustc.edu.cn --insecure-registry=172.30.0.0/16 --insecure-registry 192.168.10.110:5000'
安装docker-registry
其中--insecure-registry 192.168.10.110:5000为自己的私有仓库。
添加tag并push
docker tag walrus-platform 192.168.10.110:/xxx
docker push 192.168.10.110:/xxx
push镜像
导入镜像到IS
[root@master1 walrus-platform]# oc project openshift
Now using project "openshift" on server "https://master1.xxx.net:8443".
[root@master1 walrus-platform]# oc import-image 192.168.10.110:/walrus-platform -n openshift --confirm --insecure
The import completed successfully. Name: walrus-platform
Namespace: openshift
Created: Less than a second ago
Labels: <none>
Annotations: openshift.io/image.dockerRepositoryCheck=--19T07::21Z
Docker Pull Spec: docker-registry.default.svc:/openshift/walrus-platform
Image Lookup: local=false
Unique Images:
Tags: latest
tagged from 192.168.10.110:/walrus-platform
will use insecure HTTPS or HTTP connections * 192.168.10.110:/walrus-platform@sha256:0b963c801da6e40c3a201449c504ab8f605ea8db6054dea6873ac6e80b3c718d
Less than a second ago Image Name: walrus-platform:latest
Docker Image: 192.168.10.110:/walrus-platform@sha256:0b963c801da6e40c3a201449c504ab8f605ea8db6054dea6873ac6e80b3c718d
Name: sha256:0b963c801da6e40c3a201449c504ab8f605ea8db6054dea6873ac6e80b3c718d
Created: Less than a second ago
Image Size: MB (first layer 1.188 kB, last binary layer 70.08 MB)
Image Created: minutes ago
Author: <none>
Arch: amd64
Command: usage
Working Dir: /home/tomcat/git/walrus-platform
User:
Exposes Ports: /tcp
Docker Labels: build-date=
io.k8s.description=Tomcat S2I Builder
io.k8s.display-name=tomcat s2i builder 1.0
io.openshift.expose-services=:http
io.openshift.s2i.scripts-url=image:///usr/libexec/s2i
io.openshift.tags=builder, tomcat
license=GPLv2
name=CentOS Base Image
vendor=CentOS
Environment: PATH=/usr/local/apache-maven-3.0./bin:/usr/local/jdk1..0_144/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/local/jdk1..0_144
导入镜像
9、修改信息
修改注释让openshift识别出这个镜像:
oc edit is/walrus-platform -n openshift
修改如下:

10、查看镜像
登录控制台查看:

OpenShift实战(七):OpenShift定制镜像S2I的更多相关文章
- Docker实战(七)之为镜像添加SSH服务
1.基于commit命令创建 Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像.命令格式为docker commit CONTAINER [REPOS ...
- Docker用Dockerfile定制镜像
用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...
- Docker - 定制镜像
Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...
- Docker入门之--定制镜像
1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...
- docker自定制镜像
概述 很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件 ...
- docker之常用命令、自定制镜像、公(私)仓库的上传和下载
一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...
- 利用dockerfile定制镜像
利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- Docker Dockerfile 定制镜像(转)
转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...
随机推荐
- H3C数据中心虚拟化解决方案技术白皮书
缩略语清单: 缩略语 英文全名 中文解释 IDC Internet Data Center 互联网数据中心 VRF Virtual Router Forwarding 虚拟路由器转发 SMP Symm ...
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...
- Swift基础之显示波纹样式
最近项目用到了蓝牙连接,搜索设备的内容,其中需要搜索过程中出现波纹的动画效果,在这里将项目中OC语言编写的这种动画效果,转换成Swift编写,下面简单介绍说明一下代码. 这里用到了两种方法实现波纹效果 ...
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...
- iOS中 GCD-Grand Central Dispath 多线程 UI_21
GCD:Grand Central Dispath "牛逼的中枢调度器";是纯C语言编写的,提供了很多比较强大的函数 GCD:优势 1.目前是苹果主推的线程管理方式 2.它会自动的 ...
- Touch Handling in Cocos2D 3.x(四)
创建触摸生命周期 让我们改善我们的应用程序.如果玩家可以触摸屏幕并且拖放英雄到指定位置不是更好吗? 为了完成这个功能我们必须使用Cocos2d 3.0提供的所有的触摸事件: touchBegan:在用 ...
- Android Wear开发
Android Wear从2014年3月发布到现在已经从1.0发展到2.0(目前还没正式发布).其产品定位也发化了巨大变化,因为Android Wear 1.0通讯方式只有蓝牙,限定了系统,比较依赖手 ...
- 比较ArrayList、LinkedList、Vector
翻译人员: 铁锚 翻译时间: 2013年12月2日 原文链接: ArrayList vs. LinkedList vs. Vector 1. List概述 List,就如图名字所示一样,是元素的有序列 ...
- ABB机器人基础培训资料整理与总结
之前对机械臂了解较少,这方面知识比较匮乏.只使用过PowercCube六自由度机械臂. 感谢ABB公司何老师的耐心指导. 学习资料汇总:(最重要的ABB Robot 官网就不列出了,这里以中文资料为主 ...
- (五十一)KVC与KVO详解
KVC的全称为key value coding,它是一种使用字符串间接更改对象属性的方法. 假设有一个Person类和一个Student类,其中Person类有age.name两个属性,Student ...