1、安装包准备

准备Centos镜像:
在这里插入图片描述
jdk和tomcat压缩包:
在这里插入图片描述

2、构建容器

2.1、编写构建文件

在存放安装包的目录下创建构建文件:

vi Dockerfile

在这里插入图片描述
在Dockerfile添加以下代码:

#依赖镜像名称和ID
FROM daocloud.io/library/centos:6.8

#指定镜像创建者信息
MAINTAINER alinlx

#切换工作目录
ADD jdk-8u181-linux-x64.tar.gz /opt/jdk
ADD apache-tomcat-9.0.50.tar.gz /opt/tomcat
 
#配置java环境变量
ENV JAVA_HOME /opt/jdk/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

RUN chmod +x /opt/tomcat/apache-tomcat-9.0.50/bin/*.sh 
EXPOSE 8080 
ENTRYPOINT /opt/tomcat/apache-tomcat-9.0.50/bin/startup.sh && /bin/bash

参数解释:
FROM daocloud.io/library/centos:6.8
以centos6.8为基础构建容器

ADD jdk-8u181-linux-x64.tar.gz /opt/jdk/
ADD apache-tomcat-9.0.50.tar.gz /opt/tomcat/
添加两个压缩包,docker会自动解压好,/opt/ 是解压的文件位置

ENV JAVA_HOME /opt/jdk
ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar:JAVA
H
OME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV PATH P A T H : PATH:PATH:JAVA_HOME/bin
ENV是docker中配置环境变量的方式,这里配置了jdk的环境。

2.2、根据构建文件,构建镜像
docker build -t alinlx/javawebfromdockerfile:0.2 . -f Dockerfile

创建名为alinlx/javawebfromdockerfile的镜像
在这里插入图片描述

2.3、构建完成,查看镜像
docker images

在这里插入图片描述

2.4、创建容器

启动 Java Web 容器,根据前面环境配置,不用再进入容器的命令行,而是直接启动容器内部的 tomcat 服务。使用以下命令:

docker run -d -p 8888:8080 -it alinlx/javawebfromdockerfile:0.2

在这里插入图片描述
参数解析:
-d:表示以“守护模式”执行/root/run.sh脚本,tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 8888 端口,这样就向外界暴露了 8888 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
–name:表示容器名称,用一个有意义的名称命名即可。
启动成功,通过docker ps命令来查看当前正在运行的容器:
在这里插入图片描述

4.3、测试

浏览器中,输入以下地址,即可访问 Tomcat 首页:http://127.0.0.1:8888/
在这里插入图片描述

**注意:**使用的是宿主机的 IP 地址,与对外暴露的端口号 8888,它映射容器内部的端口号 8080。

4.3.1、测试部署项目

容器倒是启动起来了,但是怎么把war包丢里面运行起来呢?

docker cp XXX.war 1e2b6b069253:/opt/tomcat/apache-tomcat-9.0.50/webapps

在这里插入图片描述
参数解释:
XXX.war: 需要部署的项目发布程序包
1e2b6b069253:/opt/tomcat/apache-tomcat-9.0.50/webapps 冒号前面为容器名称或者id, 冒号后面为tomcat的webapps全路径

将程序包拷贝进去后,tomcat会自动发布的,不需要再自己去启动tomcat了,因为容器启动后tomcat就默认启动了 Dockerfile最后一行就是启动tomcat。
在这里插入图片描述
访问系统:
在这里插入图片描述
说明:
也可以在创建容器的时候挂载本地目录到容器中,这样就不用拷贝,直接将程序包war放到本地挂载的目录就行。
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
  /bin/bash:一旦容器启动,需要执行的命令,当前使用 “/bin/bash”, 表示启动后直接进bash shell
  /usr/local/work/是宿主机器(Linux)上创建的一个文件夹;
  /mnt/software是centos的容器里面的目录文件
  这里挂载的意思就是 b36870be5ede 创建的容器访问 /mnt/software/ 目录下的文件就相当于访问 宿主机的 /usr/local/work/下的文件,且两者文件夹里内容相同。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐