openshift 容器云从入门到崩溃之六《Source-to-Image》
上次说到了怎么在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》的更多相关文章
- openshift 容器云从入门到崩溃之八《日志聚合》
日志可以分为两部分 业务日志 业务日志一般是要长期保留的,以供以后有问题随时查询,elk是现在比较流行的日志方案,但是容器日志最好不要落地所以不能把logstash客户端包在容器里面 可以使用logs ...
- openshift 容器云从入门到崩溃之五《部署应用》
1.配置部署模板 配置好用户权限之后就可以部署应用了oc常用的两种部署方式: Deploy Image方式 优点:这种方式是最简单的部署方式,你只需要有一个容器镜像就行了或者公开的docker hub ...
- openshift 容器云从入门到崩溃之二《准备环境》
openshift 从3.9开始就开始支持系统组件在容器里运行了,之前版本都是直接运行在操作系统上,名字也改了叫OKD 目前最新的稳定版本是3.11,所以就安装3.11版本 准备环境: 主机名 系统 ...
- openshift 容器云从入门到崩溃之一《容器能解决什么问题》
容器前时代 说到容器大多数人想到的就是docker,docker的迅速崛起使得使用容器的门槛大大降低了,我第一次接触docker还是14年,那时候作为一名运维部署应用还在大量使用虚拟化,从vmware ...
- openshift 容器云从入门到崩溃之九《容器监控-报警》
容器状态监控 主要是监控POD的状态包括重启.不健康等等这些k8s api 状态本身会报出来,在配合zabbix报警 导入zabbix模板关联上oc master主机 <?xml version ...
- openshift 容器云从入门到崩溃之七《数据持久化》
数据持久化常用的有两种: hostPath 挂载容器宿主机的本地文件夹,直接修改pod的配置 volumes: - hostPath: path: /data/logging-es type: '' ...
- openshift 容器云从入门到崩溃之三《安装openshift》
准备好环境,在安装之前请先了解openshift提供的ansible有大量的安装选项 文档地址:https://docs.okd.io/latest/install/configuring_inven ...
- openshift 容器云从入门到崩溃之十《容器监控-数据展示》
POD资源历史曲线(CPU.内存.网络) 监控方案heapster+hawkular-metrics+hawkular-cassandra heapster负责收集数据 hawkular-cassan ...
- openshift 容器云从入门到崩溃之四《配置用户验证》
1.配置本地用户 之前安装的时候选择了htpasswd验证方式 先创建用户 # htpasswd -c /etc/origin/master/htpasswd admin 授权为集群管理员 # oc ...
随机推荐
- 隐马尔可夫模型:HMM
隐马尔可夫模型求解三大问题实例剖析 HMM 模型如图所示: 一.隐马尔可夫模型定义 隐马尔可夫模型由初始概率分布.状态转移概率分布以及观测概率分布确定. 设 Q(图中的q)是所有可能的状态的集合,V( ...
- 让Elasticsearch集群冷热分离、读写分离【转】
转自:https://blog.csdn.net/jiao_fuyou/article/details/50511255 根据Elasticsearch中文社区<ES冷热分离(读写分离) hot ...
- windows nginx配置https访问
本文主要记录在windows下安装nginx 环境:win10-64位. 1. 到nginx官网上下载相应的安装包,http://nginx.org/en/download.html: 下载进行解压 ...
- linux下反编译android apk
1.所需要的工具 1)apktool,功能:反编译出apk所需要的资源文件和布局设置文件等, 下载地址:https://code.google.com/p/android-apktool/downlo ...
- Linux下查看内存使用情况方法总结
Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内 ...
- Bayesian RL and PGMRL
简介: PGMRL: PGMRL就是把RL问题建模成一个概率图模型,如下图所示: 然后通过variational inference的方法进行学习: PGMRL给RL问题的表示给了一个范例,对解决很多 ...
- 【React + flask】跨域服务及访问
Flask from flask import Flask , request from flask_cors import * import flask import json import pic ...
- PXE(preboot execution environment):【网络】预启动执行环节:引导 live光盘 ubuntu livecd 18.04+:成功
比较艰难的成功了. 艰难在于:吱吱吱吱(知知知知知):就是歌init启动参数而已! 最最艰难在于:这个nfs服务器软件有很大的关系.很多时候不是你不行,而是条件不具备 or 条件看似具备但其实有问题 ...
- Flask学习笔记(3)--路由
0x01 参数传递 传递参数的语法是: /<参数名>/,然后在视图函数中,也要定义同名的参数. 参数的数据类型: 1.如果没有指定具体的数据类型,那么默认就是使用string 数据类型. ...
- osggeometry修改更新顶点
osg::Geometry *geometry = geode->getDrawable()->asGeometry();geometry->setDataVariance(osg: ...