IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker Compose 编排Nginx+Vue+Springboot项目实例 -> 正文阅读

[系统运维]Docker Compose 编排Nginx+Vue+Springboot项目实例

Docker Compose

首先分别部署前后端项目,确定没问题之后使用compose统一管理

Vue项目部署到nginx使用docker镜像

打包前端项目

npm run build ? #我是用的vue2版本,使用此命令打包,生成到dist文件夹下

?

上传并编写配置文件

接下来要把这个包上传到服务器,我用的是FileZilla,目录结构如下图所示

?

?

路径是/usr/local/nginx/vue,这里放创建nginx镜像所需要的文件,dist就是打包后的文件夹,Dockerfile是创建dock儿镜像时用到的文件,default.conf是nginx的配置文件

然后是Dockerfile文件内容

FROM nginx ? ? ? ? ? ? ? #原始镜像肯定是用nginx官方,不加版本就是取最新
?
COPY dist/ /usr/share/nginx/html/ ? ? #将dist目录下文件放到对应nginx的html目录下,这里需要注意一下路径和default.conf文件的资源路径要匹配,不然会出现500错误
COPY default.conf /etc/nginx/conf.d/default.conf ? #这个就是放配置文件,注意是default.conf而不是nginx.conf,这两个是不一样的,具体请学习nginx
?
CMD ["nginx", "-g", "daemon off;"] ? #添加守护进程,让docker启动后不会立即停止,其实不加也行,没影响

接下来default.conf

 ? ?server {
 ? ? ? ?listen ? ? ? 80;
 ? ? ? ?server_name  localhost;
?
 ? ? ? ?#charset koi8-r;
?
 ? ? ? ?#access_log  logs/host.access.log  main;
?
 ? ? ? ?#静态资源目录
 ? ? ? ?root /usr/share/nginx/html;
 ? ? ? ?index index.html index.htm;
?
 ? ? ? ?location / {
 ? ? ? ? ? ? root ? /usr/share/nginx/html;
 ? ? ? ? ? ? index ?index.html index.htm;
 ? ? ? ? ? ? try_files ?$uri  $uri/ /index.html;
 ? ? ?  }
 ? ? ? ?#后端服务配置
 ? ? ? ?location /api {
 ? ? ? ? ? ? ? ?# proxy_redirect off;
 ? ? ? ? ? ? ? ?rewrite ^/api/(.*)$ /$1 break; # 去除本地接口/api前缀, 否则会出现404
 ? ? ? ? ? ? ? ?proxy_set_header Host $host;
 ? ? ? ? ? ? ? ?proxy_set_header X-Real-IP $remote_addr;
 ? ? ? ? ? ? ? ?proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
?
 ? ? ? ? ? ? ? ?proxy_pass http://java:8081; ? ?#这里ip一定要和compose服务名一样
 ? ? ?  }
 ? ? ? # location / {
 ? ? ? # ? ? root ? html;
 ? ? ? # ? ? index  index.html index.htm;
 ? ? ? # }
?
 ? ? ? ?#error_page  404 ? ? ? ? ? ?  /404.html;
?
 ? ? ? ?# redirect server error pages to the static page /50x.html
 ? ? ? ?#
 ? ? ? ?error_page ? 500 502 503 504  /50x.html;
 ? ? ? ?location = /50x.html {
 ? ? ? ? ? ?root ? /usr/share/nginx/html;
 ? ? ?  }
 ?  }

注意location root的路径和资源存放路径匹配

docker创建镜像及启动容器验证

进入到vue目录下,也就是Dockerfile同级目录,这样不用加-f参数

[root@VM-16-15-centos vue]# docker build -t vue:1.0 . ? ? #创建vue项目对应的镜像-t参数是取别名
?
[root@VM-16-15-centos vue]# docker images ? ? ? ? ? #查看镜像可以看到第一个就是创建成功的
REPOSITORY ? TAG ? ? ? IMAGE ID ? ? ? CREATED ? ? ? ? ? ? SIZE
vue ? ? ? ? ?1.0 ? ? ? a9c4ed23861b ? About an hour ago ? 147MB
mycentos ? ? 0.1 ? ? ? e0b12094946f ? 2 weeks ago ? ? ? ? 580MB
nginx ? ? ?  latest ?  605c77e624dd ? 3 months ago ? ? ?  141MB
centos ? ? ? 7 ? ? ? ? eeb6ee3f44bd ? 6 months ago ? ? ?  204MB
centos ? ? ? latest ?  5d0da3dc9764 ? 6 months ago ? ? ?  231MB

[root@VM-16-15-centos vue]# docker run -p 80:80 -d --name vueApp vue:1.0 ? 
#根据vue:1.0镜像创建对应容器并运行
#-p 绑定主机80端口对应容器80端口,前面是主机,后面是容器
#-d 表示容器后台运行
#--name  容器名字为vueApp
?
[root@VM-16-15-centos vue]# docker ps
CONTAINER ID ? IMAGE ? ?  COMMAND ? ? ? ? ? ? ? ?  CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? PORTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NAMES
a00c821e8f7c ? vue:1.0 ? ?"/docker-entrypoint.…" ? About an hour ago ? Up About an hour ? 0.0.0.0:80->80/tcp, :::80->80/tcp ? ? ? vueApp
?
?
#已经可以看到容器运行相关信息了,然后本机访问下
[root@VM-16-15-centos vue]# curl 127.0.0.1
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>webcalculator</title><link href="/css/chunk-73878fe2.f43ab34e.css" rel="prefetch"><link href="/js/about.6fd8e682.js" rel="prefetch"><link href="/js/chunk-73878fe2.e1b38611.js" rel="prefetch"><link href="/css/app.e2390a88.css" rel="preload" as="style"><link href="/css/chunk-vendors.4cb5fce1.css" rel="preload" as="style"><link href="/js/app.5abe6144.js" rel="preload" as="script"><link href="/js/chunk-vendors.53c5cd65.js" rel="preload" as="script"><link href="/css/chunk-vendors.4cb5fce1.css" rel="stylesheet"><link href="/css/app.e2390a88.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but webcalculator doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-vendors.53c5cd65.js"></script><script src="/js/app.5abe6144.js"></script></body></html>[root@VM-16-15-centos vue]# 
#已经可以访问到了,然后在用网页访问试一下,如果访问超时则需要配置安全组
?
#如果容器启动不报错,然后立即停止了docker ps命令查不到,那可能是容器内部的问题,使用下面的命令启动容器,查看资源和配置文件是否有问题,nginx是否正常启动,
[root@VM-16-15-centos vue]# docker run -p 80:80 -it --name vueApp vue:1.0  /bin/bash
?
#如果容器正常启动,但是访问不到,或者500,使用下面的命令进入容器检查资源和配置文件
[root@VM-16-15-centos vue]# docker exec -it vueApp /bin/bash

到这里第一部分已经完成了。

Springboot项目使用docker制作镜像

打包后端项目

maven打包自然不用多说,命令都可以不用

其实idea可以直接写Dockfile然后通过插件制作镜像的,本次不采用此方案

上传并编写配置文件

?

?

和前端相似的结构,只是不需要dist,只需要jar包就行了。

Dockerfile内容如下

FROM java:8 ? ? ?#基础镜像就是jdk环境呗
?
ADD risk-back-0.0.1-SNAPSHOT.jar /risk-back-0.0.1-SNAPSHOT.jar ? #这个是项目的jar包,直接扔根目录了,容器不用纠结太多
?
EXPOSE 8081 ? #这里端口是要和项目声明相同的,最好写上,不写可能会出错
?
ENTRYPOINT ["java", "-jar", "/risk-back-0.0.1-SNAPSHOT.jar"] ?#这个就是命令执行jar包

docker创建镜像及启动容器验证

[root@VM-16-15-centos java]# docker build -t risk:1.0 . ?  #语法无需多言
?
[root@VM-16-15-centos java]# docker images
REPOSITORY ? TAG ? ? ? IMAGE ID ? ? ? CREATED ? ? ? ?  SIZE
risk ? ? ? ? 1.0 ? ? ? 29f49f578632 ? 27 minutes ago ? 671MB
vue ? ? ? ? ?1.0 ? ? ? a9c4ed23861b ? 2 hours ago ? ?  147MB
mycentos ? ? 0.1 ? ? ? e0b12094946f ? 2 weeks ago ? ?  580MB
nginx ? ? ?  latest ?  605c77e624dd ? 3 months ago ? ? 141MB
centos ? ? ? 7 ? ? ? ? eeb6ee3f44bd ? 6 months ago ? ? 204MB
centos ? ? ? latest ?  5d0da3dc9764 ? 6 months ago ? ? 231MB
java ? ? ? ? 8 ? ? ? ? d23bdf5b1b1b ? 5 years ago ? ?  643MB ? ?#这里多了基础镜像,也是docker的特点之一,可以深入了解
?

[root@VM-16-15-centos java]# docker run -p 8081:8081 -d --name risk1 risk:1.0

[root@VM-16-15-centos java]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                       NAMES
503094c920fb   risk:1.0   "java -jar /risk-bac…"   22 minutes ago   Up 22 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   risk1
a00c821e8f7c   vue:1.0    "/docker-entrypoint.…"   2 hours ago      Up 2 hours      0.0.0.0:80->80/tcp, :::80->80/tcp           vueApp

#如果出现问题,可以用下面命令进入容器查看,我的应用是有logs日志的,根目录下就能找到
[root@VM-16-15-centos java]# docker exec -it risk1 /bin/bash

验证

[root@VM-16-15-centos java]# curl 127.0.0.1:8081/test/getList?param=1
{"code":1,"info":"成功","data":"1"}

本机验证没有问题,在进行外网测试

目前为止前后端 单独配置都能成功启动,但是因为这样处理不在一个网段,无法实现前后端交互,而且步骤也还是比较繁琐,所以使用compose进行管理

使用docker-compose部署

安装docker-compose

#这个源可能下载慢,可以百度下其他安装方案
[root@VM-16-15-centos java]# curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#查看版本
[root@VM-16-15-centos java]# docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

因为vue项目我直接部署在nginx,所以前端就不用build镜像了,我们就在后端文件夹下面写docker-compose.yml文件了。其实只要里面路径配好,执行命令时候找到yml文件,放在哪里无所谓的

[root@VM-16-15-centos java]# ll
total 27620
-rw-r--r-- 1 root root      424 Mar 31 18:24 docker-compose.yml
-rw-r--r-- 1 root root      151 Mar 31 17:03 Dockerfile
drwxr-xr-x 2 root root     4096 Mar 31 18:26 logs
-rw-r--r-- 1 root root 28266620 Mar 31 16:53 risk-back-0.0.1-SNAPSHOT.jar

docker-compose.yml文件内容

version: '3'   #docker版本,目前一般是3

services:      #编排的服务
  nginx:       #服务名
    image: nginx:latest     #使用的镜像
    ports:                  #对外端口映射
      - 80:80
    volumes:                #挂载目录前端代码和nginx配置,这样前端更新代码甚至不用重新编排
      - /usr/local/nginx/vue/dist:/usr/share/nginx/html
      - /usr/local/nginx/vue/default.conf:/etc/nginx/conf.d/default.conf
    privileged: true        #这个必须有,解决nginx的文件调用的权限问题
  java:                     #服务名,我这个就叫java,需要在default.conf配置文件中将nginx跳转后端的ip配置成java,前面配置文件里有说
    restart: always        
    build:                  #不使用已有镜像,而是利用dockerfile创建新镜像
      context: ./
      dockerfile: ./Dockerfile
    working_dir: /         #容器内工作目录
    volumes:               #把日志挂载出来,当然其他想要的都能挂载出来
      - /usr/local/java/logs:/logs
    expose:                #暴露端口8081
      - 8081

开始编排

[root@VM-16-15-centos java]# docker-compose up -d

[root@VM-16-15-centos java]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
a3a82f0d3551   nginx:latest   "/docker-entrypoint.…"   20 minutes ago   Up 20 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   java_nginx_1
0067941be40f   java_java      "java -jar /risk-bac…"   20 minutes ago   Up 20 minutes   8081/tcp                            java_java_1

可以看到两个容器成功执行了,测试前后端联通也没问题。这里的name 第一个java是文件夹名,第二个是对应的服务名,默认的起名方式,yml可以配置的

总结

这次是比较简单的前后端联通部署,主要是为了熟悉docker的使用和docker-compose的使用,后面还可以深入研究一下dockerfile和docker-compose.yml的配置方案,比如如果加入mysql镜像,就应该让后端依赖mysql,在实际应用中这些肯定是不够用的,仍然需要努力学习。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 23:07:00  更:2022-04-07 23:07:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:51:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码