dockerfile 制作镜像

以下制作nginx镜像过程,分三步
1.制作dockerfile文件
2.制作nginx.sh的nginx安装脚本
3.制作ngx-depolyment.yaml文件

以下是具体内容

#mkdir /root/dockerfile
#cd /root/dockerfile
#touch Dockerfile
#mkdir nginx

制作dockerfile文件
[email protected]<cc_172.16.0.2|~/dockerfile/nginx>:#cat Dockerfile
#Centos?based?container?with?tengine2.2
FROM docker.io/centos
MAINTAINER  wbb-20181207 [email protected]

#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安装脚本

[email protected]<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/profile

source /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/lib

source /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-nginx
  namespace: k8s-go
  labels:
    app: k8s-nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 10280
    protocol: TCP
  #clusterIP: 169.169.249.80
  selector:
   app: k8s-nginx

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  namespace: k8s-go
  labels:
    app: k8s-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8s-nginx
  template:
    metadata:
      labels:
        app: k8s-nginx
      annotations:
        app: nginx-clouster
    spec:
      containers:
      - name: nginx
        image: 172.16.0.2:5000/nginx:v4   #从私有仓加载
        imagePullPolicy: Always    #只从私有仓加载,不放到node节点
        volumeMounts:
        - mountPath: /usr/local/www
          name: nginx-data
        #- mountPath: /etc/nginx/conf.d
        #  name: nginx-conf
        resources:
          limits:
            cpu: 300m
            memory: 3000Mi
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 80
      volumes:
        - name: nginx-data
          persistentVolumeClaim:
            claimName: nginx-data-nfs-pvc
        #- name: nginx-conf
        #  persistentVolumeClaim:
        #    claimName: nginx-conf-nfs-pvc
      #volumes:
      #  - name: nginx-nfs
      #    nfs:
      #      server: 172.16.0.2
      #      path: /data/nfs-storage/nginx

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

外网访问显示测试页

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

原文地址:http://blog.51cto.com/running/2327816

时间: 2024-11-05 19:25:31

dockerfile 制作镜像的相关文章

Dockerfile制作镜像

Dockerfile制作镜像 目录: tomcat的Dockerfile脚本 nginx.1.12.0的Dockerfile脚本 mysql的Dockerfile脚本 删除错误镜像和容器脚本 tomcat的Dockerfile脚本 cd /opt mkdir tomcat cd tomcat vim Dockerfile FROM centos:7 MAINTAINER this is tomcat <lzp> ADD jdk-8u91-linux-x64.tar.gz /usr/local/

Dockerfile:制作可ssh登录的镜像

我们先手动制作一个可以ssh登录的容器,然后按照操作步骤编写Dockerfile,用docker build根据Dockerfile创建镜像,最后我们可以用这个镜像来生成可ssh登录的容器了.     一.首先创建一个容器并登入 [[email protected] ~]# docker images centos REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZ

DOCKER学习_011:使用Dockerfile制作docker镜像

前面使用commit的方式,制作一个docker镜像,本次介绍使用Dockerfile制作一个dockers镜像 [[email protected] ~]# mkdir /openssh [[email protected] ~]# cd /openssh [[email protected] openssh]# cp /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key . [[

Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像

一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作出来的镜像容易出现不兼容问题. jdk1.8下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html tomcat8下载:https://tomcat.apache.org/downl

基于Dockerfile制作tomcat镜像

Docker 概述: ??在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让 docker 读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile 就此诞生了 常用参数: FROM 命令.用法, FROM <image>:<tag>. FROM 命令告诉 docker 我们构建的镜像是以哪个(发行版)镜像为基础

7 docker-使用dockerfile创建镜像

在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写. 本节中,我们需要依次完成下面几项任务: Dockerfile 基本框架    Dockerfile 编写常用命令    从 Dockerfile 构建镜像 本次实验的需求是完成一个Dockerfile,通过该Dockerfile创建一个Web应用,该web应用为apache托管的一个静态页面网站,换句话说,我们写一个Dockerfile,用来创建一个实验楼公司的网站应用,就是h

dockerfile制作

一.Dockerfile 简介及书写规则 Dockfile 是一种被Docker 程序解释的脚本,Dockerfile 由一条一条的指令组成,每条指令对应Linux 下面的一条命令.Docker 程序将这些Dockerfile 指令翻译真正的Linux 命令.Dockerfile 有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,Docker 程序将读取Dockerfile,根据指令生成定制的image. Dockerfile 的指令是忽略大小写的,建议使用大写,使用 #

dockerfile文件创建镜像详解

              dockerfile文件构建容器 前言:在之前的时候有说过docker构建镜像有两种方式: (1)docker cumin制作镜像:但是不利于用户之间的共享属于黑盒操作 (2)通过dockerfile文件创建容器:利于用户之间的共享:可以知道镜像之前做过什么样的改动 1:Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命

dockerfile创建镜像及容器

第一步: 从王总git上:http://git.oursdata.com/wangyue/dockerfiles.git 进入下图的文件夹中 然后执行以下的说明执行步骤 第二步: 开发环境dockerfile BUILD docker build -t silentmoon/centos7:devel -f centos7_ssh_devel . 咖啡时间,请保持网络连接,如果网速慢的话,就别继续往下看了. RUN docker run -d -P --name devel_centos7_ss