1、建立Springboot工程,打包生成jar
pom.xml
<?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.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.giself.demo</groupId>
<artifactId>docker-app</artifactId>
<version>1.0.0</version>
<name>docker-app</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
SampleController.java
@RestController
@RequestMapping(value = "/api/v1/sample/")
public class SampleController {
@GetMapping("test")
public String test() {
return "hello docker app test";
}
}
打包生成 docker-app-1.0.0.jar
二、创建Dockerfile文件
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
FROM java:8
# 作者
LABEL maintaniner="giself"
# 将jar包添加到容器中并更名为app.jar
ADD docker-app-1.0.0.jar app.jar
# 运行jar包
ENTRYPOINT ["java","-Xms256m","-Xmx1024m","-jar","/app.jar"]
FROM:定制的镜像都是基于 FROM 的镜像,这里的 java:8 就是定制需要的基础镜像, 本地没有基础镜像时,将自动从远程镜像库下载
ADD: 添加文件到容器,ADD 将文件从路径 <src> 复制添加到容器内部路径 <dest>
ADD <src> <dest>
<src> 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url
<dest> 是目标容器中的绝对路径。
ENTRYPOINT:不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
3、创建构建脚本 build.sh
#!/bin/sh
cd /data/app/docker-sample
proj_name=giself
app_name=docker-app
version="1.0.0"
port=8081
image_name="$proj_name/$app_name"
container_id=`docker ps -aq --filter ancestor=$image_name:$version`
echo "镜像 $image_name 容器id= $container_id"
if [ ! $container_id ]; then
echo "容器不存在,无需删除"
else
#停止容器
docker stop $container_id
docker rm $container_id
echo "删除容器 $container_id"
fi
#查询镜像
image_id=`docker images -q $image_name`
echo "镜像 $image_name 镜像id= $image_id"
if [ ! $image_id ]; then
echo "镜像不存在,无需删除"
else
docker rmi $image_id
echo "删除镜像 $image_id"
fi
#构建镜像
echo "构建镜像..."
docker build -t $image_name:$version .
#启动容器
echo "启动容器..."
docker run -d -p $port:$port $image_name:$version
#查询容器
container_id=`docker ps -aq --filter ancestor=$image_name:$version`
echo "启动镜像 $image_name 容器id= $container_id"
#查看日志
#docker logs --tail="500" $container_id
4、上传文件到服务器
[root@WEB001 docker-sample]# ll
total 16676
-rw-r--r-- 1 root root 1021 Apr 2 17:51 build.sh
-rw-r--r-- 1 root root 17065044 Apr 2 16:39 docker-app-1.0.0.jar
-rw-r--r-- 1 root root 245 Apr 2 16:44 Dockerfile
执行脚本构建
[root@WEB001 docker-sample]# sh ./build.sh
镜像 giself/docker-app 容器id=
容器不存在,无需删除
镜像 giself/docker-app 镜像id=
镜像不存在,无需删除
构建镜像...
Sending build context to Docker daemon 17.07MB
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : LABEL maintaniner="giself"
---> Running in 1d00b47c323e
Removing intermediate container 1d00b47c323e
---> dd262d6d94f7
Step 3/5 : ADD docker-app-1.0.0.jar app.jar
---> 91569bd677f0
Step 4/5 : ENTRYPOINT ["java","-Xms256m","-Xmx1024m","-jar","/app.jar"]
---> Running in 4642739cfafc
Removing intermediate container 4642739cfafc
---> 7383f014843c
Step 5/5 : CMD ["--spring.profiles.active=prod"]
---> Running in fc456ad15041
Removing intermediate container fc456ad15041
---> b5a1dd234d77
Successfully built b5a1dd234d77
Successfully tagged giself/docker-app:1.0.0
启动容器...
031b7054e9d986f3094d43f0c0da474f0501a736fdecfe6a6f35631b49ac53ac
启动镜像 giself/docker-app 容器id= 031b7054e9d9
查看镜像
[root@WEB001 docker-sample]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
giself/docker-app 1.0.0 b5a1dd234d77 About a minute ago 660MB
java 8 d23bdf5b1b1b 4 years ago 643MB
查看容器
[root@WEB001 docker-sample]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
031b7054e9d9 giself/docker-app:1.0.0 "java -Xms256m -Xmx1…" 2 minutes ago Up 2 minutes 0.0.0.0:8081->8081/tcp awesome_ride
到此,应用docker部署完成,用api测试下吧
下一篇,使用docker-compose命令部署应用