Linux-docker镜像分层构建-tomcat
docker构建新的镜像时,都要执行很多命令,消耗时间。
分层构建可以节约构建镜像的时间和步骤
分层构建:
1、构建基础镜像:安装常用的命令,在centos,debain,rehat,ubuntu等官方镜像的基础上构建(构建完成后,基本不用修改可重复利用)
2、构建运行环境镜像:部署nginx,tomcat等(构建完成后,基本不用修改可重复利用)
3、构建业务镜像:部署生产业务(根据业务的需求,更改业务镜像即可),构建镜像时只构建业务镜像,花费的时间少,构建镜像的步骤少。
自定义Tomcat业务镜像:
基于官方提供的centos,debain,ubuntu,alpine 等基础镜像构建 JDK(java环境),然后再基于自定义的JDK镜像构建出业务需要的tomcat镜像。
构建JDK镜像:
先基于官方提供的基础镜像,制作出安装了常用的命令的自定义基础镜像,然后再基础镜像的基础之上,再制作JDK镜像、tomcat镜像等。
自定义centos基础镜像
下载官方基础镜像
[17:31:31 root@ubuntu-lyj ~]#docker pull martonyang/centos7.8.2003
目录结构按照业务类型或系统类型等方式划分
[17:40:07 root@ubuntu-lyj ~]mkdir -pv dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}}
[17:40:07 root@ubuntu-lyj ~]#tree /data/ /data/ └── dockerfile ├── system │ ├── centos │ ├── redhat │ └── ubuntu └── web ├── apache ├── jdk ├── nginx └── tomcat
进入centos目录下修改基础镜像:
[17:42:21 root@ubuntu-lyj ~]#cd /data/dockerfile/system/centos/ [17:44:17 root@ubuntu-lyj /data/dockerfile/system/centos]#
编辑dockerfile
17:46:34 root@ubuntu-lyj /data/dockerfile/system/centos]#vim Dockerfile [17:49:18 root@ubuntu-lyj /data/dockerfile/system/centos]#cat Dockerfile #Centos Base image # FROM martonyang/centos7.8.2003 MAINTAINER "JING 12345@qq.com" RUN yum install -y vim wget tree lrzsz gcc gcc-c++ atutomake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop RUN groupadd www -g 2022 && useradd www -u 2022 -g www #添加系统账户
通过脚本构建镜像
分层构建镜像,镜像名称有很多个,为了方便操作,分辨清楚,使用脚本构建镜像,把每层的构建镜像命令写入脚本,直接执行脚本即可。
脚本建立在每层业务的目录下:
/data/dockerfile/system/centos
/data/dockerfile/system/ubuntu
/data/dockerfile/system/redhat
/data/dockerfile/web/nginx
/data/dockerfile/web/tomcat
/data/dockerfile/web/jdk
/data/dockerfile/web/apache
[17:49:32 root@ubuntu-lyj /data/dockerfile/system/centos]#vim build-command.sh [17:52:35 root@ubuntu-lyj /data/dockerfile/system/centos]#cat build-command.sh #!/bin/bash docker build -t centos-base:7.8.2003 .
[17:59:02 root@ubuntu-lyj /data/dockerfile/system/centos]#bash build-command.sh
验证centos基础镜像环境
[18:06:09 root@ubuntu-lyj /data/dockerfile/system/centos]#docker run -it centos-base:7.8.2003 bash [root@b8c373eab84d /]# id www uid=2022(www) gid=2022(www) groups=2022(www) [root@b8c373eab84d /]# to toe top touch [root@b8c373eab84d /]# to toe top touch [root@b8c373eab84d /]# vi vi view vigr vim vimdiff vimtutor vipw [root@b8c373eab84d /]# wget .dockerenv etc/ media/ root/ sys/ anaconda-post.log home/ mnt/ run/ tmp/ bin/ lib/ opt/ sbin/ usr/ dev/ lib64/ proc/ srv/ var/ [root@b8c373eab84d /]# w w watchgnupg weak-modules which whoami wait wc wget while wipefs watch wdctl whereis who write
执行构建JDK镜像:
进入jdk目录,构建JDK
[18:08:32 root@ubuntu-lyj ~]#cd /data/dockerfile/web/jdk/ [18:08:40 root@ubuntu-lyj /data/dockerfile/web/jdk]#mkdir jdk-8u291 #创建jdk版本目录,生产中有不同的版本部署
准备JDK程序包
[18:49:06 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#ls Dockerfile jdk-8u291-linux-x64.tar.gz profile
拷贝容器中的/etc/profile文件
[18:37:57 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#docker run --rm -it centos-base:7.8.2003 bash [root@9024393ac928 /]# ll /etc/profile -rw-r--r-- 1 root root 1819 Apr 1 2020 /etc/profile [root@9024393ac928 /]# exit exit [18:38:20 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#docker cp 9024393ac928:/etc/profile . Error: No such container:path: 9024393ac928:/etc/profile
vim profile
文件末尾添加以下内容:环境变量
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
[18:52:29 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#cat profile # /etc/profile .................. .................. .................. 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
编辑Dockerfile
[19:22:33 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#vim Dockerfile #JDK base image FROM centos-base:7.8.2003 MAINTAINER "JING 12345@qq.com" ADD jdk-8u291-linux-x64.tar.gz /usr/local/src/ RUN ln -sv /usr/local/src/jdk1.8.0_291 /usr/local/jdk ADD profile /etc/profile
执行构建自定义JDK基础镜像
通过脚本构建
[19:24:14 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#vim build-command.sh #!/bin/bash docker build -t jdk-base:8u291 .
执行构建
[19:06:03 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#bash build-command.sh
验证JDK镜像环境
[21:37:21 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#docker run -it --rm jdk-centos-base:8u291 [root@3032654b3b5b /]# java #root没有读取profile环境变量 bash: java: command not found [root@3032654b3b5b /]# env HOSTNAME=3032654b3b5b TERM=xterm name=mage LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 HOME=/root _=/usr/bin/env
设置root全局变量,在Dockerfile文件添加以下内容
[21:46:06 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#vim Dockerfile #JDK base image FROM centos-base:7.8.2003 LABEL maintainer="JING 12345@qq.com" ADD jdk-8u291-linux-x64.tar.gz /usr/local/src RUN ln -sv /usr/local/src/jdk1.8.0_291 /usr/local/jdk ADD profile /etc/profile ENV name mage 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 #root 环境变量配置
验证镜像JDK环境
java命令使用征程
[21:46:46 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#docker run -it --rm jdk-centos-base:8u291 [root@38859db04dff /]# ja jar java javac javafxpackager javap javaws jarsigner java-rmi.cgi javadoc javah javapackager [root@38859db04dff /]# java -version java version "1.8.0_291" Java(TM) SE Runtime Environment (build 1.8.0_291-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
JDK环境的时区和宿主机的时区不同步:
日志的时间也会不同步,查看日志时有时差,不好排查日志信息
[21:54:36 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#docker run -it --rm jdk-centos-base:8u291 [root@d29b69f3951f /]# date Sun Aug 7 13:54:39 UTC 2022 [root@d29b69f3951f /]# exit exit [21:56:59 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#date Sun Aug 7 21:57:02 CST 2022
同步时间
[21:59:30 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#cat Dockerfile #JDK base image FROM centos-base:7.8.2003 LABEL maintainer="JING 12345@qq.com" ADD jdk-8u291-linux-x64.tar.gz /usr/local/src RUN ln -sv /usr/local/src/jdk1.8.0_291 /usr/local/jdk ADD profile /etc/profile ENV name mage 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 #root 环境变量配置 RUN rm -rf /etc/locatime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
时间同步检查
[21:58:57 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#docker run -it --rm jdk-centos-base:8u291 [root@cb5d43356c15 /]# date Sun Aug 7 21:59:04 CST 2022 [root@cb5d43356c15 /]#
完整的jdk镜像环境:
Dockerfile
[21:59:30 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#cat Dockerfile #JDK base image FROM centos-base:7.8.2003 LABEL maintainer="JING 12345@qq.com" ADD jdk-8u291-linux-x64.tar.gz /usr/local/src RUN ln -sv /usr/local/src/jdk1.8.0_291 /usr/local/jdk ADD profile /etc/profile ENV name mage 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 #root 环境变量配置 RUN rm -rf /etc/locatime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
build-command.sh
[22:00:11 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#cat build-command.sh #!/bin/bash docker build -t jdk-centos-base:8u291 .
profile
[22:01:23 root@ubuntu-lyj /data/dockerfile/web/jdk/jdk-8u291]#cat profile # /etc/profile 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
从JDK镜像构建tomcat 8 base 镜像
进入tomcat目录
[22:05:28 root@ubuntu-lyj ~]#cd /data/dockerfile/web/tomcat/ [07:28:00 root@ubuntu-lyj /data/dockerfile/web/tomcat]#mkdir tomcat-base [07:28:09 root@ubuntu-lyj /data/dockerfile/web/tomcat]#cd tomcat-base/
准备tomcat 安装包
[07:31:00 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-base]#ll total 2704 drwxr-xr-x 2 root root 4096 Aug 8 07:30 ./ drwxr-xr-x 3 root root 4096 Aug 8 07:28 ../ -rw-r--r-- 1 root root 10595340 Jun 9 05:43 apache-tomcat-8.5.81.tar.gz
编辑Dockerfile
[07:44:07 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-base]#vim Dockerfile FROM jdk-centos-base:8u291 LABEL maintainer="JING 12345@qq.com" ADD apache-tomcat-8.5.81.tar.gz /apps RUN ln -sv /apps/apache-tomcat-8.5.81 /apps/tomcat
脚本构建tomcat基础镜像
[07:48:59 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-base]#vim build-command.sh #!/bin/bash docker build -t tomcat-base:8.5.81 .
执行构建
[07:43:53 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-base]#bash build-command.sh
验证镜像构建完成
[07:43:56 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-base]#docker run -it --rm tomcat-base:8.5.81 [root@fa4dd8268f33 /]# ll /apps/ total 4 drwxr-xr-x 4 root root 4096 Aug 8 07:41 apache-tomcat-8.5.81 lrwxrwxrwx 1 root root 35 Aug 8 07:43 tomcat -> /apps/apache-tomcat-8.5.81 [root@fa4dd8268f33 /]# exit exit [07:49:38 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-base]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-base 8.5.81 a4305231bb0b 6 minutes ago 1.01GB jdk-centos-base 8u291 17d323ce7653 10 hours ago 1.01GB centos-base 7.8.2003 3a7c6d1c0eef 14 hours ago 651MB martonyang/centos7.8.2003 latest 0c0f2dcf7afd 12 months ago 268MB
构建业务镜像:
在tomcat目录下,创建tomcat-app1业务目录,部署业务文件
[07:54:55 root@ubuntu-lyj /data/dockerfile/web/tomcat]#mkdir tomcat-app1 [07:55:07 root@ubuntu-lyj /data/dockerfile/web/tomcat]#cd tomcat-app1/ [07:55:11 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#
页面部署
创建 myapp文件夹,建立index.jsp (由开发提供的页面文件)
[08:00:37 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#mkdir myapp [08:01:02 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#cd myapp/ [08:01:04 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1/myapp]#vim index.jsp
打包文件
[08:03:33 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1/myapp]#cd .. [08:04:16 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#ls Dockerfile myapp [10:00:57 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#vim myapp/index.jsp <h1>JING N65 tomcat app1 web page</h1> [08:04:19 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#tar czvf myapp.tar.gz myapp/ myapp/ myapp/index.jsp [08:05:19 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#ls Dockerfile myapp myapp.tar.gz
拷贝出server.html文件到当前目录下/tomcat-app1
[07:46:09 root@ubuntu-lyj /data/dockerfile/web/jdk]#cd /data/dockerfile/web/tomcat/tomcat-app1/ [08:44:59 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#docker cp 715998a104c4:/apps/tomcat/conf/server.xml . [08:45:27 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#ls Dockerfile myapp myapp.tar.gz server.xml
修改页面文件读取路径
[08:46:52 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#vim server.xml <?xml version="1.0" encoding="UTF-8"?> <!-- .................................. <Host name="localhost" appBase="/data/tomcat/webapps" unpackWARs="false" autoDeploy="false"> ................................... </Host> </Engine> </Service> </Server>
准备Dockerfile文件
[09:53:01 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#vim Dockerfile #JING ceshi tomcat app1 FROM tomcat-base:8.5.81 LABEL maintainer="JING 12345@qq.com" ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh ADD server.xml /apps/tomcat/conf/server.xml ADD myapp.tar.gz /data/tomcat/webapps RUN chown www.www /data /apps -R EXPOSE 8080 8443 CMD ["/apps/tomcat/bin/run_tomcat.sh"]
准备容器启动执行脚本
[09:55:56 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#vim run_tomcat.sh #!/bin/bash su - www -c "/apps/tomcat/bin/catalina.sh start" su - www -c "tail -f /etc/hosts"
准备脚本构建
[09:57:49 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#vim build-command.sh #!/bin/bash docker build -t tomcat-web:app1 .
[10:00:04 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#ls build-command.sh Dockerfile myapp myapp.tar.gz run_tomcat.sh server.xml
执行构建
[09:53:11 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#bash build-command.sh
运行容器访问测试
[10:00:50 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app1]#docker run -it -d -p 8080:8080 tomcat-web:app1 fe8bc9858770512d56cf8d49b74d265a7b6b1df047bbd4a64b9059e67b41038f
页面访问目录修改为/data/tomcat/webapps/下没有tomcat默认页面,显示404未找到
访问 http://10.0.0.100:8080/myapp/ 是部署好的web页面
tomcat的docker镜像分层构建完成,业务不同,再次修改业务tomcat-app1镜像即可,不需要修改centos镜像,jdk-base镜像,tomcat-base镜像
例如
在创建一个tomcat-app2业务
演示环境,直接递归复制一份tomcat-app1为tomcat-app2修改
[10:23:08 root@ubuntu-lyj /data/dockerfile/web/tomcat]#ls tomcat-app1 tomcat-base [10:23:09 root@ubuntu-lyj /data/dockerfile/web/tomcat]#cp -r tomcat-app1 tomcat-app2 [10:23:50 root@ubuntu-lyj /data/dockerfile/web/tomcat]#ls tomcat-app1 tomcat-app2 tomcat-base [10:23:52 root@ubuntu-lyj /data/dockerfile/web/tomcat]#cd tomcat-app2/ [10:23:59 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#ls build-command.sh Dockerfile myapp myapp.tar.gz run_tomcat.sh server.xml
修改 build-command.sh文件 ,myapp/index.jsp文件重新打包(此文件生产中由开发提供)
[10:24:54 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#vim build-command.sh [10:26:20 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#cat build-command.sh #!/bin/bash docker build -t tomcat-web:app2 . [10:26:24 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#vim myapp/index.jsp [10:26:44 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#cat myapp/index.jsp <h1>JING N65 tomcat app2 web page</h1> [10:26:50 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#tar czvf myapp.tar.gz myapp/ myapp/ myapp/index.jsp [10:27:27 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#ls build-command.sh Dockerfile myapp myapp.tar.gz run_tomcat.sh server.xml
构建镜像
[10:27:30 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#bash build-command.sh
访问测试
运行镜像:运行本次退出则删除
[10:28:52 root@ubuntu-lyj /data/dockerfile/web/tomcat/tomcat-app2]#docker run -it --rm -p 8081:8080 tomcat-web:app2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)