文章目录
准备容器
建议拉去Tomcat镜像,这样可以省略掉JDK、Tomcat的配置比较方便。
如果想练习JDK和Tomcat的安装可以拉取个Ubuntu或者CentOS镜像,从头开始搭建;
如果对JDK或者Tomcat版本有特殊要求,可以先去官方仓库看看支持哪些
docker pull tomcat
默认拉取最新版
docker images
可以查看本地的镜像
docker run -d -p 8080:8080 --name hello_tomcat tomcat
利用tomcat镜像,创建容器
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
–name hello_tomcat: 为容器指定一个名称;
可以看到返回的容器ID
- 最新版可能遇到的问题:tomcat启动成功但是报了404
docker exec -it hello_tomcat
进入容器- 发现webapps下都是空的,文件都在webapps.dist下
- 将webapps.dist下的所有文件复制到webapps下
最后即可正常访问tomcat首页
发布war包
docker cp ./gradle_web2-1.0-SNAPSHOT.war hello_tomcat:/usr/local/tomcat/webapps
将自己的war包复制到容器中,可以重启容器或者等tomcat解压这个war包
通过项目名可以访问
制作镜像
在确认自己发布的war包能正常访问之后,还可以将这个容器制作为镜像
docker stop hello_tomcat
先停止掉正在运行的容器
docker commit hello_tomcat helllo_tomcat_image
将自己的容器提交为镜像
如果需要将镜像交给别人使用
- 可以保存为文件交给别人加载
docker save -o 保存的文件名 镜像名
docker load -i 保存的文件名- 也可以推送到远程仓库
docker login 远程仓库地址
docker push 远程仓库地址/项目名
docker pull 远程仓库地址/项目名
docker images
查看自己的镜像
docker run -d -p 8088:8080 --name hello_tomcat_container hello_tomcat_image
- 可能遇到的问题:403 Forbidden
生成镜像前的web服务已经正常,镜像一般不会改变容器内部的信息,问题大概率出在宿主机。
根据经验,403可能是宿主机端口冲突
docker stop hello_tomcat_container
关闭容器netstat -ano|findstr "8081"
发现端口确实被占用,找一个没被占用的端口,我这里选的是8088。
docker rm hello_tomcat_container
删除掉刚刚端口冲突的容器,之后一定要选空闲的端口再重新创建容器。
用Dockerfile制作镜像
上述是先根据tomcat镜像创建容器,再将war包传到容器,最后将容器制作为镜像。我们可以利用Dockerfile将这几步合并在一起。
- 创建hello_tomcat_dockerfile文件,输入下面的内容:选择tomcat镜像,将自己war包复制进去,一定要注意war包的路径。
from tomcat
COPY gradle_web2-1.0-SNAPSHOT.war /usr/local/tomcat/webapps
docker build -f ./hello_tomcat_dockerfile -t hello_tomcat_image:v2 .
制作成新的镜像,v2为tagdocker images
可以查看到刚刚制作的镜像
docker run -d -p 8888:8080 --name hello_tomcat_container2 hello_tomcat_image:v2
成功访问上自己的web项目