实操:将一个spring boot项目部署到docker容器里运行

实验需要的环境:

腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud

第一步,安装操作系统

首先在腾讯云上安装一个干净的Ubuntu系统 
系统使用Ubuntu 16.04 64位 
这里服务市场虽然有docker,但是版本都太低(1.8.2左右),现在的一些镜像都不支持这些低版本的了,所以自己手动装个 
 
腾讯云推荐使用ssh连接,配置好后就不用输入登入密码了 

秘钥可以在腾讯云上创建,也可以在Xshell上创建 
创建好密钥之后,腾讯云会给你一个私钥下载,这个应该保存好 
然后找到密钥,绑定到主机 
 
然后在xshell里面建立ssh连接,把用户秘钥配置上去,就是腾讯云发给你的私钥 
 
然后成功连接上 

第二步,搭建docker环境

由于网络的原因。。。推荐在DaoCloud里安装docker,国内镜像快

首先安装docker: 
登录到daocloud 
这里可以使用一键脚本,方便快捷 
下载地址,按照它的说明安装 
https://download.daocloud.io/Docker_Mirror/Docker 
 
我使用了这个脚本安装docker 
这里可能会卡在-qq这个地方,这是网络的原因,因为是外链。。ctrl+c,在运行,多试多等待就可以了 
然后运行脚本 
 
安装完成后,提示如果想用非root用户使用docker,应该将其加入docker组里面 
 
把普通用户加入组后,查看docker版本,发现安装的是最新的版本,有点高。都18去了

然后配置镜像加速器(不然pull镜像会很慢) 
也是使用的daocloud 
地址: 
http://www.daocloud.io/mirror#accelerator-doc 

这里当时遇到了一个坑,由于使用的是腾讯云服务市场里的镜像(偷了装docker的懒),然后由于版本太低,它这个脚本是无法正常执行的,它好像需要1.12版本以上吧。。

然后愉快的pull images了,这里run了一个rancher(docker编排用的,图形化界面,方便管理) 
这里提供一个rancher的中文文档,有兴趣研究研究: 
http://rancher.com/docs/rancher/v1.6/zh/ 
 
发现pull的很快 
需要注意docker的版本,不然安装rancher会出问题,这点文档里写的很清楚 

成功运行了rancher,当然,现在什么都还没配置,但是说明docker是安装好了的 

第三步,给docker开启远程访问

参考一份网上的资料 
 
这里我把端口设置为了2375 
 
然后保存文件,重启服务即可

需要注意的是,如果在centOS7上搭建的docker,这个远程连接应该这样配置

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
  • 1

 
查看网络连接,发现2375端口已经被打开 
如果发现还是远程连不上,可以设置一些腾讯云的安全策略和防火墙

至此,在Ubuntu上搭建docker环境完成!

附:

由于我系统是win7的,所以也来试试安装docker,其实docker对win7的支持并不好(都是以虚拟机的形式运行的),推荐win10的系统

关于win7的安装 
首先下载Docker Toolbox

还是在daoyun下载的 
然后运行这个安装上去 
 
这里也有个坑,需要注意virtualbox要5版本以上的,以往安装过ensp,有个4版本的virtualbox,所以当时没选virtualbox,所以会出问题 
 
安装完成! 
如果点击这个会提示找不到bash,在属性里把自己的bash设置上去即可 
 
更改c盘文件的路径 
运行起来,发现它的虚拟机默认位置在c盘 
 
随着pull的image越来越多,c盘空间越来越少,所以我把虚拟机磁盘文件移动到了e盘 
在管理里面,找到虚拟介质管理器,选择move,移动到其他盘上 
这里不要直接文件操作,把disk.vmdk文件移动到其他盘,然后在导入,这样会报错,说uuid冲突的 
 
然后配置镜像源 
在我的文档里找到config.json 
 
 
然后配置images源 
 
成功运行docker!

第四步,在IDEA上安装docker插件

Idea中可以下载docker插件,功能强大 
官方文档 
https://www.jetbrains.com/help/idea/docker.html

在setting里找到这个插件,安装上去 

成功安装插件


点击+,新增一个docker服务器连接

需要注意的是win7的地址输入,是https,并且是2376端口!这点官方文档有写到 
 
要输入相应的ip 
 
win7的配置!!! 
这样子就可以啦 
同理,云服务器的,tcp连接,2375端口 
 
连接成功 

第五步,在IDEA上操作docker

这里我准备把一个小实验放进docker容器跑

先写一个dockerFile 
 
这里注意到add写的是相对路径,所以jar包要在docker目录下,不然build镜像的时候会找不到文件 
为了方便,干脆直接把dockerfile文件放在项目根目录里,然后写绝对路径找到打包好的jar包

 

这里给了一个前置任务,先打包为jar包,再构建image

配置好就可以run了 
 
运行方式选择docker 

构建镜像中,由于是云服务器,这里上传镜像需要一段时间,还是蛮快的 
构建成功 
通过docker ps命令可以看到当前上传上去的镜像已经被运行 

成功访问云服务器! 
 
Spring boot项目已经运行在docker上了!

补充: 
docker插件更新之后更加方便部署了 
选择dockerfile 
 
给run built image打钩,然后绑定上端口,还可以预览命令行 
 
这样配置好了之后,直接点idea的run,完成后云服务器就自动运行这个spring boot应用了

附:

Spring boot项目打包成docker image

没有这款插件也不要紧 
使用一个mvn plugin,可以构建docker image,前提是要安装docker环境

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory> <!-- 解决win7 Connect to localhost:2375的问题的其中一种方式,注意要跟docker-machine env相一致 -->
<dockerHost>https://192.168.99.100:2376</dockerHost>
<dockerCertPath>C:\Users\admin\.docker\machine\machines\default</dockerCertPath> <resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在win7环境下的配置,需要指定ip(因为是虚拟机) 
云服务器类似 

执行maven命令 
 
 
原理差不多,也是使用了一个插件,在package打包成jar包后,使用docker的mvn插件构建一个镜像

从零开始通过idea插件将一个spring boot项目部署到docker容器里运行的更多相关文章

  1. 多个Spring Boot项目部署在一个Tomcat容器无法启动

    转自https://www.cnblogs.com/tomxin7/p/9434085.html 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样 ...

  2. 将spring boot项目部署到tomcat容器中

    一. 我这里用的环境 tomcat: tomcat 8 jdk: jdk 7 spring boot 版本: 1.5 二. 将创建好的spring boot项目做如下修改 2.1. 修改打包形式 在p ...

  3. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  4. 用spring tool suite插件创建spring boot项目时报An internal error occurred during: "Building UI model". com/google/common/

    本文为博主原创,未经允许不得转载 在用spring tool suite创建spring boot项目时,报一下异常: 查阅很多资料之后发现是因为装的spring tool suite的版本与ecli ...

  5. KubeSphere CI/CD+GitLab+Harbor将Spring Boot项目部署至Kubernetes

    上一篇文章分享了如何在 KubeSphere 对公共的代码仓库 GitHub 和镜像仓库 DockerHub 创建流水线,本文将继续使用 KubeSphere,基于 Harbor 和 GitLab 创 ...

  6. Spring Boot项目部署到外部Tomcat服务器

    2017年04月27日 23:33:52 阅读数:7542 前言 Spring Boot项目一般都是内嵌tomcat或者jetty服务器运行,很少用war包部署到外部的服务容器,即使放到linux中, ...

  7. 简化 Spring Boot 项目部署,Flyway 搞起来

    虽然我之前录了一个微人事(https://github.com/lenve/vhr)部署视频(新版微人事部署教程来啦),但是由于这次升级涉及到了 Redis 和 RabbitMQ,所以在本地跑微人事还 ...

  8. 使用jib-maven-plugin将Spring Boot项目发布为Docker镜像

    目录 介绍 使用 总结 介绍 将spring boot(cloud)项目发布到docker环境作为镜像,一般常用的一个是com.spotify的docker-maven-plugin这个maven插件 ...

  9. Spring Boot项目的内嵌容器

    一.关于容器 刚才开始使用spring boot的开发者会有种很直观的感觉,servlet容器“不见了”.之前开发web项目,都是把程序写完后部署到servlet容器(比如Tomcat),但是使用sp ...

随机推荐

  1. EF关联

    public CustomerMap() { this.ToTable("Customer"); this.HasKey(c => c.Id); this.Property( ...

  2. SeaGlass:手工搭建伪基站监控系统

    “伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器.短信发信机等相关设备能够搜取以其为中心.一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手 ...

  3. 【Nginx】Nginx事件模块

    一.事件处理框架概述 事件处理框架所要解决的问题是如何收集.管理.分发事件.事件以网络事件和定时器事件为主,而网络事件中以TCP网络事件为主.事件处理框架需要在不同的操作系统内核中选择一种事件驱动机制 ...

  4. 【OpenGL】Shader实例分析(七)- 雪花飘落效果

    转发请保持地址:http://blog.csdn.net/stalendp/article/details/40624603 研究了一个雪花飘落效果.感觉挺不错的.分享给大家,效果例如以下: 代码例如 ...

  5. HDU 5089 Assignment(rmq+二分 或 单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  6. 微信小程序 自定义组件(modal) 引入组件

    项目结构: 步骤一:创建组件 声明这一组文件为自定义组件 modal.json { "component": true, // 自定义组件声明 "usingCompone ...

  7. JavaSE----API之集合(Collection、List及其子类、Set及其子类、JDK1.5新特性)

    5.集合类 集合类的由来: 对象用于封装特有数据,对象多了须要存储:假设对象的个数不确定.就使用集合容器进行存储. 集合容器由于内部的数据结构不同,有多种详细容器.不断的向上抽取,就形成了集合框架. ...

  8. [转] logback logback.xml常用配置详解(一)<configuration> and <logger>

    转载文章:原文出处:http://aub.iteye.com/blog/1101260 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 根节点< ...

  9. GridView根据一列自动计算(转载)

    <%@ Page Language="C#" %> <%@ Import Namespace="System.Xml" %> <! ...

  10. linux路由表解析

    1 格式 Destination 这个和Genmask一起构成目标网络.路由是路由到目标网络,知道目标网络就可以到达目标路由器,然后在该网络中找到目标机器. Gateway 网关,数据包的下一跳.比如 ...