docker 业务镜像分层

docker 业务镜像分层

mark

​ 如图所示,docker 为了实现镜像复用,减小构建镜像难度,可以使用镜像分层。 第一步先 下载官方的系统镜像 修改tag ,并且安装一些常用的基础命令,作为使用的基础系统镜像。 第二步,这一步基于自定义的系统基础镜像 安装各种软件服务,但是这一部不涉服务配置及业务代码。可以在这步创建和业务相关的账号,也可以在第一步中创建一个通用的账号。 第三步 主要是对服务的具体配置、代码 修改。

​ 缺点: 如果突然发现 ,最底层镜像(比如系统的基础镜像) 缺少了一个包 ,现需要在底层dockerfile 中修改 ,如果生效到全局 ,则从上到下的dockerfile 都需要重新build 一下。

​ 下面以 构建 tomcat 镜像为例。

一、构建系统基础镜像

创建存放dockerfile 的文件夹

cd /opt
mkdir dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}}  -pv
root@z2:/opt/dockerfile# tree  -d  -L 2
.
├── system
│   ├── centos
│   ├── redhat
│   └── ubuntu
└── web
    ├── apache
    ├── jdk
    ├── nginx
    └── tomcat

下载官方基础镜像

docker  pull centos:7.8.2003

编写dockerfile

root@z2:/opt/dockerfile# cd  system/centos/
FROM centos:7.8.2003

MAINTAINER zt  25958889@qq.com

RUN yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop &
&  rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  && useradd www -u 2020

构建镜像

#!/bin/bash
docker build -t  linux37-centos-base:7.8.2003 .

二、构建基础服务镜像

2.1 构建jdk 镜像
2.1.1 准备 jdk 安装包和profile
root@z2:/opt/dockerfile/web/jdk# ls
jdk-8u212-linux-x64.tar.gz  profile

profile 主要设置java_home 变量

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
2.1.2 dockerfile
FROM linux37-centos-base:7.8.2003 

maintainer zt 25958889@qq.com

ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /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
2.1.3 构建镜像

build.sh

#!/bin/bash
docker build -t  linux37-centos7.8-jdk:8u212 .
root@z2:/opt/dockerfile/web/jdk# bash build.sh 
2.2 构建tomcat
root@z2:/opt/dockerfile/web# mv tomcat  tomcat-base
root@z2:/opt/dockerfile/web# 
2.2.1 准备tomcat 安装包
root@z2:/opt/dockerfile/web/tomcat-base# ls
apache-tomcat-8.5.45.tar.gz
2.2.2 编写dockerfile
FROM linux37-centos7.8-jdk:8u212

#env
ENV TZ "Asia/Shanghai"
ENV LANG en_US.UTF-8
ENV TERM xterm
ENV TOMCAT_MAJOR_VERSION 8
ENV TOMCAT_MINOR_VERSION 8.5.45
ENV CATALINA_HOME /apps/tomcat
ENV APP_DIR ${CATALINA_HOME}/webapps


ADD apache-tomcat-8.5.45.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.45 /apps/tomcat
2.2.3 构建镜像
#!/bin/bash
docker build -t  linux37-centos7.8-tomcat:8.5.45 .
root@z2:/opt/dockerfile/web/tomcat-base# bash build.sh 

三、构建 业务镜像

root@z2:/opt/dockerfile/web# mkdir tomcat-app1
root@z2:/opt/dockerfile/web# cd tomcat-app1/
3.1 准备代码文件
oot@z2:/opt/dockerfile/web/tomcat-app1# mkdir  app
root@z2:/opt/dockerfile/web/tomcat-app1# echo "linux37 tomcat app1 " >app/index.html
root@z2:/opt/dockerfile/web/tomcat-app1# tar czvf  app.tar.gz app/
app/
app/index.html
3.2 准备tomcat 的配置文件
  • server.xml

    修改目录

     <Host name="localhost"  appBase="/data/tomcat/webapps" unpackWARs="true" autoDeploy="true">
    
  • catalina.sh 修改java 资源限制

    
    JAVA_OPTS="-server -Xms1g -Xmx1g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65  -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled"
    
    

    加权限

    root@z2:/opt/dockerfile/web/tomcat-app1# chmod +x catalina.sh 
    
3.3 编写dockerfile
FROM linux37-centos7.8-tomcat:8.5.45

maintainer zt "25958889@qq.com"

ADD app.tar.gz /data/tomcat/webapps
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD server.xml /apps/tomcat/conf/server.xml
ADD catalina.sh  /apps/tomcat/bin/catalina.sh
RUN chown www.www /apps/tomcat /data/tomcat /apps/apache-tomcat-8.5.45 -R
EXPOSE 8080 8443

CMD ["/apps/tomcat/bin/run_tomcat.sh"] 
3.4 tomcat 启动脚本

为什么不用CMD 直接 调用Catalina.sh ? 为了可以在容器内任意重启tomcat

root@z2:/opt/dockerfile/web/tomcat-app1# vim run_tomcat.sh

#!/bin/bash
echo "nameserver 223.6.6.6" > /etc/resolv.conf
su - www -c "/apps/tomcat/bin/catalina.sh start"
tail -f /etc/hosts
3.5 构建镜像
#!/bin/bash
docker build -t  linux37-tomcat:app1 .
root@z2:/opt/dockerfile/web/tomcat-app1# bash build.sh 
3.6 验证结果
root@z2:~# docker run  -d  -p 8888:8080  linux37-tomcat:app1
0be13e1e787d629441c598cd1b0ceb515ca4c4eec5fe860d8a5b03b9ad7dbcb1

root@z2:~# curl http://192.168.1.102:8888/app/
linux37 tomcat app1 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值