方法一
新建一个SpringBoot项目
编写Dockerfile文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 1# Docker image for springboot file run
2# 基础镜像使用java
3FROM java:8
4
5# time zone 如需要修改时间
6RUN echo "Asia/Chongqing" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
7
8# VOLUME 指定了临时文件目录为/tmp。
9# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
10VOLUME /tmp
11# 将jar包添加到容器中并更名为app.jar
12ADD myapp-0.0.1-SNAPSHOT.jar app.jar
13# 运行jar包
14RUN bash -c 'touch /app.jar'
15ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
16
17
或
1
2
3
4
5
6
7
8 1FROM java:8
2
3ADD myapp-0.0.1-SNAPSHOT.jar app.jar
4
5EXPOSE 30001
6
7ENTRYPOINT ["java","-jar","/app.jar"]
8
配置解释:
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 "app.jar" 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
部署文件
在服务器中新建一个文件夹用来存放我们的项目文件 mkdir docker
将打包好的jar包和Dockerfile文件上传到此文件夹中,然后进入此文件夹cd docker
制作镜像
执行下面命令, 看好,最后面有个 . 点!
1
2
3
4
5
6
7
8
9 1docker build -t springboot-demo .
2-t 参数是指定此镜像的tag名
3
4制作完成后通过下面命令查看我们制作的镜像
5
6docker images
7
8
9
启动容器
有很多人搞不定镜像和容器的关系,其他他俩比较像java中的类与实例,镜像就好比类,而容器就是镜像的一个实例
执行下面命令启动容器
1
2 1docker run -d -p 8081:8080 springboot-demo
2
-d参数是让容器后台运行
-p 是做端口映射,此时将服务器中的8081端口映射到容器中的8080端口
访问
直接浏览器访问: http://
你的服务器ip地址:8081/hello 即可查看效果
方法二
修改 mvn build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 1<build>
2 <!-- docker 中使用 -->
3 <finalName>app</finalName>
4 <plugins>
5 <plugin>
6 <groupId>org.springframework.boot</groupId>
7 <artifactId>spring-boot-maven-plugin</artifactId>
8 </plugin>
9
10 <!-- docker 打包 -->
11 <plugin>
12 <groupId>com.spotify</groupId>
13 <artifactId>docker-maven-plugin</artifactId>
14 <version>0.2.3</version>
15 <configuration>
16 <imageName>${project.name}:${project.version}</imageName>
17 <imageTags>
18 <imageTag>${project.version}</imageTag>
19 <imageTag>latest</imageTag>
20 </imageTags>
21 <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
22 <skipDockerBuild>false</skipDockerBuild>
23 <resources>
24 <resource>
25 <directory>${project.build.directory}</directory>
26 <include>${project.build.finalName}.jar</include>
27 </resource>
28 </resources>
29 </configuration>
30
31 <!--直接在package的时候执行docker build-->
32 <!--<executions>-->
33 <!--<execution>-->
34 <!--<phase>package</phase>-->
35 <!--<goals>-->
36 <!--<goal>build</goal>-->
37 <!--</goals>-->
38 <!--</execution>-->
39 <!--</executions>-->
40 </plugin>
41 </plugins>
42 </build>
43
编写 docker 文件
在src/main/docker文件夹下面建立Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12 1FROM java:8
2# time zone
3RUN echo "Asia/Chongqing" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
4RUN mkdir /app
5RUN mkdir /app/logs
6ADD app.jar /app/app.jar
7ADD runboot.sh /app/
8RUN bash -c 'touch /app/app.jar'
9WORKDIR /app
10RUN chmod a+x runboot.sh
11CMD /app/runboot.sh
12
runboot.sh的内容
1
2 1java -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar
2
也可以直接在Dockerfile中用ENTRYPOINT
1
2 1ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
2
build镜像
1
2
3 1mvn package -Dskip.test=true
2mvn docker:build
3
运行镜像
1
2 1docker run -d -p 8080:8080 -v /tmp/docker-logs:/app/logs springboot-docker-demo
2