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
二翼闹、創(chuàng)建Dockerfile文件
Dockerfile 是一個用來構建鏡像的文本文件,文本內(nèi)容包含了一條條構建鏡像所需的指令和說明允青。
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> 復制添加到容器內(nèi)部路徑 <dest>
ADD <src> <dest>
<src> 必須是想對于源文件夾的一個文件或目錄,也可以是一個遠程的url
<dest> 是目標容器中的絕對路徑法牲。
ENTRYPOINT:不會被 docker run 的命令行參數(shù)指定的指令所覆蓋史汗,而且這些命令行參數(shù)會被當作參數(shù)送給 ENTRYPOINT 指令指定的程序。
3拒垃、創(chuàng)建構建腳本 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
#查詢?nèi)萜?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
執(zhí)行腳本構建
[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命令部署應用