【小白入门docker】创建Spring Boot Hello World应用制作Docker镜像并运行
一、背景
目前docker使用越来越广泛,本人对docker也在逐步学习,所以借此抽了一点点时间做个helloworld玩一把,并且分享给各位同学~,不喜勿喷,多谢~。
二、概述
首先创建一个基于springboot的应用,本地验证下是否可以启动,并且访问一下接口是否是ok的;然后写一份dockerfile; 接着打包并且上传到服务器上;接着制作docker镜像、启动docker容器、访问接口等事项。
前提:默认Linux已经安装好docker环境了,本文不包含docker环境的安装过程。
三、正文
(一)、windows环境下相关工作
1、创建一个springboot的项目
1)项目截图
2)、maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.5</version><relativePath/></parent><groupId>com.hello</groupId><artifactId>springboot-helloworld</artifactId><version>0.0.1</version><name>springboot-helloworld</name><description>springboot-helloworld desc</description><properties><java.version>1.8</java.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3)、接口实现
package com.hello.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;@RestController
public class HelloWorldController {@GetMapping("/helloWorld")public String count(){return "helloWorld,今天是"+new Date();}
}
2、写一份Dockerfile
FROM openjdk:8-jdk-slim
LABEL maintainer=ltCOPY target/*.jar /app.jarENTRYPOINT ["java","-jar","/app.jar"]
3、本地运行springboot项目
"C:\Program Files\Java\jdk1.8.0_321\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:39131,suspend=y,server=n -javaagent:D:\work\tools\ideaIC-2024.2.3.win\plugins\java\lib\rt\debugger-agent.jar -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_321\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_321\jre\lib\rt.jar;D:\work\技术研究\java-demo\springboot-helloworld\target\classes;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot-starter-web\2.5.5\spring-boot-starter-web-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot-starter\2.5.5\spring-boot-starter-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot\2.5.5\spring-boot-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot-autoconfigure\2.5.5\spring-boot-autoconfigure-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot-starter-logging\2.5.5\spring-boot-starter-logging-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\ch\qos\logback\logback-classic\1.2.6\logback-classic-1.2.6.jar;F:\tools\maven\s_warehouse\maven\repository\ch\qos\logback\logback-core\1.2.6\logback-core-1.2.6.jar;F:\tools\maven\s_warehouse\maven\repository\org\slf4j\slf4j-api\1.7.32\slf4j-api-1.7.32.jar;F:\tools\maven\s_warehouse\maven\repository\org\apache\logging\log4j\log4j-to-slf4j\2.14.1\log4j-to-slf4j-2.14.1.jar;F:\tools\maven\s_warehouse\maven\repository\org\apache\logging\log4j\log4j-api\2.14.1\log4j-api-2.14.1.jar;F:\tools\maven\s_warehouse\maven\repository\org\slf4j\jul-to-slf4j\1.7.32\jul-to-slf4j-1.7.32.jar;F:\tools\maven\s_warehouse\maven\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-core\5.3.10\spring-core-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-jcl\5.3.10\spring-jcl-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\yaml\snakeyaml\1.28\snakeyaml-1.28.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot-starter-json\2.5.5\spring-boot-starter-json-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\com\fasterxml\jackson\core\jackson-databind\2.12.5\jackson-databind-2.12.5.jar;F:\tools\maven\s_warehouse\maven\repository\com\fasterxml\jackson\core\jackson-annotations\2.12.5\jackson-annotations-2.12.5.jar;F:\tools\maven\s_warehouse\maven\repository\com\fasterxml\jackson\core\jackson-core\2.12.5\jackson-core-2.12.5.jar;F:\tools\maven\s_warehouse\maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.12.5\jackson-datatype-jdk8-2.12.5.jar;F:\tools\maven\s_warehouse\maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.12.5\jackson-datatype-jsr310-2.12.5.jar;F:\tools\maven\s_warehouse\maven\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.12.5\jackson-module-parameter-names-2.12.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\boot\spring-boot-starter-tomcat\2.5.5\spring-boot-starter-tomcat-2.5.5.jar;F:\tools\maven\s_warehouse\maven\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.53\tomcat-embed-core-9.0.53.jar;F:\tools\maven\s_warehouse\maven\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.53\tomcat-embed-el-9.0.53.jar;F:\tools\maven\s_warehouse\maven\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.53\tomcat-embed-websocket-9.0.53.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-web\5.3.10\spring-web-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-beans\5.3.10\spring-beans-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-webmvc\5.3.10\spring-webmvc-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-aop\5.3.10\spring-aop-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-context\5.3.10\spring-context-5.3.10.jar;F:\tools\maven\s_warehouse\maven\repository\org\springframework\spring-expression\5.3.10\spring-expression-5.3.10.jar;D:\work\tools\ideaIC-2024.2.3.win\lib\idea_rt.jar" com.hello.HelloWorldApplication
Connected to the target VM, address: '127.0.0.1:39131', transport: 'socket'. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.5.5)2025-09-29 13:40:41.227 INFO 22508 --- [ main] com.hello.HelloWorldApplication : Starting HelloWorldApplication using Java 1.8.0_321 on twilight with PID 22508 (D:\work\技术研究\java-demo\springboot-helloworld\target\classes started by ricky in D:\work\技术研究\java-demo\springboot-helloworld)
2025-09-29 13:40:41.230 INFO 22508 --- [ main] com.hello.HelloWorldApplication : No active profile set, falling back to default profiles: default
2025-09-29 13:40:42.982 INFO 22508 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8001 (http)
2025-09-29 13:40:42.997 INFO 22508 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-09-29 13:40:42.997 INFO 22508 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.53]
2025-09-29 13:40:43.123 INFO 22508 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-09-29 13:40:43.123 INFO 22508 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1834 ms
2025-09-29 13:40:43.601 INFO 22508 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8001 (http) with context path ''
2025-09-29 13:40:43.610 INFO 22508 --- [ main] com.hello.HelloWorldApplication : Started HelloWorldApplication in 3.053 seconds (JVM running for 4.072)
4、本地访问springboot项目
5、打包springboot项目
(二)、Linux环境下相关工作
1、创建docker目录
/usr/local/ricky/docker
2、上传相关文件
在docker目录创建target,并且将springboot-helloworld-0.0.1.jar上传到该目录中,另外把Dockerfile上传到docker目录中。
3、在docker文件夹下构建项目的镜像
在dokcer目录下面执行如下命令:
docker build -t docker .
执行界面如下:
4、查看产生的镜像
执行命令:
docker images
5、启动docker容器
docker run -d -p 8001:8001 docker
6、查看java进程
ps -ef | grep java
7、查看docker日志
docker logs 03c43b7d44e3856a45410ab0c510b83ee93081eba0b763435c6fa26f868f10df
8、访问docker容器服务
服务器上访问:curl http://127.0.0.1:8001/helloWorld
在windows访问:http://XX.XX.XX.XX:8001/helloWorld
8、停止docker容器服务
docker stop 03c43b7d44e3856a45410ab0c510b83ee93081eba0b763435c6fa26f868f10df