热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

dockerfile制作镜像及k8s中应用

以下制作nginx镜像过程,分以下几步1.制作dockerfile文件包括nginx.sh的nginx安装脚本2.制作ngx-depoly.yaml文件包括k8sservice,d

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

dockerfile制作镜像及k8s中应用

以下是具体内容

制作dockerfile

#mkdir /root/dockerfile
#cd /root/dockerfile
#touch Dockerfile
#mkdir nginx制作dockerfile文件
root@:#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 .

安装过程部分截图
dockerfile制作镜像及k8s中应用

dockerfile制作镜像及k8s中应用

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

制作nginx.sh的nginx安装脚本

root@:#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&#61;root --group&#61;root \
--prefix&#61;/usr/local/nginx \
--lock-path&#61;/var/run/nginx.lock \
--error-log-path&#61;/var/log/nginx/error.log \
--http-log-path&#61;/var/log/nginx/access.log \
--http-client-body-temp-path&#61;/var/cache/nginx/client_temp \
--http-proxy-temp-path&#61;/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path&#61;/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path&#61;/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path&#61;/var/cache/nginx/scgi_temp \
--pid-path&#61;/var/run/nginx.pid \
--add-module&#61;../ngx_devel_kit-0.2.19 \
--add-module&#61;../lua-nginx-module-0.9.5rc2 \
--add-module&#61;../nginx-accesskey-2.0.3 \
--add-module&#61;../nginx_tcp_proxy_module-master \
--with-pcre&#61;../pcre-8.40 \
--with-zlib&#61;../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&#61;&#39;-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE&#61;2 -fexceptions -fstack-protector --param&#61;ssp-buffer-size&#61;4 -m64 -mtune&#61;generic&#39; \
--with-ld-opt&#61;-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&#64;:#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&#64;:#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&#64;:#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&#64;:#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&#64;:#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&#64;:#ls
conf data sslconf里为相应域名的.conf文件,例如default.conf
data里为相应域名的.conf文件里的静态文件加载路径,此处不要搞错
ssl里为相应域名的证书文件,例如default.pem,default.key及ssh.conf配置文件

k8s dashboard中显示的生成的nginx pod,
dockerfile制作镜像及k8s中应用

外网访问显示测试页
dockerfile制作镜像及k8s中应用

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


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


推荐阅读
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 1.创建目录mkdir-phomerocketmqnamesvr1data&&mkdir-phomerocketmqnamesvr1log&&mkdir-phomerocketm ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • Nginx作为前端服务器时,Tomcat与Apache作为后端,War包应部署在何处? ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 这篇文章主要讲解了“AliyunLinux如何安装php7.3tengine2.3.2mysql8.0redis5”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 如何正确使用redis分布式锁
    前言笔者在公司担任技术面试官,在笔者面试过程中,如果面试候选人提到了reids分布式锁,笔者都会问一下redis分布式锁的知识点,但是令笔者遗憾的是,该知识点十个人中有九个人都答得 ... [详细]
author-avatar
我并没有你们想象P的坚强
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有