Docker部署JavaWeb项目

基于Spring Boot搭建的Web项目,用maven作为项目管理工具。通过docker容器部署,对外提供服务。


生成war包

在项目的pom.xml文件添加打包的配置:

1
2
3
4
5
6
7
8
<project ....... >
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<name>...</name>
<description>...</description>
<packageing>war</packaging>
</project>

通过mavenpackage命令生成war包,在项目目录下的target目录下会生成一个.war文件。


编写Dockerfile

Dockerfile文件是用于指导docker如何生成我们需要的docker image的文本。
针对部署JavaWeb应用的需求,编写的Dockerfile如下:

1
2
3
4
5
6
From tomcat:8.5.38-jre8
WORKDIR /usr/local/tomcat
RUN echo "Asia/Shanghai" > /etc/timezone
ADD *.war webapps/service-name.war
EXPOSE 8080
CMD ["bin/catalina.sh", "run"]

命令从上至下依次为:

  • 基于tomcat父镜像构建当前镜像。
  • 将构建容器时的当前目录切换到tomcat根目录。
  • 更改容器系统的时区。
  • 将本地的war包添加到容器系统的tomcat/webapps下。
  • 容器对外暴露8080端口。
  • 容器启动时运行的命令。

运用docker help

docker的子命令挺多,可通过运行docker查看有多少子命令;通过docker –subcmd –help方式查看指定的子命令–subcmd的使用方式。


生成Docker image

dockerfile及其依赖的文件置于同一目录下,主要是ADD命令用到的文件,如上述dockerfile中的.war。运行命令

1
docker build -t image-name:image-version .

如果命令运行成功,docker会根据dockerfile拉取依赖的文件,添加文件,生成指定的镜像,镜像的命名就是命令中指定的image-name:image-version

运行容器

在运行容器前,可先将之前的容器关闭:

1
docker ps | grep image-name | awk '{print $1}' | xargs docker rm -f

启动容器

1
docker run --name container-name -p 8081:8080 -dit image-name:image-version

  • –name contianer-name: 给将要启动的容器命名。
  • -p 进行端口映射。将容器的8080端口映射成宿主机的8081端口,在dockerfile中暴露了容器的8080端口,映射后,访问主机的8081就会访问到容器的8080.
  • -dit:分别是三个参数,主要让容器在后台执行。
  • 最后一个参数是镜像的名称,就是通过dockerfile生成的镜像名,容器是根据那个镜像启动的。

总结

初次用容器,只会看别人的教程依葫芦画瓢,做了些最简单的操作。容器还有很多优秀的特性,对于开发部署也很方便,有待深入学习,进一步发掘。