1. 程式人生 > 實用技巧 >Docker Java 映象基礎(四)

Docker Java 映象基礎(四)

基於官方提供的centos 7.2.1511 基礎映象構建JDK 和tomcat 映象,先構建JDK映象,然後在基於JDK映象構建tomcat映象

構建 centos:latest 基礎映象:

# 下載基礎映象JDK:
docker pull centos

# 執行構建JDK映象:
mkdir -pv /opt/dockerfile/{web/{nginx,tomcat,jdk.apache},system/{centos,ubuntu,redhat}}

# 清除<none> 型別的映象:
1 )確認:  docker images | grep "<none>" | awk '{print $3}'
2 )刪除:  docker rmi `docker images | grep "<none>" | awk '{print $3}'`

# 打一個基礎映象:
 docker tag centos:latest centos:7.6.1810
 
# 編寫Dockerfile:
vim dockerfile

from centos:7.6.1810


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  netols \
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

RUN rm -rf /etc/localtime && ln -sv /usr/share/javazi/Asia/Shanghai /etc/localtime


# 構建一個基礎映象:
docker build -t centos-base:v1 .

#  檢視一個映象有幾層:
docker images history  映象ID

構建Jdk-Base 基礎版本:

# 建立JDK版本images:
vim Dockerfile

# For JDK Base
FROM centos-base:v1    # 這個根據自己的映象來決定
MAINTAINER [email protected]

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

# 構建JDK映象:
vim docker_build.sh

docker build -t jdk-base:1.8.0.192 .

構建tomcat-base 映象:

# 建立tomcat-base映象 
cd /opt/dockerfile/web/tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz

# 建立dockfile檔案:
vim Dockerfile

FROM jdk-base:1.8.0.192
MAINTAINER [email protected]

RUN test -d /data/soft || mkdir -p /data/soft
RUN test -d /data/www || mkdir -p /data/www
ADD apache-tomcat-8.5.39.tar.gz /data/soft
RUN ln -svf /data/soft/apache-tomcat-8.5.39 /data/soft/tomcat
RUN chown -R tomcat.tomcat /data/soft/tomcat /data/soft/apache-tomcat-8.5.39 /data/www/

# 構建JDK映象:
vim docker_build.sh

docker build -t tomcat-base:8.5.39 . 

# 根據映象建立容器:
docker run -ti --rm tomcat-base:8.5.39 bash



構建tomcat-app1 映象:

# 建立tomcat-app1 映象:

FROM centos-base:v1

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
ADD profile /etc/profile

RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

###################################################################
#  執行指令碼 docker_build.sh,構建映象:  

#!/bin/bash
docker build -t jdk-base:1.8.0.192 .


###################################################################

# 測試構建的映象是否可以正常執行:
[root@node-2 tomcat-app1]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
tomcat-app1         v1                  642ebdce8a40        About a minute ago   964MB
tomcat-base         8.5.39              507bbd514fc5        2 minutes ago        950MB

## 前臺互動的方式測試一下映象:
[root@node-2 tomcat-app1]# docker run -ti --rm -p 8080:8080 tomcat-app1:v1 
10.10.5.136 hostname is start
Using CATALINA_BASE:   /data/soft/tomcat
Using CATALINA_HOME:   /data/soft/tomcat
Using CATALINA_TMPDIR: /data/soft/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /data/soft/tomcat/bin/bootstrap.jar:/data/soft/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	8ef11a979732

## 驗證是否正常執行:
[root@node-2 tomcat-app1]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
41bc8227215b        tomcat-app1:v1      "/data/soft/tomcat/b…"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp, 8443/tcp   funny_lalande

## 訪問一下頁面:
[root@node-2 tomcat-app1]# curl -I 127.0.0.1:8080/app1
HTTP/1.1 302 
Location: /app1/
Transfer-Encoding: chunked
Date: Mon, 20 Jul 2020 10:59:33 GMT

http://IP:8080/app1


快速構建 tomcat-app2

cd /opt/dockerfile/web/tomcat
cp -r tomcat-app1 tomcat-app2

# 修改檔案內容:
1  code.tar.gz 內容要最新的
2  
vim docker_build.sh
docker build -t tomcat-app2:v1 .

3  修改dockerfile:
vim Dockerfile

FROM tomcat-base:8.5.39
maintainer 57674891@qqcom

RUN test -d /data/www/webapps/app2 || mkdir -p /data/www/webapps/app2
ADD code.tar.gz /data/www/webapps/app2
ADD server.xml /data/soft/tomcat/conf
ADD run_tomcat.sh /data/soft/tomcat/bin/

RUN chown -R tomcat.tomcat /data/soft/* /data/www/webapps/app2

EXPOSE 8080 8443

CMD ["/data/soft/tomcat/bin/run_tomcat.sh"]

4  打包檔案:
tar -zcvf code.tar.gz index.html 

5  構建docker映象:
sh docker_build.sh 

6  測試映象:
docker run -ti -p 8080:8080 --rm 映象ID bash

7 訪問頁面:
http://10.10.5.136:8080/app2/index.html

# 以上重新就構建出來了一套新的業務應用

提示- 境變數很重要:

# 1 ) Dockerfile 裡面的環境變數很重要,一定要在tomcat-base 基礎的映象完成之後 測試一下 映象是否可以正常執行:
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
ADD profile /etc/profile


# 2 ) JDK-base 打映象的就要 一起設定 2種變數 /etc/profile 和 Dockerfile 裡面的 ENV 變數
......
vim  profile

export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export TOMCAT_HOME=/data/soft/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