springboot + docker
-
1 首先我们需要创建一个springboot项目
-
2 我们直接使用idea自带的工具maven package进行打包
- 对应的jar会生成在/Users/chenyunbin/Documents/我的idea项目/dockertest/target目录下
- 对应的jar会生成在/Users/chenyunbin/Documents/我的idea项目/dockertest/target目录下
-
3 我们创建一个文件夹存放我们生成的jar包和Dockfile文件
# Docker image for springboot file run
# VERSION 0.0.1
# Author: cyb
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER cyb <cyb@qq.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD dockertest-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- 4 通过Dockerfile来构建我们的镜像
- docker build -t 指定我们的镜像 指定Docker的上下文路径(需要copy到docker引擎,默认是Dockfile路径)
- docker build -t springbootdemo4docker .
- 注意我们需要在Dockerfile所在的目录执行命令。
docker build -t springbootdemo4docker .
[+] Building 4.0s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/java:8 2.1s
=> [internal] load build context 1.2s
=> => transferring context: 18.82MB 1.2s
=> CACHED [1/3] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d 0.0s
=> [2/3] ADD dockertest-0.0.1-SNAPSHOT.jar app.jar 0.1s
=> [3/3] RUN bash -c 'touch /app.jar' 0.4s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:7b1b0176cc3f849defb55d92f3faf773bc77f4dbe11ec3556ce0e14c8955164f 0.0s
=> => naming to docker.io/library/springbootdemo4docker
查看我们生成的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springbootdemo4docker latest 7b1b0176cc3f 4 seconds ago 681MB
- 5 通过镜像来启动我们的容器
- docker run -d -p 8080:8080 容器名字
- docker run -d -p 8080:8080 springbootdemo4docker
- 这里注意一下: 第一个port是我们外部访问的port,第二个port就是容器使用的port,也就是springboot项目启动的port。不要弄混了。
运行对应的镜像
docker run -d -p 8080:8080 springbootdemo4docker
查看对应启动的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4c528860776 springbootdemo4docker "java -Djava.securit…" 4 seconds ago Up 4 seconds 0.0.0.0:8080->8085/tcp optimistic_hamilton
另外可以查看对应的启动日志
docker logs -f 容器的id
docker logs -f f4c528860776
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.5.3)
2021-07-28 02:50:25.848 INFO 1 --- [ main] c.cyb.dockertest.DockertestApplication : Starting DockertestApplication v0.0.1-SNAPSHOT using Java 1.8.0_111 on dbaa871f57ca with PID 1 (/app.jar started by root in /)
2021-07-28 02:50:25.858 INFO 1 --- [ main] c.cyb.dockertest.DockertestApplication : No active profile set, falling back to default profiles: default
2021-07-28 02:50:27.703 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ws.config.annotation.DelegatingWsConfiguration' of type [org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$a8e1f653] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-07-28 02:50:27.870 INFO 1 --- [ main] .w.s.a.s.AnnotationActionEndpointMapping : Supporting [WS-Addressing August 2004, WS-Addressing 1.0]
2021-07-28 02:50:28.691 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-07-28 02:50:28.719 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-07-28 02:50:28.720 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.50]
2021-07-28 02:50:28.858 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-07-28 02:50:28.858 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2765 ms
2021-07-28 02:50:29.888 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-07-28 02:50:29.921 INFO 1 --- [ main] c.cyb.dockertest.DockertestApplication : Started DockertestApplication in 5.326 seconds (JVM running for 6.375)
2021-07-28 02:54:07.715 INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-07-28 02:54:07.716 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-07-28 02:54:07.718 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
- 6 然后我们可以通过:localhost:8080/docker/hello 来访问对应的springboot接口,就跟在本地一样。