• docker之镜像分层


    基于分层实现tomcat业务镜像

    centos系统基础命令层

    系统基础命令层通常放所需要的基础命令,以及可以添加业务服务所需要的启动用户
    
    1、mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk},system/{ubuntu,centos,alpine}} -pv
    
    2、cd /opt/dockerfile/system/centos/
    
    3、root@test:/opt/dockerfile/system/centos# vim Dockerfile
    #centos-7.7 base image         
    
    FROM centos:7.7.1908                   #指定父镜像,基于哪个镜像进行自定义操作
    
    LABEL maintainer="dongge 903660123@qq.com"          #指定镜像构建者的姓名及邮箱
    
    RUN yum install -y epel-release && yum install -y 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
    
    4、root@test:/opt/dockerfile/system/centos# vim build_command.sh    #创建镜像构建脚本
    #!/bin/bash
    docker build -t centos-base:7.7.1908 .
    
    5、root@test:/opt/dockerfile/system/centos# bash build_command.sh   #创建镜像
    

    构建JDK基础层

    https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html #jdk-8u241下载地址

    JDK基础层,只放JDK环境,不放代码等
    
    1、cd /opt/dockerfile/web/jdk
    
    2、mkdir jdk-8u241             #jdk基础层镜像也分各种不同版本的jdk
    
    3、cd jdk-8u241/
    
    4、cp /etc/profile .
    
    5、vim profile                #设置全局环境变量文件,针对所有用户生效
    export JAVA_HOME=/usr/local/jdk
    export JRE_HOME=/usr/local/jdk/jre
    export CLASSPATH=$JAVA_HOME/lib:JRE_HOME/lib
    export PATH=$JAVA_HOME/bin:$PAT
    
    6、root@test:/opt/dockerfile/web/jdk/jdk-8u241# vim Dockerfile
    FROM centos-base:7.7.1908     #指定父镜像为系统基础命令层
      
    LABEL maintainer="dongge 9036605123@qq.com"
    
    ADD jdk-8u241-linux-x64.tar.gz /usr/local/src     #ADD会自动解压tar包;二进制包需要在当前目录下
    
    RUN ln -sv /usr/local/src/jdk1.8.0_241 /usr/local/jdk
    
    ADD profile /etc/
    
    ENV JAVA_HOME /usr/local/jdk                 #设置JAVA环境变量
    ENV JRE_HOME /usr/local/jdk/jre
    ENV CLASSPATH $JAVA_HOME/lib:$JRE_HOME/lib
    ENV PATH $JAVA_HOME/bin:$PATH
    
    RUN ln -svf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  #容器中的时区默认是UTC,需要进行修改,否则服务记录日志中的时间都是错误的;-f参数是强制覆盖原有软连接
    
    7、vim build_command.sh 
    #!/bin/bash
    docker build -t centos-jdk:8u241 .
    
    8、bash build_command.sh
    
    注意事项:
    /etc/profile中的环境变量,只有通过ssh连接之后(或者在当前终端执行source /etc/profile)才会加载profile中定义的环境变量,容器进入时并未使用ssh(也没有使用source /etc/profile,加载文件中的变量),所以文件中的环境变量将无效,只能通过ENV设置环境变量;ENV设置的环境变量只对root生效,如果想对容器中的普通用户生效,则还需要把环境变量加入到/etc/profile中,当切换至普通用户时,会自动加载/etc/profile中的变量。
    

    构建tomcat基础层

    https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.51/bin/ #tomcat-8.5.51下载地址

    此层只安装tomcat服务,不存放配置文件与代码
    
    1、cd /opt/dockerfile/web/tomcat
    
    2、mkdir tomcat-8.5.51-base             #tomcat也会有多个版本
    
    3、cd tomcat-8.5.51-base
    
    4、vim Dockerfile
    FROM centos-jdk:8u241
      
    LABEL maintainer="dongge 9036605123@qq.com"
    
    ADD apache-tomcat-8.5.51.tar.gz /apps     #/apps目录不存在,会自动创建
    
    RUN ln -sv /apps/apache-tomcat-8.5.51 /apps/tomcat   #把tomcat二进制包做软连接,以后升级tomcat版本只需要删除软连接,再对新版本tomcat重新创建一个软连接
    
    5、vim build_command.sh
    #!/bin/bash
    docker build -t centos-tomcat:8.5.51 .
    
    6、bash build_command.sh
    

    构建业务层

    针对不同的业务层,需要构建不同的镜像;镜像层是存放业务代码以及tomcat配置文件
    
    1、cd /opt/dockerfile/web/tomcat
    
    2、mkdir tomcat-app1            #不同的业务,需要有不同的镜像
    
    3、cd tomcat-app1
    
    4、scp 192.168.3.200:/root/server.xml .     #把tomcat的配置文件从别的服务器上拷贝过来
    
    5、vim server.xml
    <Host name="localhost"  appBase="/data/tomcat/webapps"  unpackWARs="false" autoDeploy="false">         #关闭自动解压war包,关闭自动部署,否则别人上传的war会被自动解压并运行
    
    6、mkdir linux           #创建一个存放代码的文件夹
    
    7、echo "test docker tomcat app1" > linux/index.html
    
    8、tar zcvf linux.tar.gz linux/*
    
    9、vim Dockerfile
    FROM centos-tomcat:8.5.51
      
    LABEL maintainer="dongge 9036605123@qq.com"
    
    ADD server.xml /apps/tomcat/conf
    
    ADD linux.tar.gz /data/tomcat/webapps
    
    ADD run_tomcat.sh /apps/tomcat/bin/
    
    RUN chown www.www /apps/tomcat/ -R          #修改tomcat目录的权限,否则普通用户没有权限启动catalina.sh以及记录日志
    
    EXPOSE 8080 8005 8009                       #暴露容器端口
     
    CMD ["/apps/tomcat/bin/run_tomcat.sh"]      #镜像启动为容器后,执行此脚本
    
    10、vim run_tomcat.sh
    #!/bin/bash
    echo "nameserver 223.5.5.5" > /etc/resolv.conf    #指定DNS服务器
    su - www -c "/apps/tomcat/bin/catalina.sh start"  #以www的身份启动tomcat
    tail -f /etc/hosts          #指定一个一直运行在前台的进程作为容器的守护进程
    
    11、chmod a+x run_tomcat.sh
    
    12、vim build_command.sh
    #!/bin/bash
    docker build -t tomcat-linux:app1 .
    
    13、bash build_command.sh
    
    注意事项:
    后期如果还有业务,则只需要把tomcat-app1目录进行拷贝,然后做相应的修改即可
    

    分层镜像的缺点

    如果是中间的某一层,或者是系统基础命令层,少了一个命令,则系统基础命令层后面的每一层都需要重新做,这样才能传递业务层镜像。
    
  • 相关阅读:
    ウェブプロジャクトがジャワープロジャクトに参照する方法
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    财富定律
    jsp文件下载完整方法
    使用Axis开发Web Service程序
    CDH安装指南——酒仙网技术
    linux下 putty 的痛苦编译之路
    博客园
    windows 下 cannal & otter 配置
    Go 1.8 正式发布,编译时间比 Go 1.7 提高约 15%
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/13301734.html
Copyright © 2020-2023  润新知