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

2021-03-04 14:55:18 浏览数 (1)

系列文章:

容器 & 服务:开篇,压力与资源

容器 & 服务:Jenkins 本地及 docker 安装部署

容器 & 服务:Jenkins 构建实例

一 概述

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

二 环境依赖

2.1 操作系统

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

代码语言:javascript复制
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

代码语言:javascript复制
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接口:

代码语言:javascript复制
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:

代码语言:javascript复制
<?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.1.7.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.bolingcavalry</groupId>
    <artifactId>dockerdemo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>dockerdemo</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-web</artifactId>
        </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>
            </plugin>
        </plugins>
    </build>
</project>

四 Docker文件配置

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

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

4.1 创建Dockerfile

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

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

代码语言:javascript复制
# Docker image for springboot application
# VERSION 1.0.0
# Author: flamingstar

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

#作者
MAINTAINER flamingstar <xxx@qq.com>

#系统编码
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 命令:

发布于: 刚刚阅读数: 2

版权声明: 本文为 InfoQ 作者【程序员架构进阶】的原创文章。

原文链接:【https://xie.infoq.cn/article/e4254be4dd0a0ff0eccfd3ae9】。文章转载请联系作者。

0 人点赞