二、应用Docker化-脚本部署应用

1、建立Springboot工程,打包生成jar

image.png

pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.4
         
    
    com.giself.demo
    docker-app
    1.0.0
    docker-app
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter
        
        
         org.springframework.boot
         spring-boot-starter-web
        

        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    



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 将文件从路径 复制添加到容器内部路径


ADD
必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url
是目标容器中的绝对路径。


ENTRYPOINT:不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

3、创建构建脚本 build.sh

image.png
#!/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命令部署应用

你可能感兴趣的:(二、应用Docker化-脚本部署应用)