Docker镜像制作:Tomcat

创建dockerfile目录
# mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv
 
强制删除tag为<none>的镜像
# docker rmi -f `docker images | grep "<none>" | awk '{print $3}'`
 
为镜像打标签
# docker tag centos:latest centos:7.6.1810
 
写基础环境Dockerfile(安装常用命令)
# cd dockerfile/system/centos/
# vim Dockerfile
FROM centos:7

RUN yum install epel-release -y && yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel zip unzip zlib-devel net-tools lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel bc  systemd-devel bash-completion traceroute -y
build基础环境
# docker build -t centos-base:v1 .
 
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
如何更改新生成镜像的时区
进入镜像
# docker run -it --rm nginx-base:v1 bash
时区为UTC
# date
Mon Jan 20 02:42:49 UTC 2020
删除当前时区文件
# rm -rf /etc/localtime
将上海的时区文件做软连接为当前时区文件
# find / -name Shanghai
/usr/share/zoneinfo/Asia/Shanghai
/usr/share/zoneinfo/posix/Asia/Shanghai
/usr/share/zoneinfo/right/Asia/Shanghai

[root@c9aa870c4603 /]# ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   

'/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'
再次查看,时区为CST
[root@c9aa870c4603 /]# date
Mon Jan 20 10:45:44 CST 2020
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

将上述操作写入Dockerfile

FROM centos:7

RUN yum install epel-release -y && yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel zip unzip zlib-devel net-tools lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel bc  systemd-devel bash-completion traceroute -y

RUN useradd nginx -u 2019 && useradd tomcat -u 2020 && rm -rf /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

再次build
# docker build -t centos-base:v1 .
查看镜像历史
# docker history 7ea4139a77bb
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
7ea4139a77bb        4 minutes ago       /bin/sh -c useradd nginx -u 2019 && useradd …   724kB               
28b5f53e48b8        32 minutes ago      /bin/sh -c yum install epel-release -y && yu…   309MB               
5e35e350aded        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           2 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:45a381049c52b5664…   203MB

 

重写Dockerfile,将两个RUN合并

FROM centos:7

RUN yum install epel-release -y && yum install vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel zip unzip zlib-devel net-tools lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel bc  systemd-devel bash-completion traceroute -y && useradd nginx -u 2019 && useradd tomcat -u 2020 && rm -rf /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

重新build
# docker build -t centos-base:v2 .
查看镜像历史
# docker history c9bf9722472e
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
c9bf9722472e        10 minutes ago      /bin/sh -c yum install epel-release -y && yu…   309MB               
5e35e350aded        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           2 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:45a381049c52b5664…   203MB
两个RUN层合并了,如果安装软件比较多,镜像的size会减小很多
 
继续做JDK镜像
重新打个标签
# docker build -t centos-base:7 .
将build命令做成脚本
# vim build-command.sh
#!/bin/bash
docker build -t centos-base:7 .
# cd /opt/dockerfile/web/jdk/
为8u92版本JDK创建目录
# mkdir 8u92
# cd 8u92/
将jdk的二进制包传入该目录下
jdk-8u192-linux-x64.tar.gz
编写Dockerfile
# vim Dockerfile
FROM centos-base:7

ADD jdk-8u192-linux-x64.tar.gz /usr/local/src
#该软连接为方便以后jdk版本升级
RUN ln -sv /usr/local/src/jdk1.8.0_192 /usr/local/jdk
 
编写build脚本
# vim build-command.sh
#!/bin/bash
docker build -t jdk-base:1.8.0.192 .
运行build脚本
# bash build-command.sh
 
给镜像添加环境变量
# vim Dockerfile
FROM centos-base:7

ADD jdk-8u192-linux-x64.tar.gz /usr/local/src
RUN ln -sv /usr/local/src/jdk1.8.0_192 /usr/local/jdk

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脚本
# bash build-command.sh
进入容器测试环境变量
# docker run -it --rm jdk-base:1.8.0.192 bash
[root@d5cf282004c9 /]# java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
 
添加profile文件,将容器内的profile文件覆盖掉
# vim Dockerfile
FROM centos-base:7

ADD jdk-8u192-linux-x64.tar.gz /usr/local/src
RUN ln -sv /usr/local/src/jdk1.8.0_192 /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
运行build脚本
# bash build-command.sh

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

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 TOMCAT_HOME=/apps/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

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

验证是否替换profile成功
# docker run -it --rm jdk-base:1.8.0.192 bash
[root@a73ecaf18ed9 /]# vim /etc/profile
[root@a73ecaf18ed9 /]# exit

 

继续制作tomcat镜像
# cd /opt/dockerfile/web/tomcat/
[root@localhost tomcat]# mkdir tomcat-base
[root@localhost tomcat]# cd tomcat-base/
[root@localhost tomcat-base]# cp /opt/dockerfile/web/jdk/8u92/build-command.sh .
[root@localhost tomcat-base]# ls
build-command.sh
# vim Dockerfile
FROM jdk-base:1.8.0.192

MAINTAINER Edward

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

# vim build-command.sh

#!/bin/bash
docker build -t tomcat-base:8.5.37 .

# bash build-command.sh

# docker run -it --rm tomcat-base:8.5.37 bash
[root@469ffdc39ca9 /]#
[root@469ffdc39ca9 /]# ll /apps/
total 0
drwxr-xr-x. 9 root root 220 Jan 20 14:33 apache-tomcat-8.5.37
[root@469ffdc39ca9 /]# exit
 
添加软连接
FROM jdk-base:1.8.0.192

MAINTAINER Edward

ADD apache-tomcat-8.5.37.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.37 /apps/tomcat
再次build
# bash build-command.sh
验证tomcat服务是否可用
# docker run -it --rm -p 8080:8080 tomcat-base:8.5.37 bash
[root@b6079015a9e8 /]# ll /apps/
total 0
drwxr-xr-x. 9 root root 220 Jan 20 14:33 apache-tomcat-8.5.37
lrwxrwxrwx. 1 root root  26 Jan 20 14:40 tomcat -> /apps/apache-tomcat-8.5.37
启动tomcat服务(前台启动)
[root@b6079015a9e8 /]# /apps/tomcat/bin/catalina.sh run
web测试
tomcat镜像构建完毕!
 
----------------------------------------------------------------------------------------------------------------------------------------
 
 
向tomcat容器内部署代码
# cd /opt/dockerfile/web/tomcat/
# mkdir tomcat-app1
# cd tomcat-app1
# cp /opt/dockerfile/web/tomcat/tomcat-base/build-command.sh .
# vim build-command.sh
#!/bin/bash
docker build -t tomcat-app1:v1 .
编写启动脚本
# vim run_tomcat.sh
#!/bin/bash
source /etc/profile
echo "1.1.1.1 www.image.net" >> /etc/hosts
su - tomcat -c "/apps/tomcat/bin/catalina.sh start"
#su - tomcat -c "/apps/tomcat/bin/catalina.sh  run"
tail -f /etc/hosts

编辑XML文件

 

 # vim Dockerfile

FROM tomcat-base:8.5.37

MAINTAINER Edward

#添加业务代码
ADD code.tar.gz /data/tomcat/webapps/app1
#添加启动脚本
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#添加xml文件
ADD server.xml /apps/tomcat/conf
#将下列路径的权限改为tomcat用户
RUN chown -R  tomcat.tomcat /apps/apache-tomcat-8.5.37 /apps/tomcat  /data/tomcat

EXPOSE 8080 8443



CMD ["/apps/tomcat/bin/run_tomcat.sh"]
build一下
# bash build-command.sh
运行
# docker run -it --rm -p 8080:8080 tomcat-app1:v1
测试

 

创建第二个服务容器
# cd ..
[root@localhost tomcat]# ll
总用量 0
drwxr-xr-x. 2 root root 106 1月  20 16:31 tomcat-app1
drwxr-xr-x. 2 root root  83 1月  20 16:48 tomcat-base
全篇拷贝
[root@localhost tomcat]# cp -r tomcat-app1/ tomcat-app2
[root@localhost tomcat]# cd tomcat-app2/
[root@localhost tomcat-app2]# ll
总用量 24
-rw-r--r--. 1 root root   45 1月  20 16:50 build-command.sh
-rw-r--r--. 1 root root  141 1月  20 16:50 code.tar.gz
-rw-r--r--. 1 root root  309 1月  20 16:50 Dockerfile
-rwxr-xr-x. 1 root root  199 1月  20 16:50 run_tomcat.sh
-rw-r--r--. 1 root root 7513 1月  20 16:50 server.xml
改一下build脚本
# vim build-command.sh
#!/bin/bash
docker build -t tomcat-app2:v1 .
传入app2的业务代码
重新构建
# bash build-command.sh
运行
# docker run -it --rm -p 8080:8080 tomcat-app2:v1
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.3    9e713439fdf5
1.1.1.1 www.image.net
测试

 

posted @ 2020-09-23 12:20  Edward_han  阅读(318)  评论(0编辑  收藏  举报