Bootstrap

容器 & 服务:一个Java应用的Docker构建实战

系列文章:

一 概述

系列文章的前面几篇,介绍了一些基础概念和Jenkins的docker部署、构建实例,本篇将开始做第一个demo应用,使用idea的docker插件对Java应用执行构建、发布。

二 环境依赖

2.1 操作系统

本地开发环境是macos系统,信息为:

Darwin bogon 18.6.0 Darwin Kernel Version 18.6.0: Thu Apr 25 23:16:27 PDT 2019; root:xnu-4903.261.4~2/RELEASE_X86_64 x86_64

2.2 开发工具

IntelliJ IDEA,我使用的版本是Ultimate Edition 2018.3版本。

2.3 JDK

本地使用的是1.8.0_212

java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

2.4 Docker

示例使用的是本地docker,安装了docker的mac版。版本信息:

三 准备工作

3.1 IDEA安装Docker插件

当前版本的Idea插件安装,是在Intellij Idea->Preference,在Plugins右边,选择Marketplace,在搜索框搜索docker并点击install,等待安装完成,重启idea即可。

3.2 工程代码

为了快速开发,示例选择使用SpringBoot单体应用,示例代码地址:git@github.com:flamingstar/dockerdemo.git

代码核心是一个DockerDemoApplication.java,启动SpringBootApplication并暴露一个index接口:

package com.flamingstar.docker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DockerDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DockerDemoApplication.class, args);
    }

    @RequestMapping("/index")
    public String index(){
        return "Hello! This is your first docker demo";
    }
}

依赖配置文件pom.xml:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.7.RELEASE
        
    
    com.bolingcavalry
    dockerdemo
    1.0.0-SNAPSHOT
    dockerdemo
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

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

四 docker文件配置

如果是通常的本地启动,在Edit Configurations直接配置Spring Boot应用就可以了:

因为本文是要制作Docker镜像,并启动容器运行应用,所以需要创建Dockerfile,并使用docker方式运行。

4.1 创建Dockerfile

再描述一下Dockerfile:Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

我们在工程根目录下创建Dockerfile,内容如下(示例代码git中已经包含):

# Docker image for springboot application
# VERSION 1.0.0
# Author: flamingstar

### 基础镜像,使用alpine操作系统,openjkd版本8u201
FROM openjdk:8u201-jdk-alpine3.9

#作者
MAINTAINER flamingstar 

#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp

#应用构建成功后的jar文件被复制到镜像内,指定名称为dockerdemo.jar
ADD target/dockerdemo-1.0.0-SNAPSHOT.jar dockerdemo.jar

#启动容器时的进程
ENTRYPOINT ["java","-jar","/dockerdemo.jar"]

#暴露8080端口
EXPOSE 8080

4.2 配置docker启动

在Edit Configurations编辑Run/Debug Configurations时,添加一个Docker配置,需要配置的内容如下:

重点有上面标红的前4项内容:

1)指定Dockerfile位置;

2)镜像名称(Image tag),我们设置为dockerdemoapplication;

3)容器名称(dockerdemoapplication),启动时的容器名称

4)设置绑定端口,这里包括两个端口,一个是我们访问这个应用的服务端口,还有一个是docker容器内暴露端口。

五 启动效果

如下图,我们点击上方的demo右边 run 箭头,就可以启动应用。

在左下方标红的是docker窗口,启动后我们可以看到包含的镜像和容器信息。从中可以找到我们当前应用创建的镜像,和启动的容器。

浏览器中,我们输入: http://localhost:18080/index

可以查看到接口返回:

至此,第一个docker应用发布结束。

附录

docker镜像查询,可以使用https://hub.docker.com/,例如在本示例的Dockerfile,我们依赖openjdk,那么使用的镜像在docker hub中搜索方式:

查看Tags:

在下方列表中就可以找到所需的tag信息和对应的docker pull 命令: