文档章节

容器化你的 Spring Boot 工程——Docker

杨彬Lennon
 杨彬Lennon
发布于 07/24 16:10
字数 634
阅读 2982
收藏 50

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

环境声明:

Gradle + Docker + Spring Boot 2.1.5.RELEASE

目的

    利用docker容器技术简化项目部署

配置Docker服务(Ubuntu)

    卸载旧版本docker(全新安装时,无需执行该步骤)

    sudo apt-get remove docker docker-engine docker.io

    更新系统软件

    sudo apt-get update

    安装依赖包

    sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

    添加官方密钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    如果出现‘sudo: unable to resolve host {你的主机名}’,需要编辑你的hosts文件

    vim /etc/hosts

    127.0.0.1       localhost
    # 添加下边这行
    127.0.0.1       {你的主机名}

    添加仓库

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

    再次更新软件

    sudo apt-get update

    安装

    apt-get install docker-ce

    修改源

    vim /etc/docker/daemon.json
    {
       "registry-mirrors": [
          "https://kv3qfp85.mirror.aliyuncs.com"
        ]
    }

    开放远程 2375 端口访问

  • 修改docker配置文件

    vim /lib/systemd/system/docker.service

    修改如下内容

    #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
 
  • 重载配置和重启
    systemctl daemon-reload

    sudo service docker restart
  • 查看服务

    

开发环境配置

    idea连接远程Docker

        

    构建镜像

  • gradle配置,增加 gradle 的 Docker 插件
parent build.gradle
......

buildscript {

    ......

    dependencies {

        ......

        classpath('gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.19.2')
    }
}

......

subprojects {

    ......
    
    apply plugin: 'application'
    apply plugin: 'com.palantir.docker'

    ......

    jar {
        enabled = true
    }
    bootJar {
        classifier = 'boot'
    }
}
  • 编写Dockerfile
    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD build/libs/*-boot.jar app.jar
    RUN sh -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  • 构建可运行jar包,打好的包在build-libs目录内*-boot.jar

        

        为了方便查看(当然不这样做也是可以的),假设我的项目是多模块架构,项目名为 demo,现在为我的子模块model1构建和部署镜像

        

        

        最下边Command preview也就是原生的Docker构建镜像的命令:

    docker build -t demo/model1:v1 . && docker run -p 8061:8061 --name demo-model1-container demo/model1:v1 

run it (莫慌,骚微一等)

    

    Deploy log:

Deploying 'demo-model1-container Dockerfile: model1/Dockerfile'...
Building image...
Step 1/6 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/6 : VOLUME /tmp
 ---> Using cache
 ---> 0ccc6c4dcc3f
Step 3/6 : ADD build/libs/*-boot.jar app.jar
 ---> Using cache
 ---> 999503a5bf26
Step 4/6 : RUN sh -c 'touch /app.jar'
 ---> Using cache
 ---> d99dd527cb5b
Step 5/6 : ENV JAVA_OPTS=""
 ---> Using cache
 ---> 468e80ce7f62
Step 6/6 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
 ---> Using cache
 ---> d8d32a964e71
Successfully built d8d32a964e71

Successfully tagged demo/model1:v1

Creating container...
Container Id: 0f91b3f38e771cb1288fb7b01451aeeef917d83f4f2fbe803a65a091684a7430
Container name: 'demo-model1-container'
Attaching to container 'demo-model1-container'...
Starting container 'demo-model1-container'
Failed to deploy 'demo-model1-container Dockerfile: data-collect-server/Dockerfile': com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"driver failed programming external connectivity on endpoint demo-model1-container (10fcfb5d05feffb40b75715b531c7504a8ee7262c2af43b642d2202e9e3f4b31): Bind for 0.0.0.0:8061 failed: port is already allocated"}

    

启动成功,访问测试

    

    

示例项目:gradle-docker

© 著作权归作者所有

杨彬Lennon
粉丝 12
博文 11
码字总数 18504
作品 0
昌平
程序员
私信 提问
加载中

评论(12)

空白的纸飞机
空白的纸飞机
Hello~关注了您分享的技术文章,很棒!我是腾讯云云+社区的小编,我们诚挚邀请您加入云+社区,与我们众多开发者一起交流分享技术内容。这个是我们云+社区【腾讯云自媒体分享计划】入驻流程和权益介绍的地址:https://cloud.tencent.com/developer/support-plan。了解更多详情请联系我~微信:18374981632,我们对您的加入充满期待。
loyal
loyal
这样的文章太多,根本上不了生产...
杨彬Lennon
杨彬Lennon 博主
看公司的规定吧
扫地农
扫地农
这就完事了 ? mysql 呢 ? redis 呢 ? mq呢 ?
杨彬Lennon
杨彬Lennon 博主
哈哈,就是做个简单的,其他的东西根据需求加吧
Baby_Moon
Baby_Moon
还要自己写dockerfile?推荐用jib
杨彬Lennon
杨彬Lennon 博主
受教,谢谢老哥
javenwang
javenwang
jib才是打包的正确姿势
idoz
idoz
你这样打出来的image很大吧!
杨彬Lennon
杨彬Lennon 博主
拉的源可能不是最小的吧,不过也大不了多少。老师有何指教吗
hellozjf
hellozjf
优秀,有空试试
欢乐斗楼主
欢乐斗楼主
学习了
spring-boot项目的docker集成化部署(二)--springboot的mysql项目

spring-boot项目的docker集成化部署(二)--springboot的mysql项目 [toc] 补充使用maven构建操作流程 1、配置基本的环境 全局工具配置—配置Java、maven、git基本工具(注意:按照自己的路径...

weir_will
03/25
0
0
Spring boot在Docker中以JPA方式连接Mysql

背景 最近在了解Docker的使用,发现docker在集群部署方面和运维方面有比较大的优势,通过统一的依赖关系,以镜像的方式,将已经打好包的镜像文件,部署到各个节点。如果不用考虑集群的同学,...

亚林瓜子
2018/11/09
573
1
Spring Boot 应用监控:Actuator与 Admin

第 III 部分Spring Boot 系统监控、测试与运维 Spring Boot 应用监控:Actuator与 Admin 《Spring Boot 实战开发》(陈光剑) —— 基于 Gradle + Kotlin的企业级应用开发最佳实践 在企业级应用...

程序员诗人
2018/04/17
0
0
快速使用 Docker 部署 Spring Boot 项目

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/GitChat/article/details/96216242 如今 Docker 的使用已经非常普遍,...

GitChat技术杂谈
07/17
0
0
使用Kubernetes和Docker将Spring Boot与MongoDB作为容器部署

对于本教程,您将拥有一个Docker化Spring-Boot实例程序,该应用程序与MongoDB通信以获取GET/POST API请求,并部署在Kubernetes集群中。 前提条件 Minikube Kubectl Docker Maven Docker是一个...

Docker
01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

采购单品汇总_华南.xlsx

import pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mp1mp1.rcParams["font.family"] = "STFangsong"# 加载《销售》表数据df1 = pd.read_excel(r"C:\Us......

龙玉滕
今天
5
0
OSChina 周五乱弹 —— 一次四千 要4次还能多给一千

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享金志文的单曲《远走高飞》: 版权又回来了现在听歌得好几个软件 《远走高飞》- 金志文 手机党少年们...

小小编辑
今天
7
0
Spring Cloud Alibaba 实战(十) - Spring Cloud GateWay

> 本文主要内容是:为什么要使用网关,整合Gateway,Gateway核心学习:Route,Predicate,Filter,最后使用Gateway聚合微服务请求 先总结至此的架构 1 网关的价值 不使用网关行嘛? 各个请求直接打在...

JavaEdge
今天
4
0
【CKB.DEV 茶话会】第二期:聊聊 CKB 钱包和 Nervos DAO 全流程

CKB.DEV 茶话会第二期:聊聊 CKB 钱包和 Nervos DAO 全流程 为了鼓励更多优秀的开发者和研究人员参与到 CKB 的开发和生态建设中去,我们希望组织一系列 CKB Developer Seminar(CKB.DEV 茶话...

NervosCommunity
今天
4
0
聊聊rocketmq的HAClient

序 本文主要研究一下rocketmq的HAClient HAClient rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java class HAClient extends Serv......

go4it
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部