系列文章:
容器 & 服务:开篇,压力与资源
容器 & 服务: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】。文章转载请联系作者。