镜像分层构建及实现Tomcat业务镜像(小节7)

186 阅读4分钟

前提

参考此文档安装完成即可 ubuntu二进制安装docker及docker info介绍(小节1)

~# mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,alpine,debian}} -pv
  1. 构建Centos基础镜像

创建Dockerfile

#进到centos目录
~# cd /opt/dockerfile/system/centos/

/opt/dockerfile/system/centos# vim Dockerfile
#Centos 7.7 bash image
#
#

FROM centos:7.7.1908

#维护者信息
LABEL maintainer="stao <clark_0932@qq.com>"

#安装某些包
RUN yum install -y epel-release && yum install -y zip unzip 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 2020 && useradd www -u 2020 -g www && groupadd nginx -g 2021 && useradd nginx -u 2021 -g nginx
/opt/dockerfile/system/centos# docker build -t centos-base:7.7.1908 .
/opt/dockerfile/system/centos# vim build-command.sh

#!/bin/bsh
docker build -t centos-base:7.7.1908 .
  1. 构建jdk

JKD下载地址:www.oracle.com/java/techno…

/opt/dockerfile/system/centos# cd /opt/dockerfile/web/jdk/
/opt/dockerfile/web/jdk# mkdir jdk-8u351
/opt/dockerfile/web/jdk# cd jdk-8u351

Dockerfile

/opt/dockerfile/web/jdk/jdk-8u351# vim Dockerfile

FROM centos-base:7.7.1908

#维护者信息
LABEL maintainer="stao <clark_0932@qq.com>"

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

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

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

#修改容器时区
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

点此下载后、上传JDK包

/opt/dockerfile/web/jdk/jdk-8u351# ll
total 146204
drwxr-xr-x 2 root root      4096 Dec 24 02:13 ./
drwxr-xr-x 3 root root      4096 Dec 24 01:43 ../
-rw-r--r-- 1 root root       471 Dec 24 02:11 Dockerfile
-rw-r--r-- 1 root root 149697219 Dec 24 02:13 jdk-8u351-linux-x64.tar.gz
/opt/dockerfile/web/jdk/jdk-8u351# cp jdk-8u351-linux-x64.tar.gz /usr/local/src/

/opt/dockerfile/web/jdk/jdk-8u351# cd /usr/local/src/

#解压缩
/usr/local/src# tar xvf jdk-8u351-linux-x64.tar.gz

软链接

/usr/local/src# ln -sv /usr/local/src/jdk1.8.0_351/ /usr/local/jdk

添加变量

/usr/local/src# cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

#添加下面三行变量
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt:jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

#使变量生效
/usr/local/src# source /etc/profile
/usr/local/src# java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)
/usr/local/src# cd -
/opt/dockerfile/web/jdk/jdk-8u351

#拷贝profile到当前目录
/opt/dockerfile/web/jdk/jdk-8u351# cp /etc/profile .

#创建build脚本
/opt/dockerfile/web/jdk/jdk-8u351# cat build-command.sh
#!/bin/bash
docker build -t centos-jdk:8u351 .

执行脚本

/opt/dockerfile/web/jdk/jdk-8u351# bash build-command.sh
/opt/dockerfile/web/jdk/jdk-8u351# docker images
REPOSITORY    TAG        IMAGE ID       CREATED          SIZE
centos-jdk    8u351      fc451dc9106f   29 seconds ago   988MB    <--
centos-base   7.7.1908   7e7ba86b94ac   5 minutes ago    612MB
centos        7.7.1908   08d05d1d5859   3 years ago      204MB

#运行容器
/opt/dockerfile/web/jdk/jdk-8u351# docker run --rm -it centos-jdk:8u351 bash

64cc80f39936 /]# java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)

查看系统账号是否存在

64cc80f39936 /]# id www
uid=2020(www) gid=2020(www) groups=2020(www)
64cc80f39936 /]# id nginx
uid=2021(nginx) gid=2021(nginx) groups=2021(nginx)
64cc80f39936 /]# exit
  1. 构建tomcat
#切换目录
/opt/dockerfile/web/jdk/jdk-8u351# cd /opt/dockerfile/web/tomcat/
/opt/dockerfile/web/tomcat# mkdir tomcat8.5.51-base

/opt/dockerfile/web/tomcat# cd tomcat8.5.51-base

Tomcat软件包

#上传软件包
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# ll
total 10084
drwxr-xr-x 2 root root     4096 Dec 24 23:19 ./
drwxr-xr-x 3 root root     4096 Dec 24 20:17 ../
-rw-r--r-- 1 root root 10315164 Dec 24 23:19 apache-tomcat-8.5.51.tar.gz

创建Dockerfile

/opt/dockerfile/web/tomcat/tomcat8.5.51-base# vim Dockerfile
FROM centos-jdk:8u351

#维护者信息
LABEL maintainer="stao <clark_0932@qq.com>"

ADD apache-tomcat-8.5.51.tar.gz /apps

#软链接
RUN ln -sv /apps/apache-tomcat-8.5.51 /apps/tomcat
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# vim build-command.sh

#!/bin/bash
docker build -t centos-tomcat:8.5.51 .

执行

/opt/dockerfile/web/tomcat/tomcat8.5.51-base# bash build-command.sh

测试

#进到容器中
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# docker run --rm -it -p 8080:8080 centos-tomcat:8.5.51 bash

#启动tomcat
5e9fc7025344 /]# /apps/tomcat/bin/catalina.sh start
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.

#查看是否有tomcat的8080端口
5e9fc7025344 /]# ss -tnl
State       Recv-Q Send-Q      Local Address:Port                     Peer Address:Port              
LISTEN      0      1               127.0.0.1:8005                                *:*                  
LISTEN      0      100                     *:8080                                *:*

下载server.xml

5e9fc7025344 /]# sz /apps/tomcat/conf/server.xml

图片.png

  1. app1业务
/opt/dockerfile/web/tomcat# pwd
/opt/dockerfile/web/tomcat
root@ubuntu-1:/opt/dockerfile/web/tomcat# mkdir tomcat-app1
root@ubuntu-1:/opt/dockerfile/web/tomcat# cd tomcat-app1/
/opt/dockerfile/web/tomcat/tomcat-app1# mkdir linux00

#创建页面
/opt/dockerfile/web/tomcat/tomcat-app1# vim linux00/index.html
linux00 tomcat web page app1

#打包
/opt/dockerfile/web/tomcat/tomcat-app1# tar czvf linux00.tar.gz linux00/*

上传server.xml、并修改

/opt/dockerfile/web/tomcat/tomcat-app1# ll server.xml
-rw-r--r-- 1 root root 7588 Dec 24 23:58 server.xml

/opt/dockerfile/web/tomcat/tomcat-app1# vim server.xml

#修改以下信息
      <Host name="localhost"  appBase="/data/tomcat/webapps"
            unpackWARs="false" autoDeploy="false">
/opt/dockerfile/web/tomcat/tomcat-app1# vim Dockerfile

FROM centos-tomcat:8.5.51

ADD server.xml /apps/tomcat/conf/server.xml

ADD linux00.tar.gz /data/tomcat/webapps    <--此处路径要和server.xml中路径一致(看上图)

ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh

#递归修改权限
RUN chown www.www /apps -R

EXPOSE 8080 8005 8009

CMD ["/apps/tomcat/bin/run_tomcat.sh"]
/opt/dockerfile/web/tomcat/tomcat-app1# vim run_tomcat.sh

#!/bin/bash
echo "192.168.37.248 dns1.123.local" >> /etc/hosts
echo "192.168.37.249 dns2.123.local" >> /etc/hosts

echo "nameserver 223.5.5.5" > /etc/resolv.conf

su - www -c "/apps/tomcat/bin/catalina.sh start"

tail -f /etc/hosts
/opt/dockerfile/web/tomcat/tomcat-app1# vim build-command.sh
#!/bin/bash
docker build -t tomcat-linux00:app1 .
#添加执行权限
/opt/dockerfile/web/tomcat/tomcat-app1# chmod a+x run_tomcat.sh
#执行
/opt/dockerfile/web/tomcat/tomcat-app1# bash build-command.sh
/opt/dockerfile/web/tomcat/tomcat-app1# docker run --rm -it -p8080:8080 tomcat-linux00:app1
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	5e1a997dceb1
192.168.37.248 dns1.123.local
192.168.37.249 dns2.123.local

新开一个窗口

~# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                                           NAMES
5e1a997dceb1   tomcat-linux00:app1   "/apps/tomcat/bin/ru…"   About a minute ago   Up About a minute   8005/tcp, 8009/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   clever_johnson

#进入容器
~# docker exec -it 5e1a997dceb1 bash

5e1a997dceb1 /]# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	5e1a997dceb1
192.168.37.248 dns1.123.local
192.168.37.249 dns2.123.local
     
5e1a997dceb1 /]# cat /etc/resolv.conf 
nameserver 223.5.5.5

#窗口8080端口是否启动
5e1a997dceb1 /]# ss -tnl
State       Recv-Q Send-Q      Local Address:Port                     Peer Address:Port              
LISTEN      0      1               127.0.0.1:8005                                *:*                  
LISTEN      0      100                     *:8080                                *:*

浏览器访问 http://192.168.37.101:8080/linux00

图片.png

  1. 再创建个APP2业务
/opt/dockerfile/web/tomcat/tomcat-app1# cd ..

#创建app2
/opt/dockerfile/web/tomcat# cp -rf tomcat-app1 tomcat-app2
/opt/dockerfile/web/tomcat# cd tomcat-app2

#网页信息
/opt/dockerfile/web/tomcat/tomcat-app2# vim linux00/index.html
linux00 tomcat web page app2

#删除之前的
/opt/dockerfile/web/tomcat/tomcat-app2# rm -rf linux00.tar.gz
#重新打包
/opt/dockerfile/web/tomcat/tomcat-app2# tar czvf linux00.tar.gz linux00/*
/opt/dockerfile/web/tomcat/tomcat-app2# vim build-command.sh

#!/bin/bash
docker build -t tomcat-linux00:app2 .
/opt/dockerfile/web/tomcat/tomcat-app2# vim Dockerfile 

FROM centos-tomcat:8.5.51

ADD server.xml /apps/tomcat/conf/server.xml

ADD linux00.tar.gz /data/tomcat/webapps

ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh

#递归修改权限
RUN chown www.www /apps -R

EXPOSE 8080 8005 8009

CMD ["/apps/tomcat/bin/run_tomcat.sh"]
/opt/dockerfile/web/tomcat/tomcat-app2# bash build-command.sh
/opt/dockerfile/web/tomcat/tomcat-app2# docker run --rm -it -p8081:8080 tomcat-linux00:app2
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	bc835822c80e
192.168.37.248 dns1.123.local
192.168.37.249 dns2.123.local

浏览器测试

图片.png