day104 dockerfile多阶段构建java的容器
day104 dockerfile多阶段构建java的容器
前提
层层递进,每一个镜像,都可以作为公共的镜像,让其他的镜像再使用。
使用公共的资源
而非一个镜像,包罗万象
优化,是一个玄学,没有场景,就没有场景下的优化
死记硬背,是根本不适合的,
只有合适的选择,没有最准确的选择。
前提
我们目前构建一个docker的镜像
都是一个文件,一个完整的镜像,环境加上代码
centos
centos + nginx + flask + jdk
centos + php-fpm

基于jdk,部署多个阶段的镜像
1.centos基础镜像(基础镜像,可以给很多其他的镜像,作为一个bash image(基础镜像,)
时区环境,
容器内部的环境,支持中文
# 写一个Dockerfile
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo;
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo;
FROM centos:7.6.1810
RUN yum install net-tools bash-completion supervisor vim -y \
&& yum clean all \
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
构建镜像
docker build -t base_centos .
2.jdk基础镜像 base_centos + jdk java 运行的环境
运行 (业务1jar包部署)
这个也就是修改环境的变量,安装jdk
# 本地准备好一个/etc/profile ,加入环境变量
1. 找到一个干净的/etc/profile (其实就是一个干净的环境变量)
2. 其实开启一个新的centos容器发送到一个目录即可。
[root@docker-100 jdk-centos]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6744ed4d2e28 centos:7.6.1810 "ping baidu.com" 35 seconds ago Up 29 seconds crazy_robinson
[root@docker-100 jdk-centos]# docker cp 674:/etc/profile .
Successfully copied 3.58kB to /mutil-images/jdk-centos/.
[root@docker-100 jdk-centos]#
[root@docker-100 jdk-centos]#
[root@docker-100 jdk-centos]# ll
total 4
-rw-r--r-- 1 root root 1819 Oct 31 2018 profile
# 修改profile的文件加入jdk的环境
[root@docker-100 jdk-centos]# tail -5 profile
export JAVA_HOME=/opt/jdk
export TOMCAT_HOME=/opt/tomcat
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/bin:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
# 准备构建centos + jdk 的安装包
[root@docker-100 jdk-centos]# lsc
jdk-8u221-linux-x64.tar.gz profile
# 写Dockerfile
FROM base_centos
ADD jdk-8u221-linux-x64.tar.gz /opt
ADD profile /etc/profile
RUN ln -s /opt/jdk1.8.0_221 /opt/jdk
ENV JAVA_HOME /opt/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
# 构建jdk基础环境,可以再组合jdk+hadoop jdk+es jdk_springboot等。
[root@docker-100 jdk-centos]# docker build -t base_jdk:1.8.0 .
# 查看镜像
[root@docker-100 jdk-centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
base_jdk 1.8.0 a881f340546c 32 seconds ago 693MB
base_centos latest 047524a2dd40 21 hours ago 286MB
# 启动容器
docker run -it base_jdk:1.8.0 bash
# 查看jdk的版本
[root@e199b670cba0 /]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
到了第三层部署应用--->halo博客
docker run -d -p 8090:8090 -v /multi-iamges/jdk-centos/jar-app:/jar-app/ base_jdk:1.8.0 java -jar /jar-app/halo-1.4.1.jar
7e5129e0a98dc27f7d789c14152b3bfd89df316e96c6aafeff33e8e4899e70e3
重要的是jpress 博客,用的是自己的数据库
jpress 博客,用的是自己的数据库
# 如何连接数据库
1. 连接redis ? id:port
2. 还是yum部署给宿主机? ip:port
3. 还是连接容器内的宿主机 IP:port(确保jpress博客数据的安全)
# 下载mysql的镜像
[root@docker-100 jdk-centos]# docker pull mysql:5.7.25
# 启动数据库的容器
docker run -e MYSQL_ROOT_PASSWORD='linux0224' -d -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql mysql:5.7.25
# 数据库有了
# 部署后台了,源码的准备
[root@docker-100 war-app]# ll
total 67640
-rw-r--r-- 1 root root 69261961 May 22 12:02 jpress.war
# 准备一个tomcat的运行环境
# 建立一个公共的tomcat + supervisor 环境
# 准备一个tomcat 的包
[root@docker-100 tomcat_centos]# ls
apache-tomcat-8.0.27.tar.gz jpress.war tomcat.ini
# docker内的进程运行,必须是前台运行
# /opt/tomcat/bin/catalina.sh run,run指令会让tomcat前台运行
# 准备一个supervisor的配置文件
cat > tomcat.ini << 'EOF'
[program:my-tomcat]
command=/opt/tomcat/bin/catalina.sh run
autostart=true
autorestart=true
startsecs=5
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile=/var/log/supervisor/tomcat.log
EOF::
# 准备一个Dockerfile构建环境
# Dokcerfile
FROM base_jdk:1.8.0
ADD apache-tomcat-8.5.82.tar.gz /opt
RUN ln -s /opt/apache-tomcat-8.5.82 /opt/tomcat
# 构建tomcat镜像
docker build -t base_tomcat:8.5.82 .
# 查看镜像的环境
[root@docker-100 tomcat_centos]# docker run -it base_tomcat:8.5.82 bash
[root@62b929ab2b27 /]# env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/jdk/bin
PWD=/
JAVA_HOME=/opt/jdk
SHLVL=1
HOME=/root
CLASSPATH=/opt/jdk/lib:/opt/jdk/jre/lib
_=/usr/bin/env
[root@6cce04cfe8b9 /]# /opt/tomcat/bin/catalina.sh version
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /opt/jdk/jre
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.27
Server built: Sep 28 2015 08:17:25 UTC
Server number: 8.0.27.0
OS Name: Linux
OS Version: 3.10.0-1160.71.1.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_221-b11
JVM Vendor: Oracle Corporation
[root@6cce04cfe8b9 /]#
运行jpress博客
Dockerfile构建环境,加入supervisor
supervisor + tomcat + 业务代码 ====运行环境镜像
FROM base_jdk:1.8.0
ADD apache-tomcat-8.0.27.tar.gz /opt
RUN ln -s /opt/apache-tomcat-8.0.27 /opt/tomcat
COPY jpress.war /opt/tomcat/webapps/
COPY tomcat.ini /etc/supervisord.d/
RUN sed -i 's/nodaemon=false/nodaemon=true/g' /etc/supervisord.conf
EXPOSE 8080
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]
# 创建镜像
docker build -t base_tomcat:8.5.82 .
#运行博客
docker run -d --name test-jpress -p 8080:8080 --link test-mysql base_tomcat:8.5.82
最后看到这里就表示ok

浙公网安备 33010602011771号