@[TOC

1. 铺垫

本篇文章着重讲解Docker容器制作的过程,因此这里使用的SpringBoot程序非常简单(直接回显字符串)

1. 1 创建一个SpringBoot项目

在这里插入图片描述

1.2 编写一个及其简洁的后端接口

package com.hyy.docker_demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {

    @RequestMapping("docker_demo")
    public String hello() {
        return "hello docker";
    }
}

1.3 验证是否可运行

启动SpringBoot程序,访问地址:
在这里插入图片描述
发现可以正常回显数据,继续下一步

1.4 程序打包

第一步:清理缓存

点击clean:
在这里插入图片描述

第二步:点击package打包

在这里插入图片描述

第三步:查看是否打包成功

若package后提示build success
在这里插入图片描述
且target目录下出现jar包:
在这里插入图片描述
说明打包成功!

1.4 jar包上传到服务器

我们可以用scp命令,把本地电脑上的文件传输到服务器上,语法格式:

scp 本地路径(可以是文件夹/文件) 服务器用户名@IP:服务器目标地址

演示:
在这里插入图片描述

最后,查看服务器上是否上传成功:
在这里插入图片描述

2. 制作容器

2.1 下载Ubuntu镜像

docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
a3629ac5b9f4: Pull complete 
Digest: sha256:cd1dba651b3080c3686ecf4e3c4220f026b521fb76978881737d24f200828b2b
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

2.2 查看镜像

docker images '*ubuntu*'
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       latest    493218ed0f40   4 weeks ago    78.1MB
ubuntu       <none>    802541663949   5 months ago   78.1MB

小提示:
< none>是悬空的意思,说明之前我有一个版本的ubuntu镜像,现在重新pull了一个更新的版本,原来的TAG就失效了

2.3 用镜像运行一个容器

运行一个ubuntu容器:

root@iZ2ze8ve39i30yl0dhbqneZ:~/docker_stu# docker run --name docker_spring_boot \
> -p 8080:8080 \
> -it \
> ubuntu:latest /bin/bash
root@f0603125971c:/# 

2.4 配置国内镜像源加速

目的是加速后续下载JDK的速度

root@f0603125971c:/#  sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list

2.5 安装运行java程序的JDK

apt update #更新资源
apt install -y openjdk-8-jdk #-y是默认确认提示

2.6 把宿主机保存的jar包拷贝到容器

新开一个shell界面,通过docker cp拷贝数据:

ls -lh
total 21M
drwxr-xr-x 2 root root 4.0K Feb 11 16:31 docker_cp_test
-rw-r--r-- 1 root root  21M Feb 12 13:36 docker_demo-0.0.1-SNAPSHOT.jar
docker ps 
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                         NAMES
f0603125971c   ubuntu:latest   "/bin/bash"              13 minutes ago   Up 13 minutes   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   docker_spring_boot
3e41e3f7d876   nginx:latest    "/docker-entrypoint.…"   21 hours ago     Up 21 hours     0.0.0.0:80->80/tcp, [::]:80->80/tcp           nginx_cp_demo
docker cp ./docker_demo-0.0.1-SNAPSHOT.jar docker_spring_boot:/app.jar
Successfully copied 21MB to docker_spring_boot:/app.jar

2.7 进入容器,启动jar程序

docker exec -it docker_spring_boot /bin/bash
root@f0603125971c:/# ls -lh | grep app
-rw-r--r--   1 root root  21M Feb 12 13:36 app.jar
update-alternatives --config java # 如果有多个jdk版本,需要配置和jar包一致的jdk版本
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      auto mode
  1            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 0
java -jar app.jar # 运行springboot程序

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.5.5)

2026-02-12T14:09:12.610+08:00  INFO 5709 --- [docker_demo] [           main] c.hyy.docker_demo.DockerDemoApplication  : Starting DockerDemoApplication v0.0.1-SNAPSHOT using Java 17.0.18 with PID 5709 (/app.jar started by root in /)
2026-02-12T14:09:12.620+08:00  INFO 5709 --- [docker_demo] [           main] c.hyy.docker_demo.DockerDemoApplication  : No active profile set, falling back to 1 default profile: "default"
2026-02-12T14:09:14.648+08:00  INFO 5709 --- [docker_demo] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2026-02-12T14:09:14.675+08:00  INFO 5709 --- [docker_demo] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2026-02-12T14:09:14.676+08:00  INFO 5709 --- [docker_demo] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.44]
2026-02-12T14:09:14.746+08:00  INFO 5709 --- [docker_demo] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2026-02-12T14:09:14.749+08:00  INFO 5709 --- [docker_demo] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1952 ms
2026-02-12T14:09:15.531+08:00  INFO 5709 --- [docker_demo] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2026-02-12T14:09:15.563+08:00  INFO 5709 --- [docker_demo] [           main] c.hyy.docker_demo.DockerDemoApplication  : Started DockerDemoApplication in 4.006 seconds (process running for 5.053)

2.8 查看运行结果

在这里插入图片描述

小提示:
注意开放服务器防火墙指定的端口号,否则访问会失败

3. 关闭容器&释放资源

exit # ctrl+c退出spring程序后,exit退出容器
docker ps #查看当前正在运行的容器
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                         NAMES
f0603125971c   ubuntu:latest   "/bin/bash"              27 minutes ago   Up 27 minutes   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   docker_spring_boot
3e41e3f7d876   nginx:latest    "/docker-entrypoint.…"   21 hours ago     Up 21 hours     0.0.0.0:80->80/tcp, [::]:80->80/tcp           nginx_cp_demo
docker stop docker_spring_boot #停止容器
docker_spring_boot
docker rm docker_spring_boot # 删除容器
docker_spring_boot
docker ps -a | grep docker_spring_boot #查看容器是否删除

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐