一、Nginx 镜像构建

nginx 编译安装

环境准备:

../nginx/

├── build_command.sh

├── Dockerfile             Dockerfile 配置文件

├── nginx-1.16.1.tar.gz   源码安装包(这里使用1.16.1版本)

└── nginx.conf             配置文件

Dockerfile配置

FROM centos:7.8.2003

RUN yum -y install epel-release && yum -y install vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop

ADD nginx-1.16.1.tar.gz /usr/local/src

RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install

RUN cd /usr/local/nginx

RUN useradd nginx -s /sbin/nologin

ADD nginx.conf /usr/local/nginx/conf/nginx.conf

RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx

RUN echo "test nginx web" > /usr/local/nginx/html/index.html

EXPOSE 80 443

CMD ["nginx","-g","daemon off;"]

构建镜像执行文件

cat build_command.sh

#!/bin/bash

docker build -t nginx_web:1.16.1 .

nginx.conf 配置文件

user nginx;

worker_processes  1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid       logs/nginx.pid;

events {

  worker_connections  1024;

}

http {

  include       mime.types;

  default_type application/octet-stream;

   #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

   #                 '$status $body_bytes_sent "$http_referer" '

   #                 '"$http_user_agent" "$http_x_forwarded_for"';

   #access_log logs/access.log main;

  sendfile       on;

   #tcp_nopush     on;

   #keepalive_timeout 0;

  keepalive_timeout  65;

   #gzip on;

  server {

      listen       80;

      server_name localhost;

       #charset koi8-r;

       #access_log logs/host.access.log main;

      location / {

          root   /usr/local/nginx/html;

          index index.html index.htm;

      }

       #error_page 404             /404.html;

       # redirect server error pages to the static page /50x.html

       #

      error_page   500 502 503 504 /50x.html;

      location = /50x.html {

          root   html;

      }

       # proxy the PHP scripts to Apache listening on 127.0.0.1:80

       #

       #location ~ \.php$ {

       #   proxy_pass   http://127.0.0.1;

       #}

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

       #

       #location ~ \.php$ {

       #   root           html;

       #   fastcgi_pass   127.0.0.1:9000;

       #   fastcgi_index index.php;

       #   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

       #   include       fastcgi_params;

       #}

       # deny access to .htaccess files, if Apache's document root

       # concurs with nginx's one

       #

       #location ~ /\.ht {

       #   deny all;

       #}

  }

}

二、tomcat 镜像构建

环境准备

tomcat/

├── app1

│ ├── build_command.sh

│ ├── Dockerfile

│ ├── myapp.tar.gz

│ ├── run_tomcat.sh

│ └── server.xml

├── app2

│ ├── build_command.sh

│ ├── Dockerfile

│ ├── myapp

│ │ └── index.jsp

│ ├── myapp.tar.gz

│ ├── run_tomcat.sh

│ └── server.xml

├── centos

│ ├── build_command.sh

│ └── Dockerfile

├── jdk

│ └── jdk-8u-401

│     ├── build_command.sh

│     ├── Dockerfile

│     ├── jdk-8u401-linux-x64.tar.gz

│     └── profile

└── tomcat-8.5.97

  ├── apache-tomcat-8.5.97.tar.gz

  ├── build_command.sh

  └── Dockerfile

1、自制centos基础镜像

../centos/

├── build_command.sh

└── Dockerfile

Dockerfile

FROM centos:7.8.2003

RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm && yum -y install vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop

RUN groupadd www -g 2022 && useradd -u 2022 -g 2022 www

build_command.sh

#!/bin/bash

docker build -t centos_web:7.2003 .

构建

chmod +x build_command.sh

./build_command.sh

2、自制jdk镜像-基于centos_web:7.2003

../../jdk/

└── jdk-8u-401

  ├── build_command.sh

  ├── Dockerfile

  ├── jdk-8u401-linux-x64.tar.gz

  └── profile

Dockerfile

FROM centos_web:7.2003

ADD jdk-8u401-linux-x64.tar.gz /usr/local/src

RUN ln -sv /usr/local/src/jdk1.8.0_401/ /usr/local/jdk

RUN ln -sv /usr/local/jdk/bin/java /usr/sbin/java

ADD profile /etc/profile

ENV JAVA_HOME /usr/local/jdk

ENV JRE_HOME $JAVA_HOME/jre

ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/

ENV PATH $PATH:JAVA_HOME/bin

build_command.sh

#!/bin/bash

docker build -t jdk_centos7_web:8u401 .

profile

# /etc/profile

# System wide environment and startup programs, for login setup

# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you

# are doing. It's much better to create a custom.sh shell script in

# /etc/profile.d/ to make custom changes to your environment, as this

# will prevent the need for merging in future updates.

pathmunge () {

  case ":${PATH}:" in

      *:"$1":*)

          ;;

      *)

           if [ "$2" = "after" ] ; then

               PATH=$PATH:$1

           else

               PATH=$1:$PATH

           fi

   esac

}

if [ -x /usr/bin/id ]; then

   if [ -z "$EUID" ]; then

       # ksh workaround

       EUID=`/usr/bin/id -u`

       UID=`/usr/bin/id -ru`

   fi

   USER="`/usr/bin/id -un`"

   LOGNAME=$USER

   MAIL="/var/spool/mail/$USER"

fi

# Path manipulation

if [ "$EUID" = "0" ]; then

  pathmunge /usr/sbin

  pathmunge /usr/local/sbin

else

  pathmunge /usr/local/sbin after

  pathmunge /usr/sbin after

fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`

HISTSIZE=1000

if [ "$HISTCONTROL" = "ignorespace" ] ; then

   export HISTCONTROL=ignoreboth

else

   export HISTCONTROL=ignoredups

fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell

# Current threshold for system reserved uid/gids is 200

# You could check uidgid reservation validity in

# /usr/share/doc/setup-*/uidgid file

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then

  umask 002

else

  umask 022

fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do

   if [ -r "$i" ]; then

       if [ "${-#*i}" != "$-" ]; then

          . "$i"

       else

          . "$i" >/dev/null

       fi

   fi

done

unset i

unset -f pathmunge

export JAVA_HOME=/usr/local/jdk

export JRE_HOME $JAVA_HOME/jre

export TOMCAT_HOME=/usr/local/src/tomcat

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH

export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

3、自制tomcat镜像

├── apache-tomcat-8.5.97.tar.gz

├── build_command.sh

└── Dockerfile

Dockerfile

FROM jdk_centos7_web:8u401

ADD apache-tomcat-8.5.97.tar.gz /usr/local/src

RUN ln -sv /usr/local/src/apache-tomcat-8.5.97 /usr/local/src/tomcat

RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

build_command.sh

#!/bin/bash

docker build -t tomcat_web:8.5.97 .

3.1 APP1

../app1/

├── build_command.sh

├── Dockerfile

├── myapp.tar.gz

├── run_tomcat.sh

└── server.xml

Dockerfile

FROM tomcat_web:8.5.97

ADD run_tomcat.sh /usr/local/src/tomcat/bin/run_tomcat.sh

ADD server.xml /usr/local/src/tomcat/conf/server.xml  

ADD myapp.tar.gz /usr/local/src/tomcat/webapps

EXPOSE 8080 8443

CMD ["/usr/local/src/tomcat/bin/run_tomcat.sh"]

build_command.sh

#!/bin/bash

docker build -t tomcat_app1:v1 .

run_tomcat.sh

#!/bin/bash

/usr/local/src/tomcat/bin/catalina.sh start

tail -f /etc/hosts

server.xml

 

 

 

 

 

 

 

 

 

 

   

   

             type="org.apache.catalina.UserDatabase"

             description="User database that can be updated and saved"

             factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

             pathname="conf/tomcat-users.xml" />

 

 

 

   

   

   

   

              connectionTimeout="20000"

              redirectPort="8443"

              maxParameterCount="1000"

              />

   

   

   

   

   

   

   

   

   

   

   

     

     

     

     

       

       

              resourceName="UserDatabase"/>

     

     

       

       

       

       

              prefix="localhost_access_log" suffix=".txt"

              pattern="%h %l %u %t "%r" %s %b" />

     

   

 

myapp.tar.gz

mkdir myapp

cd myapp/

vim index.html

cat myapp/index.html

magedu m43 tomcat app web config

tar zcvf myapp.tar.gz myapp/

myapp/

myapp/index.html

3.2 APP2

app2

├── build_command.sh

├── Dockerfile

├── myapp

│   └── index.jsp

├── myapp.tar.gz

├── run_tomcat.sh

└── server.xml

app2 有两处与app1 不同

build_command.sh

#!/bin/bash

docker build -t tomcat_app2:v1 .

myapp.tar.gz

tar zxvf myapp.tar.gz -C ./

vim myapp/index.html

cat myapp/index.html

magedu m43 tomcat app2 web config

tar zcvf myapp.tar.gz myapp/

3.3 启动两个APP容器,测试页面

[root@localhost app1]# docker run -itd --name app1 -p 8081:8080 tomcat_app1:v1

1d9ccc12288b1d12b0af293fd033c828531fb58bc460e1a383136120736a46b9

[root@localhost app1]# docker run -itd --name app2 -p 8082:8080 tomcat_app2:v1

147ec5ab2123093c97b6f7dc71c279b8bfb0dc53afabac1ab3ff2c6a2e4378bc

三、haproxy镜像构建

环境准备

../haproxy/

├── build_command.sh

├── Dockerfile

├── haproxy-2.8.7.tar.gz

├── haproxy.cfg

└── run_haproxy.sh

dockerfile

# build haproxy image

FROM centos_web:7.2003

RUN set -eux && yum -y install libtermcap-devel ncurses-devel libevent-devel readline-devel gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree   screen lsof tcpdump wget netdat

ADD haproxy-2.8.7.tar.gz /usr/local/src

RUN cd /usr/local/src/haproxy-2.8.7 && make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy && mkdir /usr/local/haproxy/run  

ADD haproxy.cfg /etc/haproxy/

ADD run_haproxy.sh /usr/bin

EXPOSE 80 9999

CMD ["/usr/bin/run_haproxy.sh"]

build_command.sh

#!/bin/bash

docker build --progress=plain -t haproxy_web:v2.2.11 .

run_haproxy.sh

#!/bin/bash

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

tail -f /etc/hosts

haproxy.cfg

#全局配置:

#在配置文件的开头,可以设置一些全局的参数,如进程数、日志文件路径等。例如:

global

  log 127.0.0.1 local3 info

   chroot /usr/local/haproxy

#   stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin

  stats timeout 30s

  uid 99

  gid 99

  daemon

  pidfile /usr/local/haproxy/run/haprxy.pid

 

#默认配置:

#可以设置一些默认的参数,如连接超时时间、负载均衡算法等。例如

defaults

  log global

  mode http

  option http-keep-alive

  option forwardfor

  timeout connect 5000ms

  timeout client 50000ms

  timeout server 50000ms

##前端配置:

##定义前端监听器,接收客户端请求,并将请求转发给后端服务器。可以指定监听的IP和端口,以及使用的协议。例如:

#

#frontend my_frontend

#   bind *:80

#   mode http

#   default_backend my_backend

#

#

##nst后端配置:

##定义后端服务器的列表和相关参数,如服务器的IP和端口、权重等。例如:

#

#backend my_backend

#   mode http

#   balance roundrobin

#   server server1 192.168.0.1:8080 weight 1 maxconn 100 check

#   server server2 192.168.0.2:8080 weight 2 maxconn 100 check

#

listen stats

  mode http

  bind 0.0.0.0:9999

  stats enable

  log global

  stats uri     /haproxy-status

  stats auth   haadmin:123456

listen web_port

  bind 0.0.0.0:80

  mode http

  log global

  balance roundrobin

  server web1   192.168.59.4:8081   check inter 3000 fall 2 rise 5

  server web2   192.168.59.4:8082   check inter 3000 fall 2 rise 5

测试运行

[root@localhost haproxy]# docker run -itd --name haproxy -p 80:80 -p 9999:9999 haproxy_web:v2.2.11

a689872e921b598ad99039128df9e4b8273d07f0b02a54d503f3484ff8962ec8

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。