OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像
OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像
之前验证了OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果,由于现在普遍都是容器化部署,所以还是验证下Doker镜像打包是否可行,因为最终部署还是会上到K8S,所以这步必须要验证一下。
资源准备
提前安装好docker
和docker-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 镜像配置文件
由于基础镜像的原因,该配置文件并不需要配置ENTRYPOINT
和CMD
:
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镜像相关推荐
- Docker学习总结(41)——三个技巧,将Docker镜像体积减小90%
一.前言 在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快.但RUN语句总是会创建一个新层,而且在生成镜像之前还需要使用很多中间文件,在这种情况下,该如 ...
- ELK搭建-基于自制docker镜像
2019独角兽企业重金招聘Python工程师标准>>> 1. 背景 以下来自<开源实时日志分析ELK平台部署> 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开 ...
- 如何将编译好的Docker镜像推送至私有Dockerhub仓库?
1.首先需要在dockerhub新建仓库 Docker Hubhttps://hub.docker.com/repositories新建好之后就不用管它了 2.编译本地镜像 假设你已经有dockerf ...
- 三个技巧,将Docker镜像体积减小90%
在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快. \\ 但RUN语句总是会创建一个新层,而且在生成镜像之前还需要使用很多中间文件,在这种情况下,该如何 ...
- OnlyOffice验证(四)MoblieWeb编译
OnlyOffice验证(四)MoblieWeb编译 按照官方build tool的说明编译会发现.移动端预览没有编译出来,但是社区版确实还有这个功能. web预览 mobile web预览 ...
- OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果
在Centos7上部署OnlyOffice编译结果 此处将尝试将OnlyOffice验证(一)DocumentServer编译验证的结果部署到Centos7上.并且使用其它服务器现有的Rabbit ...
- OnlyOffice验证(一)DocumentServer编译验证
OnlyOffice验证(一)DocumentServer编译验证 资源准备 Ubuntu16.04桌面版 验证用的版本[ubuntu-16机接上传ubuntu.04.7-desktop-amd6 ...
- 实战Spring Boot 2.0系列(一) - 使用Gradle构建Docker镜像
前言 通常我们使用 Dockerfile 来构建项目的 Docker 镜像.但是也有使用 gradle 在编译项目的时候一起把镜像给 构建 并 上传 的需求.本文将会讲解如何使用 gradle 编写并 ...
- Docker镜像瘦身
Docker 是一个用于开发,交付和运行应用程序的开发平台. 它能够将应用程序和基础架构分开,保证开发,测试, 部署的环境完全一致,从而达到快速交付的目的. 但是在实际项目中,会对项目中的模块或者服务 ...
最新文章
- ThreadPoolExecutor使用错误导致死锁
- MySQL查询中LIMIT的大offset导致性能低下浅析
- JSON.NET 简单的使用
- Presto日志中出现大量的Triggering GC to avoid Code Cache eviction bugs
- java get和post区别_HTTP请求方式GET和POST区别
- 解题:2017清华集训 无限之环
- gispython定义查询_定义查询方法
- 剪切板记录管理工具:Paste Mac
- JQueryUI进度条组件学习笔记
- Wireshark分析SMTP、POP3协议
- 408真题-2022
- 考研英语 词根词缀单词71-80
- Flink standalone配置(血汗注意事项,哭唧唧)
- Linux shell:脚本判断进程是否正在运行
- xgen 毛发guide历史被清理解决方法
- HTML 导航栏标签切换
- Uncaught TypeError: Cannot read properties of undefined (reading ‘push’) ---- vue-router报错
- 演讲比赛流程管理系统(C++)
- 干法读书心得:第一章 “极度”认真地工作能扭转人生
- 二十九、​Fluent瞬态时间步长与迭代步数的讨论
热门文章
- Oracle存储中文生僻字:Navicat客户端不乱码而Developer显示乱码
- 字典树与双数组字典树
- TikTok搬运一个月百万粉丝是如何操作的
- android wifi坏了,Android 8.0背锅WiFi掉线,Android P突然变脸
- C# ColorDialog:颜色对话框控件
- 【萌新向】STC8A8K64S4A12开发学习(三)——数码管动态扫描
- el_table expand扩展单元格,自定义扩展样式
- 见证取样员试题及答案
- android降噪算法,小米科普自研降噪算法:可精准分离人声与环境噪音并实现降噪...
- 使用python读取excel中的数据,并绘制折线图