目标:生成tomcat镜像并运行
1.下载基础镜像 docker pull contos:7 理解为下载操作系统的相关库依赖
2.下载tomcat,jdk
3.vim Dockerfile
#指定基础镜像
FROM centos
#镜像维护者信息
MAINTAINER bingo<chen@163.com>
#把java和tomcat添加到容器中,自动解压
ADD jdk-8u341-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.65.tar.gz /usr/local/
#设置工作访问时候的workdir路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_341
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.65
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.65
ENV PATH $PATH:JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听端口
EXPOSE 8080
#入口,tomcat的启动命令
CMD /usr/local/apache-tomcat-9.0.65/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.65/bin/logs/catalina.out
4.构建镜像
docker build -f Dockerfile -t diytomcat . //.不能丢弃,表示当前目录
Docker images 查看镜像
docker rmi 镜像id //删除镜像
5.启动镜像创建容器
docker run -d -p 9091:8080 --name santomcat -v /opt/my/tomcat/test:/usr/local/apache-tomcat-9.0.65/webapps/test mytomcat
-p:把8080端口映射到宿主机的9091端口
-name: 名称
-v:挂载日志
开机自启动在后面加上:–restart=always
6.范围ip:端口(如果设置了上面的挂载,webapps里为空没有这个)
docker exec -it 容器id /bin/bash #进入容器内部
systemctl restart docker #重启docker
curl localhost:8080 #查询宿主机是否连接成功
找个javaweb项目,可以是下载仓库 · 植树chen/JavaWeb项目 - Gitee.com
将web项目打成war包
- 首先在IntelliJ IDEA中选中自己要打包的项目,点击file,选择Project Structure。
- 在Project Structure中选中Artifacts。
- 点击左上角绿色的+号,选择Web Application Archive,选中你要打包的项目,图中即为for 'demo:war exploded'。
- 此时发现绿色+号这一栏下面多了demo:war这一项,选中它,然后设置Output Directory(即war包放置的地址)。选中Include in project build。点击Apply,然后确定
- 选中Build菜单下的Build Artifacts
- 选择demo:war,点击Build。然后等Build完成,就可以去之前设置的Output Directory中查找生成的war包。
将war包放入tomcat容器并运行
- 进入容器
docker exec -it 173533e6f812 /bin/bash
2.在容器中查找到tomcat的webapps文件夹
3.把war包复制到tomcat的webapps文件夹
docker cp /opt/tomcat/blogs_war.war 173533e6f812:/usr/local/apache-tomcat-9.0.65/webapps
4.重启容器
docker restart 容器id
5.ip:端口/项目名称
二.使用挂载卷的方式
在启动镜像创建容器的时候:/opt/my/tomcat:/usr/local/apache-tomcat-9.0.65/webapps
- 向/opt/my/tomcat中上传war包
2.启动项目网址
http://192.168.200.128:9091/blogs/
注意:在挂载卷中如果不是wabapps里面,应该war包是不会自动解压的(个人理解)