上次说到了怎么在oc上面部署应用而且说道了怎么定义模板部署应用,也许你会奇怪那个我代码打包编译在哪一步,那就要说道oc的s2i流程了

下面是基本s2i流程

1、制作base-image镜像

要使用s2i流程首先需要打好包含s2i程序的镜像

准备s2i脚本

1、下载s2i程序

https://github.com/openshift/source-to-image/releases/

2、生成s2i脚本

# s2i create openresty s2i-openresty
# cd s2i-openresty
# ls
# cd s2i/bin
# ls

assemble 复杂编译打包应用是在Build的时候执行的

run 负责启动应用是在deployment之后容器的来的时候执行的

下面是一个nginx镜像的例子:
PS:这里我应的ubuntu镜像强烈建议使用oc提供的openshift/base-centos7 不然你会遇到很多SCC的问题

# cat Dockerfile
FROM ubuntu:16.04
MAINTAINER sen.zhang@downtown8.com LABEL \
io.openshift.s2i.scripts-url=image:///usr/libexec/s2i ENV \
STI_SCRIPTS_PATH=/usr/libexec/s2i COPY ./sources.list /etc/apt/ RUN set -x \
&& apt-get -y update \
&& apt-get -y install libpcre3-dev libssl-dev perl make build-essential curl \
sudo vim telnet net-tools iputils-ping psmisc git wget COPY ./src/ /usr/local/src/ RUN set -x \
&& cd /usr/local/src/sregex \
&& make -j4 \
&& make install \
&& cd /usr/local/src/openresty \
&& ./configure \
--prefix=/data/app/openresty \
--error-log-path=/data/logs/nginx/error.log \
--http-log-path=/data/logs/nginx/access.log \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-stream=dynamic \
--with-openssl=/usr/local/src/openssl \
--add-dynamic-module=/usr/local/src/nchan \
--add-module=/usr/local/src/replace-filter-nginx-module \
&& make -j4 \
&& make install \
&& rm -rf usr/local/src/* RUN set -x \
&& mkdir -p /data/disk-mem /data/disk-cache /data/logs/nginx \
&& ln -s /data/app/openresty/nginx/sbin/* /sbin/ \
&& ln -sf /bin/bash /bin/sh \
&& ln -sf /usr/local/lib/libsregex.so.0 /lib/libsregex.so.0 \
&& /data/app/openresty/nginx/sbin/nginx -V \
&& useradd www -u 1001 \
&& echo "www ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
&& chown -R www.www /data COPY ./s2i/bin/ /usr/libexec/s2i USER 1001
EXPOSE 80 8080
CMD ["/usr/libexec/s2i/usage"]

强烈建议assemble具体逻辑放到网络脚本当中不然会经常要改base镜像

# cat assemble
#!/bin/bash -e #执行自定义动作
curl http://build.xxx.cn/build/nginx/nginx_s2i_build.sh |sh

run脚本就可以写死了

#!/bin/bash -e
echo "开始运行...." #处理dns
nginx_conf="/data/app/openresty/nginx/conf/nginx.conf"
nameserver=`cat /etc/resolv.conf |grep nameserver |head -n |awk '{print $2}'`
echo "resolver=$nameserver"
sed -i s/223.5.5.5/$nameserver/g $nginx_conf #启动nginx
echo 'sudo nginx -g "daemon off;"'
sudo nginx -g "daemon off;"

2、上传镜像到docker-registry

oc安装的时候默认在default项目会默认安装一个docker-registry,作用是保存base-image、build-image

刚才制作的base-image就可以上传到docker 仓库当中了

# docker build -t="registry.oc.example.com/openshift/nginx:latest
# docker login -u"default/api-admin" -p"$token" registry.oc.example.com
# docker push registry.oc.example.com/openshift/nginx:latest

还记得上节那个自定义模板中的${APP_BUILDER_IMAGE}变量应该填写nginx:latest

openshift 容器云从入门到崩溃之六《Source-to-Image》的更多相关文章

  1. openshift 容器云从入门到崩溃之八《日志聚合》

    日志可以分为两部分 业务日志 业务日志一般是要长期保留的,以供以后有问题随时查询,elk是现在比较流行的日志方案,但是容器日志最好不要落地所以不能把logstash客户端包在容器里面 可以使用logs ...

  2. openshift 容器云从入门到崩溃之五《部署应用》

    1.配置部署模板 配置好用户权限之后就可以部署应用了oc常用的两种部署方式: Deploy Image方式 优点:这种方式是最简单的部署方式,你只需要有一个容器镜像就行了或者公开的docker hub ...

  3. openshift 容器云从入门到崩溃之二《准备环境》

    openshift 从3.9开始就开始支持系统组件在容器里运行了,之前版本都是直接运行在操作系统上,名字也改了叫OKD 目前最新的稳定版本是3.11,所以就安装3.11版本 准备环境: 主机名 系统 ...

  4. openshift 容器云从入门到崩溃之一《容器能解决什么问题》

    容器前时代 说到容器大多数人想到的就是docker,docker的迅速崛起使得使用容器的门槛大大降低了,我第一次接触docker还是14年,那时候作为一名运维部署应用还在大量使用虚拟化,从vmware ...

  5. openshift 容器云从入门到崩溃之九《容器监控-报警》

    容器状态监控 主要是监控POD的状态包括重启.不健康等等这些k8s api 状态本身会报出来,在配合zabbix报警 导入zabbix模板关联上oc master主机 <?xml version ...

  6. openshift 容器云从入门到崩溃之七《数据持久化》

    数据持久化常用的有两种: hostPath 挂载容器宿主机的本地文件夹,直接修改pod的配置 volumes: - hostPath: path: /data/logging-es type: '' ...

  7. openshift 容器云从入门到崩溃之三《安装openshift》

    准备好环境,在安装之前请先了解openshift提供的ansible有大量的安装选项 文档地址:https://docs.okd.io/latest/install/configuring_inven ...

  8. openshift 容器云从入门到崩溃之十《容器监控-数据展示》

    POD资源历史曲线(CPU.内存.网络) 监控方案heapster+hawkular-metrics+hawkular-cassandra heapster负责收集数据 hawkular-cassan ...

  9. openshift 容器云从入门到崩溃之四《配置用户验证》

    1.配置本地用户 之前安装的时候选择了htpasswd验证方式 先创建用户 # htpasswd -c /etc/origin/master/htpasswd admin 授权为集群管理员 # oc ...

随机推荐

  1. tensorflow 笔记14:tf.expand_dims和tf.squeeze函数

    tf.expand_dims和tf.squeeze函数 一.tf.expand_dims() Function tf.expand_dims(input, axis=None, name=None, ...

  2. 2018铁三测评题write以及一些想送给你们的话

    一..前言 此文献给实验室的萌新们,以及刚刚接触CTF的同学们,希望能对你们的成长起到一些帮助. 二.关于CTF 可能你已经接触过CTF或者对它有所了解,这里我再简单介绍一下. 1.什么是CTF? C ...

  3. PowerDesigner数据库设计PDM基于Excel的导入导出总结

    经常用到pdm来管理代码,一两张表,手写一下还凑合,一旦表多了,就慌了.于是,开始学习用vbs进行Excel的来快速导入导出操作PDM就变得很紧急了,搜罗了网络上的很多vbs脚本,各有各的优点,但对于 ...

  4. linux搭建FTP服务器并整合Nginx

    操作系统:Centos7 1.1.服务器配置 # 关闭SELINUX,把SELINUX=enforcing改为SELINUX=disabled,reboot重启服务器生效 vim /etc/sysco ...

  5. 在Linux下使用gcc编译mesa文件报undefined reference to symbol 'sin@@GLIBC_2.2.5和DSO missing from command line两个错误的解决方案

    一.概述 在Linux系统下使用gcc编译用C语言写的mesa的示例程序. 环境:Ubuntu Server 18.04.1 二.问题的出现 在Ubuntu下安装好mesa所需的库文件,将目标文件从g ...

  6. .net IIS MVC Rest api 跨域 PUT DELETE 404 无法使用问题解决方案

    一.WebConfig配置法(system.webServer 重点是 httpProtocol handlers) http://www.jinxuliang.com/blog/article/re ...

  7. The client and server cannot communicate, because they do not possess a common algorithm

    The client and server cannot communicate, because they do not possess a common algorithm This was re ...

  8. 21 go并发编程-下

    如何等待一组goroutine结束 1. 使用不带缓冲区的channel实现. 原理: 每个goroutine都往一个channel里写入一个值,然后我们去遍历这个管道的数值,由于不带缓冲区,那么必须 ...

  9. Thread线程中断相关方法

    public class Demo { /* * 线程中断相关方法 * ---------------------------------------------------------------- ...

  10. [原]CentOS7安装Rancher2.1并部署kubernetes (一)---部署Rancher

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...