OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像

  之前验证了OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果,由于现在普遍都是容器化部署,所以还是验证下Doker镜像打包是否可行,因为最终部署还是会上到K8S,所以这步必须要验证一下。

资源准备

  提前安装好dockerdocker-compose,安装docker-compose是为了简化容器启动方式。菜鸟教程传送门
  首先准备好,要打包镜像的资源。

[root@test documentserver]# pwd
/opt/documentserver
[root@test documentserver]# ll
总用量 822720
-rwxr-xr-x. 1 root root      1220 3月   2 14:10 docker-entrypoint.sh
-rw-r--r--. 1 root root      1366 3月   2 13:34 Dockerfile
drwxr-xr-x. 2 root root        37 3月   1 21:53 DocService
-rw-r--r--. 1 root root       764 3月   1 21:10 documentServer.conf
-rw-r--r--. 1 root root 842447109 2月  24 10:40 documentserver.tar.gz
drwxr-xr-x. 2 root root        37 3月   1 21:53 FileConverter
-rw-r--r--. 1 root root       167 3月   2 13:38 run.sh

  此处说明一下相关文件的功能。

  • docker-entrypoint.sh 容器启动的时候会调用该脚本(基础镜像ubuntu/nginx:1.18-20.04_beta)
  • Dockerfile 用于构建镜像的配置文件
  • DocService 文档服务文件夹,里面放的后台启动脚本
  • documentServer.conf Nginx代理配置文件
  • documentserver.tar.gz 编译结果压缩包,相当于安装程序
  • FileConverter 转换服务文件夹,里面放的后台启动脚本
  • run.sh 主启动脚本,文档服务和转换服务最终会由该脚本负责执行启动

1、run.sh 启动文件

#!/bin/sh# 启动转换服务
cd /opt/documentserver/server/FileConverter
sh ./start.sh
# 启动文档服务
cd /opt/documentserver/server/DocService
sh ./start.sh

2、转换服务相关脚本FileConverter

[root@test documentserver]# cd FileConverter/
[root@test FileConverter]# pwd
/opt/documentserver/FileConverter
[root@test FileConverter]# ll
总用量 8
-rw-r--r--. 1 root root 233 2月  28 21:31 start.sh
-rw-r--r--. 1 root root 215 3月   1 21:53 stop.sh

启动脚本 start.sh

#!/bin/shserver_path=$(dirname $(pwd))LD_LIBRARY_PATH=$PWD/binexport PATH=$PATH:$LD_LIBRARY_PATHexport NODE_ENV=development-linuxexport NODE_CONFIG_DIR="$server_path/Common/config"nohup ./converter > $PWD/out.log 2>&1 &

关闭脚本 stop.sh

#!/bin/shpid_file=pidsps -ef | grep converter | grep -v grep | awk '{print $2}' > $PWD/pidspid_arg=$(awk '{print $1}' $pid_file)for pid in ${pid_arg}
doecho "to kill pid = $pid"kill -9 $pid
done

3、文档服务相关脚本DocService

[root@test documentserver]# cd DocService/
[root@test DocService]# pwd
/opt/documentserver/DocService
[root@test DocService]# ll
总用量 8
-rw-r--r--. 1 root root 172 2月  28 21:32 start.sh
-rw-r--r--. 1 root root 216 3月   1 21:53 stop.sh

启动脚本 start.sh

#!/bin/shserver_path=$(dirname $(pwd))export NODE_ENV=development-linuxexport NODE_CONFIG_DIR="$server_path/Common/config"nohup ./docservice > $PWD/out.log 2>&1 &

关闭脚本 stop.sh

#!/bin/shpid_file=pidsps -ef | grep docservice | grep -v grep | awk '{print $2}' > $PWD/pidspid_arg=$(awk '{print $1}' $pid_file)for pid in ${pid_arg}
doecho "to kill pid = $pid"kill -9 $pid
done

4、docker-entrypoint.sh 容器内启动脚本

  此处具体得看用的什么基础镜像(此次验证用的是ubuntu/nginx:1.18-20.04_beta)。主要是将run.sh执行添加到这个脚本中,如下所示./opt/run.sh是唯一添加的内容,其余的都是原本的内容。这样转换服务和文档服务就都可以跟随容器一起启动了。

#!/bin/sh
# vim:sw=4:ts=4:et./opt/run.shset -eif [ -z "${NGINX_ENTRYPOINT_QUIET_LOGS:-}" ]; thenexec 3>&1
elseexec 3>/dev/null
fiif [ "$1" = "nginx" -o "$1" = "nginx-debug" ]; thenif /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; thenecho >&3 "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration"echo >&3 "$0: Looking for shell scripts in /docker-entrypoint.d/"find "/docker-entrypoint.d/" -follow -type f -print | sort -n | while read -r f; docase "$f" in*.sh)if [ -x "$f" ]; thenecho >&3 "$0: Launching $f";"$f"else# warn on shell scripts without exec bitecho >&3 "$0: Ignoring $f, not executable";fi;;*) echo >&3 "$0: Ignoring $f";;esacdoneecho >&3 "$0: Configuration complete; ready for start up"elseecho >&3 "$0: No files found in /docker-entrypoint.d/, skipping configuration"fi
fiexec "$@"

5、documentServer.conf 代理配置

  此处就是官方提供的默认配置,只不过是把80端口改成了81。

map $http_host $this_host {"" $host;default $http_host;
}
map $http_x_forwarded_proto $the_scheme {default $http_x_forwarded_proto;"" $scheme;
}
map $http_x_forwarded_host $the_host {default $http_x_forwarded_host;"" $this_host;
}
map $http_upgrade $proxy_connection {default upgrade;"" close;
}
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
server {listen 0.0.0.0:81;listen [::]:81 default_server;server_tokens off;rewrite ^\/OfficeWeb(\/apps\/.*)$ /web-apps$1 redirect;location / {proxy_pass http://localhost:8000;proxy_http_version 1.1;}
}

6、Dockerfile 镜像配置文件

  由于基础镜像的原因,该配置文件并不需要配置ENTRYPOINTCMD

FROM ubuntu/nginx:1.18-20.04_beta
MAINTAINER lyanCOPY ./documentserver.tar.gz /opt
COPY ./FileConverter /opt/FileConverter/
COPY ./DocService /opt/DocService/
COPY ./documentServer.conf /opt
COPY ./run.sh /opt
COPY ./docker-entrypoint.sh /optRUN cd /opt && \chmod +x docker-entrypoint.sh && \mv docker-entrypoint.sh / && \chmod +x run.sh && \mv documentServer.conf /etc/nginx/conf.d/ && \tar -zxvf documentserver.tar.gz && \rm documentserver.tar.gz && \cd documentserver && \LD_LIBRARY_PATH=${PWD}/server/FileConverter/bin server/tools/allfontsgen \--input="${PWD}/core-fonts" \--allfonts-web="${PWD}/sdkjs/common/AllFonts.js" \--allfonts="${PWD}/server/FileConverter/bin/AllFonts.js" \--images="${PWD}/sdkjs/common/Images" \--selection="${PWD}/server/FileConverter/bin/font_selection.bin" \--output-web='fonts' \--use-system="true" && \LD_LIBRARY_PATH=${PWD}/server/FileConverter/bin server/tools/allthemesgen \--converter-dir="${PWD}/server/FileConverter/bin" \--src="${PWD}/sdkjs/slide/themes" \--output="${PWD}/sdkjs/common/Images" && \cd /opt/documentserver/server/FileConverter && \mv /opt/FileConverter/* ./ && \chmod +x ./start.sh &&  \cd /opt/documentserver/server/DocService && \mv /opt/DocService/* ./ && \chmod +x ./start.sh

7、documentserver.tar.gz 自行编辑结果

  可以参考OnlyOffice验证(一)DocumentServer编译验证,自行编译,随后将编译结果打成压缩包就可以了。

构建镜像并运行

  Dockerfile同级目录下执行docker build -t ds:v1 .命令,构建名为ds版本为v1的镜像

[root@test documentserver]# ll
总用量 822720
-rwxr-xr-x. 1 root root      1220 3月   2 14:10 docker-entrypoint.sh
-rw-r--r--. 1 root root      1366 3月   2 13:34 Dockerfile
drwxr-xr-x. 2 root root        37 3月   1 21:53 DocService
-rw-r--r--. 1 root root       764 3月   1 21:10 documentServer.conf
-rw-r--r--. 1 root root 842447109 2月  24 10:40 documentserver.tar.gz
drwxr-xr-x. 2 root root        37 3月   1 21:53 FileConverter
-rw-r--r--. 1 root root       167 3月   2 13:38 run.sh
[root@test documentserver]# docker build -t ds:v1 .

  构建成功后执行docker images命令后,会在结果里看到下图框住镜像信息:

  接下来用这个镜像启动一个容器。因为我的配置并没有去覆盖Nginx默认的80端口,而是另起一个配置监听81端口,所以此处会映射两个端口:

[root@test documentserver]# docker run --name ds -p 9001:80 -p 9002:81 -d ds:v1

  启动容器后可通过执行docker ps -all查看该容器是否在正常运行

访问容器Nginx验证是否正常启动

  此处宿主机的IP为192.168.95.131,映射端口为9001。此处访问Nginx欢迎页http://192.168.95.131:9001/验证一下:

访问容器DocumentServer验证是否正常启动

  此处宿主机的IP为192.168.95.131,映射端口为9002。此处访问欢迎页http://192.168.95.131:9002/welcome/验证一下:

使用Docker-compose启动镜像

  有kubesphere的可以忽略此处,镜像推到私有镜像仓库随便拉着玩就成了。这里先把之前启动的容器删了。

[root@test documentserver]# docker ps -all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
1d80dd2ea6bf        ds:v1               "/docker-entrypoint.…"   17 minutes ago      Up 17 minutes       0.0.0.0:9001->80/tcp, 0.0.0.0:9002->81/tcp   ds
[root@test documentserver]# docker stop 1d80dd2ea6bf
1d80dd2ea6bf
[root@test documentserver]# docker rm 1d80dd2ea6bf
1d80dd2ea6bf

  直接在资源准备的文件里创建一个名为docker-compose.yaml的配置文件,内容配置如下:

version: "2"
services:ds:image: ds:v1container_name: dsports:- "9001:80"- "9002:81"volumes:- "/opt/documentserver/data/:/opt/documentserver/server/App_Data/"restart: always

  主要就是映射端口,容器共享宿主机的目录,服务随docker服务一起启动。

[root@test documentserver]# pwd
/opt/documentserver
[root@test documentserver]# vim docker-compose.yaml
[root@test documentserver]# ll
总用量 822724
-rw-r--r--. 1 root root       311 3月   2 22:08 docker-compose.yaml
-rwxr-xr-x. 1 root root      1220 3月   2 14:10 docker-entrypoint.sh
-rw-r--r--. 1 root root      1366 3月   2 13:34 Dockerfile
drwxr-xr-x. 2 root root        37 3月   1 21:53 DocService
-rw-r--r--. 1 root root       764 3月   1 21:10 documentServer.conf
-rw-r--r--. 1 root root 842447109 2月  24 10:40 documentserver.tar.gz
drwxr-xr-x. 2 root root        37 3月   1 21:53 FileConverter
-rw-r--r--. 1 root root       167 3月   2 13:38 run.sh

  docker-compose.yaml同级目录下执行docker-compose up -d命令,后台启动容器

[root@test documentserver]# pwd
/opt/documentserver
[root@test documentserver]# docker-compose up -d
Creating network "documentserver_default" with the default driver
Creating ds ... done
[root@test documentserver]# docker ps -all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
1b79ca4c4233        ds:v1               "/docker-entrypoint.…"   12 seconds ago      Up 11 seconds       0.0.0.0:9001->80/tcp, 0.0.0.0:9002->81/tcp   ds

  接下来直接调用文档转换接口测试下文档转换是否可用,此处是将word文档转换成一个图片:

{"async": false,"filetype": "docx","key": "000001","outputtype": "png","title": "demo.docx","url": "https://d2nlctn12v279m.cloudfront.net/assets/docs/samples/demo.docx"
}


相关总结

  • 《OnlyOffice验证(一)DocumentServer编译验证》
  • 《OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果》
  • 《OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像》

OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像相关推荐

  1. Docker学习总结(41)——三个技巧,将Docker镜像体积减小90%

    一.前言 在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快.但RUN语句总是会创建一个新层,而且在生成镜像之前还需要使用很多中间文件,在这种情况下,该如 ...

  2. ELK搭建-基于自制docker镜像

    2019独角兽企业重金招聘Python工程师标准>>> 1. 背景 以下来自<开源实时日志分析ELK平台部署> 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开 ...

  3. 如何将编译好的Docker镜像推送至私有Dockerhub仓库?

    1.首先需要在dockerhub新建仓库 Docker Hubhttps://hub.docker.com/repositories新建好之后就不用管它了 2.编译本地镜像 假设你已经有dockerf ...

  4. 三个技巧,将Docker镜像体积减小90%

    在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快. \\ 但RUN语句总是会创建一个新层,而且在生成镜像之前还需要使用很多中间文件,在这种情况下,该如何 ...

  5. OnlyOffice验证(四)MoblieWeb编译

    OnlyOffice验证(四)MoblieWeb编译   按照官方build tool的说明编译会发现.移动端预览没有编译出来,但是社区版确实还有这个功能. web预览 mobile web预览    ...

  6. OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果

    在Centos7上部署OnlyOffice编译结果   此处将尝试将OnlyOffice验证(一)DocumentServer编译验证的结果部署到Centos7上.并且使用其它服务器现有的Rabbit ...

  7. OnlyOffice验证(一)DocumentServer编译验证

    OnlyOffice验证(一)DocumentServer编译验证 资源准备 Ubuntu16.04桌面版   验证用的版本[ubuntu-16机接上传ubuntu.04.7-desktop-amd6 ...

  8. 实战Spring Boot 2.0系列(一) - 使用Gradle构建Docker镜像

    前言 通常我们使用 Dockerfile 来构建项目的 Docker 镜像.但是也有使用 gradle 在编译项目的时候一起把镜像给 构建 并 上传 的需求.本文将会讲解如何使用 gradle 编写并 ...

  9. Docker镜像瘦身

    Docker 是一个用于开发,交付和运行应用程序的开发平台. 它能够将应用程序和基础架构分开,保证开发,测试, 部署的环境完全一致,从而达到快速交付的目的. 但是在实际项目中,会对项目中的模块或者服务 ...

最新文章

  1. ThreadPoolExecutor使用错误导致死锁
  2. MySQL查询中LIMIT的大offset导致性能低下浅析
  3. JSON.NET 简单的使用
  4. Presto日志中出现大量的Triggering GC to avoid Code Cache eviction bugs
  5. java get和post区别_HTTP请求方式GET和POST区别
  6. 解题:2017清华集训 无限之环
  7. gispython定义查询_定义查询方法
  8. 剪切板记录管理工具:Paste Mac
  9. JQueryUI进度条组件学习笔记
  10. Wireshark分析SMTP、POP3协议
  11. 408真题-2022
  12. 考研英语 词根词缀单词71-80
  13. Flink standalone配置(血汗注意事项,哭唧唧)
  14. Linux shell:脚本判断进程是否正在运行
  15. xgen 毛发guide历史被清理解决方法
  16. HTML 导航栏标签切换
  17. Uncaught TypeError: Cannot read properties of undefined (reading ‘push’) ---- vue-router报错
  18. 演讲比赛流程管理系统(C++)
  19. 干法读书心得:第一章 “极度”认真地工作能扭转人生
  20. 二十九、​Fluent瞬态时间步长与迭代步数的讨论

热门文章

  1. Oracle存储中文生僻字:Navicat客户端不乱码而Developer显示乱码
  2. 字典树与双数组字典树
  3. TikTok搬运一个月百万粉丝是如何操作的
  4. android wifi坏了,Android 8.0背锅WiFi掉线,Android P突然变脸
  5. C# ColorDialog:颜色对话框控件
  6. 【萌新向】STC8A8K64S4A12开发学习(三)——数码管动态扫描
  7. el_table expand扩展单元格,自定义扩展样式
  8. 见证取样员试题及答案
  9. android降噪算法,小米科普自研降噪算法:可精准分离人声与环境噪音并实现降噪...
  10. 使用python读取excel中的数据,并绘制折线图