【Docker学习】布署Spring Boot项目到docker中

目标:把Spring Boot项目布署到docker上。

参考文章:

布署流程:

布署流程

1. 首先新建一个Spring Boot项目

1.1 依赖(略):
  • spring-boot-starter-parent
  • spring-boot-starter-web
    除了依赖以外,还需要配置build plugin:这样通过mvn clean package打出来的包,可以找到main class:
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
1.2 SpringBootDockerApplication:
@SpringBootApplication
@RestController
public class SpringBootDockerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDockerApplication.class, args);
    }

    @Value("${custom.version}")
    private String customVersion;

    @GetMapping("custom-version")
    public String getCustomVersion() {
        return customVersion;
    }

    @GetMapping("hello")
    public String helloWorld() {
        return "hello world!";
    }
}
1.3 application.yaml定义:
custom:
  version: ${version}

2. 本地通过maven打包成fat jar

mvn clean package

SpringBootDockerTest-1.0-SNAPSHOT.jar

3. 编写Dockerfile

Dockerfile的目的主要是为了生成镜像(Image),然后才是run它。

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=SpringBootDockerTest-1.0-SNAPSHOT.jar
COPY ${JAR_FILE} SpringBootDockerTest.jar
ENTRYPOINT ["java", "-jar", "-Dcustom.version=v1.0", "SpringBootDockerTest.jar"]

Dockerfile官网参考:https://docs.docker.com/engine/reference/builder/
比如FROM关键字的解释,戳:https://docs.docker.com/engine/reference/builder/#from

当然中文博客也有很多相关的解释,百度之。

  • FROM指定基础镜像,如上述是从基础镜像(openjdk:8-jdk-alpine)开始构建。一般基础镜像都是在https://docs.docker.com/docker-hub/repos/上的。一般Dockerfile都是以FROM开头。如果是基础镜像是空白的,可以使用:FROM scratch
  • ARG构建参数(与ENV想类似,设置环境变量),ARG只供构建image时使用。上述例子,将参数JAR_FILE的值指定为maven build的结果jar包。
  • COPY复制文件,从源文件复制到新的文件,上述例子把SpringBootDockerTest-1.0-SNAPSHOT.jar复制成SpringBootDockerTest.jar
  • ENTERPOINT入口点,有点像CMD指令。在Dockerfile中特地写了-Dcustom.version,用来测试VM options是否真的能传入。这个在docker run的时候一样可以传入。

4. build image

docker build -t spring-boot-docker-test .

语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径

-t :表示 tag,镜像名
build image log

使用docker images查看:

docker images

可以看到image已经存在

5. run image

5.1 run上述build的image:

docker run -p 8080:8080 -t spring-boot-docker-test

日志

验证:

5.2 run的时候加-e参数

把上述Dockerfile中的ENTERPOINT参数去掉-Dcustom.version,重新build,再run:

docker run -e "custom.version=v2.0" -p 8080:8080 -t spring-boot-docker-test

那么访问http://localhost:8080/custom-version返回:v2.0

返回的是v2.0

5.3 docker run有很多参数

参考:https://www.runoob.com/docker/docker-run-command.html
-e username="ritchie": 设置环境变量。
-p 指定端口映射,格式为:主机(宿主)端口:容器端口。比如-p 5000:80:代表把容器里的80给宿主机的5000端口。这样做了映射之后,可以通过5000端口访问该项目的主页。
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d: 后台运行容器,并返回容器ID;

5.4 后台运行

docker run -d -e "custom.version=v2.0" -p 8080:8080 -t spring-boot-docker-test

返回container id: 44bb98004226e06ceb66fdbf9d0937166ccadf4fcf0b427372cf7476ed7c41b0!
通过docker ps可查看
5.5 查看日志

参考:https://www.cnblogs.com/qufanblog/p/6927411.html

docker logs -f -t --since="2017-05-31" --tail=10 exciting_noether

--since: 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f: 查看实时日志。
-t: 查看日志产生的日期。
-tail=10: 查看最后的10条日志。
exciting_noether: 容器名称。通过docker ps查得。

查看日志

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容