文档章节

使用docker,docker-compose发布springboot服务

框架淘金者
 框架淘金者
发布于 04/03 14:43
字数 1161
阅读 118
收藏 3

首先需要安装docker和docker-compose

docker安装不再演示,此处演示如何安装docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

1、创建Dockerfile

Dockerfile是一个文本文件。

  • 登录Linux系统,在根目录创建一个文件夹。
[root@rainbow /]# mkdir web
[root@rainbow /]# cd web/
[root@rainbow web]# 
  • 创建Dockerfile
[root@rainbow web]# vi Dockerfile
  • Dockerfile文件内容如下:
FROM java:8
ADD rainbow-api-user-0.0.1-SNAPSHOT.jar rainbow-api-user.jar
RUN bash -c 'touch /rainbow-api-user.jar'
EXPOSE 8085
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/rainbow-api-user.jar"]
  • 保存退出。
  • 关于Dockerfile文件命令请查看相关文档

2、打包、上传spring boot项目的jar文件

  • 打包
    点击如下图:

image.png

  • 然后输入命令:

image.png

  • 说明:关于数据库连接的配置
  • 由于我的mongodb数据库是安装在Linux中的,项目部署后,是去访问Linux中的mongodb,虽然docker也是安装在Linux上的,但是数据库连接不能配置为127.0.0.1,因为127.0.0.1是指向docker容器自己。因为Linux与物理机共用IP,所以查看一下宿主机的IP是多少,那就把数据库配置连接中的IP写成多少,如我的宿主机IP是192.168.31.88,那配置如下:

image.png

  • 如果配置为127.0.0.1,那从物理机可以访问到Linux中的mongodb,但是如果spring boot部署到docker容器中,就无法访问了,因为127.0.0.1指向的是容器本身。这点我也是踩了个坑。

  • 待项目打包完成后,在项目的target路径下,会有两个jar包,我们需要如下的:

image.png

  • 上传项目,使用sftp 工具,将jar文件上传到Linux服务器。
    我们在刚刚创建的web目录下,再创建一个webapp文件夹,并把Dockerfile文件移动到webapp文件夹下:
[root@rainbow web]# mkdir webapp
[root@rainbow web]# mv Dockerfile webapp/

将jar文件上传到webapp目录下。此时,webpp下有如下两个文件:

image.png

现在,我们可以使用docker来构建项目了。由于我们本次的目的是使用docker-compose构建,所以只写出构建命令
在webapp路径下执行:

docker build -t spring .
  • 注意:命令最后的那个点,不能少,表示的是当前路径,因为Dockerfile在当前路径下。spring是构建的镜像名,可以自己取。

3、使用docker-compose构建

首先,新建一个docker-compose.yml文件。由于这是个yaml文件,所以格式、缩进很重要。为了不出错,所以在spring boot项目的resources目录下新建一个docker-compose.yml文件,配置好相关项之后,再上传到服务器。内容如下:

spring:
  build: ./webapp
  ports:
   - "80:8085"
  • 这个脚本表示,从当前路径的webapp目录中创建镜像,并将镜像命名为:web,然后使用宿主的80端口映射容器的8085端口。当然,webapp中存放有项目的jar和Dockerfile脚本。

  • 说明:容器的8085端口,因为我自己的项目是跑在8085端口上的,所以要将容器的8085端口映射出来,才能访问。

  • 将docker-compose.yml文件上传到服务器的web目录下:

  • 此时,web的目录结构如下:

image.png

  • 最后,我们就可以使用docker-compose up -d 命令来构建运行了。-d表示在后台运行。注意,要在web路径下执行。

  • 构建成功之后,会与如下的提示:

[root@rainbow web]# docker-compose up -d
Building spring
Step 1 : FROM java:8
 ---> d23bdf5b1b1b
Step 2 : ADD rainbow-api-user-0.0.1-SNAPSHOT.jar rainbow-api-user.jar
 ---> e2d71b21b18d
Removing intermediate container a67714060589
Step 3 : RUN bash -c 'touch /rainbow-api-user.jar'
 ---> Running in 80373f7f206f
 ---> 00e9ab13963d
Removing intermediate container 80373f7f206f
Step 4 : EXPOSE 8085
 ---> Running in a161e595c79c
 ---> b77fe6b6f8e3
Removing intermediate container a161e595c79c
Step 5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /rainbow-api-user.jar
 ---> Running in e25617bae6a2
 ---> a5a04f6f82a1
Removing intermediate container e25617bae6a2
Successfully built a5a04f6f82a1
WARNING: Image for service spring was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating web_spring_1 ... 
Creating web_spring_1 ... done
[root@rainbow web]# 
  • 到此,容器已经构建运行完成。spring boot项目已经完成发布了。

  • 查看运行的容器

docker-compose ps
  • 可以看到,我们的容器已经正在运行了。
[root@rainbow web]# docker-compose ps
    Name                  Command               State          Ports         
web_spring_1   java -Djava.security.egd=f ...   Up      0.0.0.0:80->8085/tcp 
[root@rainbow web]# 
  • 查看容器的日志信息:
    docker-compose logs -f [容器名]
docker-compose logs -f spring

image.png

  • 停止容器
docker-compose stop spring
  • 启动容器
docker-compose start spring
  • 访问spring boot项目。现在,可以访问容器了。spring boot项目的端口号是8085,我们把容器的8085端口映射到了宿主机的80端口,所以可以直接使用80端口访问项目。

© 著作权归作者所有

框架淘金者
粉丝 2
博文 29
码字总数 21067
作品 0
哈尔滨
私信 提问
【工作效率】使用docker搭建gitlab以及ci平台,完整版本(使用springboot项目演示)

整体步骤概括 准备两台虚拟机,最小安装,配置ip能ping通外网即可,安装docker 一台虚拟机跑gitlab,一台跑gitlab runner和springboot项目 将springboot项目打成systemctl系统服务 编写gitla...

funbean
2018/09/20
0
0
使用Docker compose发布SpringBoot项目

我们使用Docker的时候,定义Dockerfile文件,然后使用、等命令操作容器,对Docker不熟悉的可以前往查看中文文档:Docker文档。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般...

阿靖哦
07/15
0
0
Docker | 第七章:Docker-Compose服务编排介绍及使用

前言 前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件。大多都是一个镜像启动。当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止...

oKong
2018/08/12
670
0
docker - 部署一个复杂的springboot服务

在文章 docker容器网络 - 同一个host下的容器间通信 中,我们已经了解怎么在同一个host中容器间互相通信,本文将会利用学会的知识,部署一个“复杂”的springboot应用。该应用实现一个计数服...

细肉云吞
2018/12/26
246
0
docker(三):使用maven 插件构建docker镜像

---layout: blogistop: truetitle: "使用maven 插件构建docker镜像"date: 2018-09-11category: dockertags: docker --- 介绍 作为一个java后端开发人员,docker如何与Maven 工程相结合是我们......

开心的哈士奇
2018/10/17
181
0

没有更多内容

加载失败,请刷新页面

加载更多

WOW.js 使用教程 页面动画

使用教程 wow.js依赖于animate.css,首先需要在 head内引入animate.css或者animate.min.css。 <link rel="stylesheet" href="css/animate.css"> 引入wow.js或者wow.min.js,然后js文件里再写......

东东笔记
29分钟前
5
0
JavaMail实现简单邮件开发——163邮箱

1、打开 P0P3/SMTP/IMAP 2、开发工具类 CodeUtils.java package com.demo.mymail.utils;import java.util.UUID;public class CodeUtils { public static String generateUn......

开源中国首席碉堡了
29分钟前
5
0
Windows上安装Docker

Windows Docker 安装 win7、win8 系统 win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/dock...

城市之雾
34分钟前
5
0
jdk 设置setConnectionTimeout和SetReadTimeout的意义(详细)

先看例子吧 客户端: package top.quartz.util;/** * description: //connect timeout 是建立连接的超时时间; * //read timeout,是传递数据的超时时间。 * ...

hexiaoming123
35分钟前
19
0
Bootstrap Table含有按钮时表格不对齐

使用Bootstrap Table的时候,在含有按钮的情况,有时候表格的线垂直方向上不对齐 解决方法: (1)调整表格的高度小些或者大些(至于为什么,并不清楚,调整高度后就对齐了) (2)加setTime...

tianyawhl
41分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部