OpenShift实战(七):OpenShift定制镜像S2I

dukuan 2018-05-03 原文

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:6

MAINTAINER Du Kuan
ADD ./apache-maven-3.0.5.tar.gz /usr/local/
ADD ./jdk1.8.0_144.tar.gz /usr/local
ADD ./apache-tomcat-8.5.23.tar.gz /tmp
ADD ./key.tar.gz /tmp
ADD ./data.tar.gz /
RUN  useradd -m tomcat -u 1001 && mkdir /home/tomcat/{.ssh,git} && mkdir /data01 && chown -R tomcat.tomcat /data* && mv /tmp/apache-tomcat-8.5.23 /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.23/* && 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.1.9a-40ad911d-linux-amd64.tar.gz -C /usr/bin/

  检验安装

[root@master1 bin]# s2i version
s2i v1.1.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.23/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.23/bin/startup.sh
tail -f /home/tomcat/apache-tomcat-8.5.23/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:5000/xxx
docker push 192.168.10.110:5000/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:5000/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=2018-03-19T07:14:21Z
Docker Pull Spec:    docker-registry.default.svc:5000/openshift/walrus-platform
Image Lookup:        local=false
Unique Images:        1
Tags:            1

latest
  tagged from 192.168.10.110:5000/walrus-platform
    will use insecure HTTPS or HTTP connections

  * 192.168.10.110:5000/walrus-platform@sha256:0b963c801da6e40c3a201449c504ab8f605ea8db6054dea6873ac6e80b3c718d
      Less than a second ago

Image Name:    walrus-platform:latest
Docker Image:    192.168.10.110:5000/walrus-platform@sha256:0b963c801da6e40c3a201449c504ab8f605ea8db6054dea6873ac6e80b3c718d
Name:        sha256:0b963c801da6e40c3a201449c504ab8f605ea8db6054dea6873ac6e80b3c718d
Created:    Less than a second ago
Image Size:    625 MB (first layer 1.188 kB, last binary layer 70.08 MB)
Image Created:    19 minutes ago
Author:        <none>
Arch:        amd64
Command:    usage
Working Dir:    /home/tomcat/git/walrus-platform
User:        1001
Exposes Ports:    8080/tcp
Docker Labels:    build-date=20180302
        io.k8s.description=Tomcat S2I Builder
        io.k8s.display-name=tomcat s2i builder 1.0
        io.openshift.expose-services=8080: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.5/bin:/usr/local/jdk1.8.0_144/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        JAVA_HOME=/usr/local/jdk1.8.0_144

导入镜像

 

9、修改信息

  修改注释让openshift识别出这个镜像:

oc edit is/walrus-platform -n openshift

  修改如下:

  

 

10、查看镜像

  登录控制台查看:

  

 

发表于 2018-05-03 19:04 杜先生的博客 阅读() 评论() 编辑 收藏

 

版权声明:本文为dukuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dukuan/p/8986966.html

OpenShift实战(七):OpenShift定制镜像S2I的更多相关文章

  1. Openshift 4.4 静态 IP 离线安装系列:准备离线资源

    原文链接:https://fuckcloudnative.io/posts/openshift4.4-inst […]...

  2. 009.OpenShift管理及监控

    一 资源限制 1.1 pod资源限制 pod可以包括资源请求和资源限制: 资源请求 用于调度,并控制pod不能 […]...

  3. Openshift 4.4 静态 IP 离线安装系列:准备离线资源

    原文链接:https://fuckcloudnative.io/posts/openshift4.4-inst […]...

  4. OpenShift实战(二):OpenShift节点扩容

    OpenShift实战(二):OpenShift节点扩容 1、新增节点信息   增加节点如下,请将xxx改为自 […]...

  5. OpenShift实战(三):OpenShift持久化存储Registry

    OpenShift实战(三):OpenShift持久化存储Registry 1、查看Registry组件的DC […]...

  6. 007.OpenShift管理应用部署

    一 REPLICATION CONTROLLERS 1.1 RC概述 RC确保pod指定数量的副本一直运行。如 […]...

  7. Openshift 4.4 静态 IP 离线安装系列:初始安装

    上篇文章准备了离线安装 OCP 所需要的离线资源,包括安装镜像、所有样例 Image Stream 和 Ope […]...

  8. openshift 4.3 Istio的搭建(istio 系列一)

    openshift 4.3 Istio的搭建 本文档覆盖了官方文档的Setup的所有章节 目录 openshi […]...

随机推荐

  1. 机器学习(一):5分钟理解机器学习并上手实践

    引言 现在市面上的机器学习教程大多先学习数学基础,然后学机器学习的数学算法,再建立机器学习的数学模型,再学习深 […]...

  2. (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线

    1 简介   在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步 […]...

  3. (项目)在线教育平台(六)

    八、授课机构功能 1、模板继承   如果几个页面的大体结构相同,可以使用继承的方式来实现母版的重用性,也就是子 […]...

  4. React 中的 onInput/onChange

    参考链接:https://stackoverflow.com/questions/38256332/in-re […]...

  5. 如何制作一台双目结构光三维扫描仪(一)

    本文由作者原创,禁止转载! (一)原理简述与硬件设备与模块划分 写在前面的话 从2017年秋到2019年夏,从 […]...

  6. socket 映射服务器程序

    server #include <stdio.h> #include <sys/types. […]...

  7. 爬取链家北京市二手房的单个房源页信息

    1、环境安装 (1)安装Anaconda:   下载地址:https://www.anaconda.com/p […]...

  8. Dapper使用技巧分享

    Dapper使用技巧分享 Dapper是轻量级的.net ORM框架,配合linq和泛型,让C#操作数据的代码 […]...

展开目录

目录导航