docker学习笔记(五)使用Docker部署单体springboot应用

使用Docker部署单体springboot应用

总体步骤分为:

  • 准备需要部署的springboot应用

    这是使用的springboot的应用非常简单,就只有一个简单的计数的接口,并且计数的值也并不会做存储,直接是在内存中存储的,基于springboot2.x的一个简单应用

    pom.xml

    
      <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.1.7.RELEASEversion>
            <relativePath/> 
        parent>
    
    
      <properties>
            <java.version>1.8java.version>
            <docker.image.prefix>docker.springbootdocker.image.prefix>
        properties>
    
    <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <optional>trueoptional>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    
     <build>
            <finalName>docker-springbootfinalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
                
                <plugin>
                    <groupId>com.spotifygroupId>
                    <artifactId>docker-maven-pluginartifactId>
                    <version>1.0.0version>
                    <configuration>
                        
                        <imageName>${docker.image.prefix}/${project.artifactId}imageName>
                        
                        <dockerDirectory>src/main/dockerdockerDirectory>
                        <resources>
                            <resource>
                                <targetPath>/targetPath>
                                <directory>${project.build.directory}directory>
                                <include>${project.build.finalName}.jarinclude>
                            resource>
                        resources>
                    configuration>
                plugin>
                
            plugins>
        build>
    
    

    应用主体接口

    @RestController
    public class DemoController {
    
        @GetMapping("/get")
        public String count(){
    
            return "hello Docker! count is "+ Count.num.getAndAdd(1);
        }
    }
    
    

    Count 类

    public class Count {
    
        public  static AtomicInteger num = new AtomicInteger(0);
    }
    

    Dockerfile编写

    FROM openjdk:8-jdk-alpine
    
    VOLUME /tmp
    ADD docker-springboot.jar docker.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/docker.jar"]
    
  • 准备docker 环境,准备jdk和maven环境

    需要搭建Docker环境,jdk和maven环境,建议在linux上搭建环境,环境搭建是最基础的技能,不会的也可以自行安装虚拟机,问问度娘就可以

  • 打包应用启动,确认应用无问题,确认环境安装无问题后,将应用上传至服务端,

    #登录服务器 安装上传下载插件
    yum -y install lrzsz
    # 在本地将应用打包,上传至服务器
    rz docker-springboot.tag.gz 
    

    解压文件,启动springboot应用

    tar -zxvf docker-springboot.tag.gz 
    
    cd docker-springboot
    # 打包应用
    mvn clean package
    # 启动应用
    java -jar docker-springboot.jar
    

    启动完成后直接在浏览器输入http://192.168.89.129:8080/get

    返回

    hello Docker! count is 0
    

    每次访问该接口时count的值会递增

    证明项目无问题,如果出现接口访问不通的情况时,需要检查防火墙是否启动,可以选择关闭防火墙或者是在防火墙中加入8080端口的对外开放

  • 使用docker的maven插件进行构建

在项目根目录执行命令,可以指定tag,也可以不指定tag

mvn clean package docker:build -DskipTest=true -DdockerImageTags=v1

出现以下日志代表构建成功

[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying /root/docker-springboot/target/docker-springboot.jar -> /root/docker-springboot/target/docker/docker-springboot.jar
[INFO] Copying src/main/docker/Dockerfile -> /root/docker-springboot/target/docker/Dockerfile
[INFO] Building image docker.springboot/docker-springboot
Step 1/4 : FROM openjdk:8-jdk-alpine
Trying to pull repository docker.io/library/openjdk ... 
Pulling from docker.io/library/openjdk
e7c96db7181b: Pull complete 
f910a506b6cb: Pull complete 
c2274a1a0e27: Pull complete 
Digest: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3
Status: Downloaded newer image for docker.io/openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/4 : VOLUME /tmp
 ---> Running in 24a544b029f7
 ---> e6ad57db6780
Removing intermediate container 24a544b029f7
Step 3/4 : ADD docker-springboot.jar docker.jar
 ---> e0963f46bf85
Removing intermediate container b7655ce29994
Step 4/4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /docker.jar
 ---> Running in 40c5b34021d6
 ---> 5a045353be28
Removing intermediate container 40c5b34021d6
Successfully built 5a045353be28
[INFO] Built docker.springboot/docker-springboot
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  03:36 min
[INFO] Finished at: 2019-08-21T15:41:25+08:00
[INFO] ------------------------------------------------------------------------

查看docker镜像

docker images

REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
docker.springboot/docker-springboot   v1              54fe385a0aca        2 minutes ago       123 MB

docker镜像构建成功!!!

  • 运行docker容器

    docker run -d -p 8080:8080  -t 54fe385a0aca
    

    查看dokcer 运行的容器

    docker ps 
    
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    9531dfd453dd        54fe385a0aca        "java -Djava.secur..."   48 seconds ago      Up 47 seconds       0.0.0.0:8080->8080/tcp   epic_wiles
    

    再次从浏览器中访问接口 ,访问成功,使用docker部署springboot已经成功了

    注意事项

    1. 注意Dockerfile的位置与pom.xml的位置一样

    2. 虚拟机的防火墙的设置,可能会导致应用启动并正常运行,但是接口却访问不通

    3. 防火墙的禁用或修改后,建议重启docker. 命令 systemctl restart docker

你可能感兴趣的:(docker学习笔记)