docker运行springboot项目

释放双眼,带上耳机,听听看~!

方法一

新建一个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

给TA打赏
共{{data.count}}人
人已打赏
安全经验

职场中的那些话那些事

2021-9-24 20:41:29

安全经验

java高并发(十五)J.U.C之FutureTask

2021-11-28 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索