以下制作nginx镜像过程,分以下几步
1.制作dockerfile文件
包括nginx.sh的nginx安装脚本
2.制作ngx-depoly.yaml文件
包括k8s service,deployment,pv,pvc,nfs
流程如下:

以下是具体内容

制作dockerfile

#mkdir /root/dockerfile
#cd /root/dockerfile
#touch Dockerfile
#mkdir nginx制作dockerfile文件
root@<cc_172.16.0.2|~/dockerfile/nginx>:#cat Dockerfile
#Centos based container with tengine2.2
FROM docker.io/centos
MAINTAINER  wbb-20181207 wbb@qq.com#prepare java environment
ENV LD_LIBRARY_PATH /usr/local/luajit/lib:$LD_LIBRARY_PATH
ENV LUAJIT_INC /usr/local/luajit/include/luajit-2.0
ENV LUAJIT_LIB /usr/local/luajit/lib#copy jdk tomcat to container
ADD nginx.tar.gz  /root/RUN cd /root/nginx/ \
&& sh ngxinstall.sh \             #nginx.sh安装脚本单独用脚本编写,下面有展示
&& ln -sf /dev/stdout /var/log/nginx/access.log \    #让nginx日志在k8s的web-ui里显示出来,如下图
&& ln -sf /dev/stderr /var/log/nginx/error.log#private expose
EXPOSE 80 #START NGINX
#ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]     一定要前台运行,不然k8s在deploy中无法创建成功
cd /root/dockerfile
docker build -t nginx:v4 .

安装过程部分截图

ngxinstall.sh 安装脚本,在dockerfile中引用,以下安装脚本最好先在1台机器测试好,没问题直接在dockerfile引用即可

制作nginx.sh的nginx安装脚本

root@<cc_172.16.0.2|~/dockerfile/nginx/nginx>:#cat ngxinstall.sh
#!/bin/bash
path=$(pwd)#安装依赖包
yum makecache
yum -y install gcc gcc-c++ patch make openssl openssl-devel file#解压
tar zxvf $path/tar/tengine-2.2.0.tar.gz -C $path/src/
#tar zxvf $path/tar/openssl-1.0.2p.tar.gz -C $path/src/
tar zxvf $path/tar/zlib-1.2.11.tar.gz -C $path/src/
tar zxvf $path/tar/nginx-accesskey.tar.gz -C $path/src/
tar zxvf $path/tar/pcre-8.40.tar.gz -C $path/src/
tar zxvf $path/tar/waf.tar.gz -C $path/src/
tar zxvf $path/tar/nginx_tcp_proxy_module-master.tar.gz -C $path/src/
tar zxvf $path/tar/LuaJIT-2.0.5.tar.gz -C $path/src/
tar zxvf $path/tar/ngx_devel_kit-0.2.19.tar.gz -C $path/src/
tar zxvf $path/tar/lua-nginx-module-0.9.5rc2.tar.gz -C $path/src/#环境变量
echo "export LD_LIBRARY_PATH=/usr/local/luajit/lib:$LD_LIBRARY_PATH" >> /etc/profile
echo "export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0" >> /etc/profile
echo "export LUAJIT_LIB=/usr/local/luajit/lib" >> /etc/profile && source /etc/profilesource /etc/profile
cd $path/src/LuaJIT-2.0.5
make PREFIX=/usr/local/luajit
make install PREFIX=/usr/local/luajit#tengine
#useradd -s /sbin/nologin nginx
cd $path/src/tengine-2.2.0
patch -p1 < $path/src/nginx_tcp_proxy_module-master/tcp.patch./configure --user=root --group=root \
--prefix=/usr/local/nginx \
--lock-path=/var/run/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--pid-path=/var/run/nginx.pid \
--add-module=../ngx_devel_kit-0.2.19 \
--add-module=../lua-nginx-module-0.9.5rc2 \
--add-module=../nginx-accesskey-2.0.3 \
--add-module=../nginx_tcp_proxy_module-master \
--with-pcre=../pcre-8.40 \
--with-zlib=../zlib-1.2.11 \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_auth_request_module \
--with-http_v2_module \
--with-http_addition_module \
--with-http_sub_module \
--with-file-aio \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' \
--with-ld-opt=-Wl,-rpath,/usr/local/libsource /etc/profile
make
make install#以下是把相关的配置文件也写好,直接复制过去即可,只包括一些模块文件,具体的域名的.conf文件在后面引用即可
cp $path/src/nginx.conf /usr/local/nginx/conf/
cp $path/src/proxy.conf /usr/local/nginx/conf/
cp $path/src/error.conf /usr/local/nginx/conf/
cp -r $path/src/html /usr/local/nginx/
cp -r $path/src/waf /usr/local/nginx/conf/
mkdir -p /usr/local/nginx/vhost
mkdir -p /usr/local/nginx/tcp
cp $path/src/default.conf /usr/local/nginx/vhost/
cp $path/src/tcp.conf /usr/local/nginx/tcp/   #支持tcp模块
rm -rf /root/nginx           #删除安装文件

制作ngx-depolyment.yaml文件

---
#定义nginx命名空间
apiVersion: v1
kind: Namespace
metadata:name: k8s-go---
#定义nginx svc
apiVersion: v1
kind: Service
metadata:name: k8s-nginxnamespace: k8s-golabels:app: k8s-nginx
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 10280protocol: TCP#clusterIP: 169.169.249.80selector:app: k8s-nginx---apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploynamespace: k8s-golabels:app: k8s-nginx
spec:replicas: 1selector:matchLabels:app: k8s-nginxtemplate:metadata:labels:app: k8s-nginxannotations:app: nginx-clousterspec:containers:- name: nginximage: 172.16.0.2:5000/nginx:v4   #从私有仓加载imagePullPolicy: Always    #只从私有仓加载,不放到node节点volumeMounts:- mountPath: /usr/local/wwwname: nginx-data#- mountPath: /etc/nginx/conf.d#  name: nginx-confresources:limits:cpu: 300mmemory: 3000Mirequests:cpu: 100mmemory: 100Miports:- containerPort: 80volumes:- name: nginx-datapersistentVolumeClaim:claimName: nginx-data-nfs-pvc    #挂载nginx 数据文件pvc,后面展示详细pv,pvc内容- name: nginx-confpersistentVolumeClaim:claimName: nginx-conf-nfs-pvc    #挂载nginx 域名配置文件pvc,后面展示详细pv,pvc内容#volumes:#  - name: nginx-nfs#    nfs:#      server: 172.16.0.2#      path: /data/nfs-storage/nginx

制作nginx-data-nfs-pv nginx-data-nfs-pvc

#root@<cc_172.16.0.2|~/project/ngx>:#cat ngx-data-nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: nginx-data-nfs-pvnamespace: k8s-golabels:pv: nginx-data-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteManynfs:server: 172.16.0.2path: "/data/nfs-storage/nginx/data/"
-----
#root@<cc_172.16.0.2|~/project/ngx>:#cat ngx-data-nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-data-nfs-pvcnamespace: k8s-go
spec:accessModes:- ReadWriteManyresources:requests:storage: 5Giselector:matchLabels:pv: nginx-data-pv

制作nginx-conf-nfs-pv nginx-conf-nfs-pvc

#root@<cc_172.16.0.2|~/project/ngx>:#cat ngx-conf-nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: nginx-conf-nfs-pv    #命名最好规范一下,方便后面使用namespace: k8s-golabels:pv: nginx-conf-pv      #pvc绑定此pv这里是通过标签来选择,所以要保持一致
spec:capacity:storage: 500MiaccessModes:- ReadWriteManynfs:server: 172.16.0.2                      #已搭建的nfspath: "/data/nfs-storage/nginx/conf/"-----
#root@<cc_172.16.0.2|~/project/ngx>:#cat ngx-conf-nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-conf-nfs-pvcnamespace: k8s-go
spec:accessModes:- ReadWriteManyresources:requests:storage: 500Miselector:                         #通过标签选择器来绑定相应pvcmatchLabels:pv: nginx-conf-pv

制作NFS

#root@<cc_172.16.0.2|~/project/ngx>:#cat /etc/exports
/data/nfs-storage/nginx *(rw,insecure,sync,no_subtree_check,no_root_squash)
/data/nfs-storage/tomcat *(rw,insecure,sync,no_subtree_check,no_root_squash)
/data/nfs-storage/app *(rw,insecure,sync,no_subtree_check,no_root_squash)#root@<cc_172.16.0.2|/data/nfs-storage/nginx>:#ls
conf  data  sslconf里为相应域名的.conf文件,例如default.conf
data里为相应域名的.conf文件里的静态文件加载路径,此处不要搞错
ssl里为相应域名的证书文件,例如default.pem,default.key及ssh.conf配置文件

k8s dashboard中显示的生成的nginx pod,

外网访问显示测试页

nginx日志在web-ui中显示,要在此显示日志,就必须在dockerfile中定义,不然是不是会显示的.因为k8s展示的日志是从/dev/stdout /dev/stderr 里获取的

转载于:https://blog.51cto.com/running/2327816

dockerfile制作镜像及k8s中应用相关推荐

  1. 基于Dockerfile制作镜像

    <基于Dockerfile制作镜像> 目录... 2 一.Dockerfile简介及书写规则... 3 1.FROM(指定基础image)... 3 2.MAINTAINER(用来指定镜像 ...

  2. ad如何镜像器件_使用 Dockerfile 制作镜像

    前面几篇文章已经给大家介绍了 Docker 的基本概念,相信大家也会使用 Docker 运行自己想要的容器了.但是只有学会制作镜像,才能将 Docker 应用到我们的项目中去.下面我们就来学习如何使用 ...

  3. 【Docker】镜像制作及使用Dockerfile制作镜像

    Docker镜像制作 1.镜像构成 2.使用容器制作镜像 Dockerfile是一个用于描述生产docker镜像的文件,它里面是一条条的指令,每条指令都会对镜像产生一定影响. 1.将springboo ...

  4. docker -- dockerfile制作镜像

    基于容器手动制作镜像步骤具体如下: 下载一个系统的官方基础镜像,如: CentOS 或 Ubuntu 基于基础镜像启动一个容器,并进入到容器 在容器里面做配置操作 安装基础命令 配置运行环境 安装服务 ...

  5. 【5】dockerfile制作镜像

    dockerfile自己制作镜像 关键词 dockerfile自己制作镜像 docker build 一.简介 Docker 创建镜像主要有三种: 基于已有的镜像创建: 基于 Dockerfile 来 ...

  6. Docker搭建个人网盘和私人仓库,创建Dockerfile制作镜像

    1.使用mysql:5.6和 owncloud 镜像,构建一个个人网盘. 2.安装搭建私有仓库 Harbor 3.编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1 ...

  7. 通过dockerfile制作镜像

    Dockerfile是一个用于构建Docker镜像的文本文件,其中包含了创建Docker镜像的全部指令.就是将我们安装环境的每个步骤使用指令的形式存放在一个文件中,最后生成一个需要的环境. Docke ...

  8. 使用Dockerfile制作镜像

    组成部分 基础镜像信息       FROM 维护者信息    MAINTAINER.LABEL 镜像操作指令       RUN.COPY.ADD.EXPOSE.WORKDIR.ONBUILD.US ...

  9. Dockerfile制作镜像

    dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工 ...

最新文章

  1. HACKER'S DELIGHT[算法心得]笔记
  2. java计算器程序代码实现加减乘除_Python+tkinter能实现计算器!太神奇了
  3. MS12-042 用户态调度机制特权提升漏洞
  4. gstreamer开发日志
  5. hdu1526 二分匹配+ floyd
  6. 一个老程序员的30年生涯回顾(译文)
  7. TCP/IP / 三次握手之状态转换图和原因
  8. 咋样路linux分区,linux下磁盘分区方法详解
  9. 微软电脑适合什么人用_眼膜适合什么年龄段的人使用呢?什么年龄段的人用什么样的眼膜...
  10. 面试归来,感觉无望,下次再战
  11. java启动脚本_java启动脚本
  12. 多商户商城系统如何对接电商收付通?
  13. Unity首次运行下载游戏资源
  14. linux c第四天———gcc、gdb、指针、大小端存储
  15. python selenium ActionChains类与鼠标的模拟事件
  16. Scheme 语言 第一次的感触!
  17. CentOS7下安装配置zookeeper集群及设置开机自启
  18. java json 长度限制_tomcat解决POST请求过长的限制
  19. 电子书各种格式的转换常见问题
  20. eclipse配置python开发环境_Eclipse配置python开发环境

热门文章

  1. htmlcss面试笔记
  2. ZooKeeper(四)ZooKeeper的简单使用
  3. Navicat安装(图文教程)
  4. 如何在Windows下安装zookeeper?
  5. [过年菜谱之]千张春笋蒸酱鸭
  6. java多维数组的反射类型_Java多维数组和Arrays类方法总结详解
  7. 简单的dp(dp专题)
  8. Docker容器虚拟化与传统虚拟机比较
  9. Properties工具类
  10. 大学计算机学情分析,大学生学情分析