Docker for Windows部署Spring Boot maven项目

1.pom.xml添加Docker依赖

    <properties>
        <docker.image.prefix>ramer</docker.image.prefix>
    </properties>
    <plugin>
       <groupId>com.spotify</groupId>
           <artifactId>docker-maven-plugin</artifactId>
           <version>0.4.11</version>
           <configuration>
           <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
               <dockerDirectory>src/main/docker</dockerDirectory>
                 <resources>
                    <resource>
                       <targetPath>/</targetPath>
                       <directory>${project.build.directory}</directory>
                       <include>${project.build.finalName}.jar</include>
                    </resource>
                  </resources>
            </configuration>
     </plugin>

注意:在添加docker插件时,可能会出现安装不了的情况,这是因为 com.spotify插件没在maven白名单中,在setting.xml文件中添加:

 <pluginGroups>
    <pluginGroup>com.spotify</pluginGroup>
  </pluginGroups>

2.容器化应用

在项目目录src/main下新建文件夹,创建Dockerfile文件(该文件没有后缀): src/main/docker/Dockerfile,内容如下

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD home-page-interface-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 9090
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Dockerfile文件语法说明

FROM:

指定了当前镜像继承的基础镜像。

文件中:表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载。

VOLUME: 

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

Volume设置指令,使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用。我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。

ADD:

从当前工作目录复制文件到镜像目录中去。

EXPOSE: 

EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在Dockerfile中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是docker run -P时,会自动随机映射EXPOSE的端口。

要将EXPOSE和在运行时使用-p <宿主端口>:<容器端口>区分开来。-p,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而EXPOSE仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

ENTRYPOINT: 

配置容器启动时自动执行的命令。

这里:为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT。

3. 创建docker镜像

在cmd.exe中进入自己项目的目录:执行mvn package -Dmaven.test.skip=true docker:build

这里要确保已经将maven添加到path环境变量中,并且已经开启docker。

4. 运行docker容器

docker run --name=docker-demo -p 9090:9090 -t ramer/demo

运行后,会在cmd.exe中出现标志性的springboot启动标志,表示启动完成。此时可以在浏览器等访问项目。

5. 启动/关闭/重启/删除docker容器

cmd: docker start/stop/restart/rm CONTAINER_ID/NAME 
其中: 
CONTAINER_ID: 是容器id,执行 docker ps 可查看 
NAME: 是容器的名称,也就是docker run –name后面的名字
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章