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

首先须要安装docker和docker-compose

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

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

一、建立Dockerfile

Dockerfile是一个文本文件。git

  • 登陆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文件命令请查看相关文档

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

  • 打包
    点击以下图:

image.pnggithub

  • 而后输入命令:

image.pngweb

  • 说明:关于数据库链接的配置
  • 因为个人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.pngspring

  • 若是配置为127.0.0.1,那从物理机能够访问到Linux中的mongodb,可是若是spring boot部署到docker容器中,就没法访问了,由于127.0.0.1指向的是容器自己。这点我也是踩了个坑。mongodb

  • 待项目打包完成后,在项目的target路径下,会有两个jar包,咱们须要以下的:docker

image.png数据库

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

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

image.pngapi

如今,咱们可使用docker来构建项目了。因为咱们本次的目的是使用docker-compose构建,因此只写出构建命令
在webapp路径下执行:

docker build -t spring .
  • 注意:命令最后的那个点,不能少,表示的是当前路径,由于Dockerfile在当前路径下。spring是构建的镜像名,能够本身取。

三、使用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端口访问项目。
相关文章
相关标签/搜索