准备工作

创建LibreOffice镜像

1. 拉取基础镜像

  1. docker pull centos:centos7.9.2009

2. 创建容器

  1. docker run --name libreoffice -dt -v /iflytek/data/docker/:/iflytek/data/container -v /iflytek/data/docker/libreoffice:/usr/lib64/libreoffice centos:centos7.9.2009

3. 在容器内安装LibreOffice

  1. # 进入容器
  2. docker exec -it libreoffice /bin/bash
  3. # 安装LibreOffice
  4. yum update -y
  5. yum install -y libreoffice
  6. yum groupinstall -y "Fonts"
  7. yum groupinstall -y "Input Methods"
  8. # 验证LibreOffice转换文件
  9. docker exec libreoffice-yum /bin/bash -c 'soffice --headless --invisible --convert-to pdf --outdir /iflytek/data/container /iflytek/data/container/test.docx'

4. 将容器打包成镜像

 docker commit {LibreOffice容器ID} libreoffice:5.3.6.1
 # 或者基于Dockerfile镜像构建
 docker image build -t view-ocr:2.3 .

5. 导出镜像文件

docker save {LibreOffice镜像ID} -o libreoffice5.3.6.1.tar

# 推送到Dockerhub, 第一步需要先打个tag
docker tag view-ocr:2.3 tonnyyi/view-ocr:2.3
docker push tonnyyi/view-ocr

实际局点部署

离线安装docker

1. 下载离线安装包

下载地址

2. 准备docker.service系统配置文件

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

3. 准备安装和卸载脚本

  • 安装脚本 install.sh ```bash

    !/bin/sh

    echo ‘解压tar包…’ tar -xvf $1

echo ‘将docker目录移到/usr/bin目录下…’ cp docker/* /usr/bin/

echo ‘将docker.service 移到/etc/systemd/system/ 目录…’ cp docker.service /etc/systemd/system/

echo ‘添加文件权限…’ chmod +x /etc/systemd/system/docker.service

echo ‘重新加载配置文件…’ systemctl daemon-reload

echo ‘启动docker…’ systemctl start docker

echo ‘设置开机自启…’ systemctl enable docker.service

echo ‘docker安装成功…’ docker -v


- 卸载脚本 `uninstall.sh`
```bash
#!/bin/sh

echo '删除docker.service...'
rm -f /etc/systemd/system/docker.service

echo '删除docker文件...'
rm -rf /usr/bin/docker*

echo '重新加载配置文件'
systemctl daemon-reload

echo '卸载成功...'

4. 安装

  1. 将上面4个文件 docker-{VERSION}.tgz docker.service install.sh uninstall.sh 放在同一文件夹下
  2. 执行安装脚本 sh install.sh docker-{VERSION}.tgz
  3. 脚本执行完后, 执行 docker -v , 如果能显示docker版本则表示安装成功

debain 下安装

  1. 离线安装包 https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/, 依次下载containerd.iodocker-ce-clidocker-ce 三个软件包

    wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/containerd.io_1.2.6-3_amd64.deb
    wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce-cli_19.03.5~3-0~debian-buster_amd64.deb
    wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce_19.03.5~3-0~debian-buster_amd64.deb
    
  2. 安装

    dpkg -i containerd.io_1.2.6-3_amd64.deb
    dpkg -i docker-ce-cli_19.03.5~3-0~debian-buster_amd64.deb
    dpkg -i docker-ce_19.03.5~3-0~debian-buster_amd64.deb
    

    创建LibreOffice容器

    1. 加载镜像文件

    docker load -i image_libreoffice5.3.6.1.tar
    

    2. 创建容器

    docker run --name view-ocr -dt -v /iflytek/data/docker:/iflytek/data/container -p 19091:9091 -p 19092:9092 -p 19093:9093 -p 19094:9094 libreoffice:5.3.6.1
    

    3. 配置应用文件

    将应用包保存到 /iflytek/data/docker , 然后使用 tar -xvf ***.tar.gz 进行解压
    之后按原来的方式修改 applicaiton-prod.properties 文件, 注意: 应用的端口只能配置上面创建容器时配置的 9091/9092/9093/9094 几个端口, 其他的ocr/fastDFS/Mysql/OCR引擎按原来的方式, 正常配置ip端口即可

    3. 进入容器启动服务

    ```bash

    进入docker容器

    docker exec -it view-ocr /bin/bash

确认java环境

java -version

如果报错或者显示openJDK则执行

source /etc/profile

启动应用

cd /iflytek/data/container/vision-agent-web-{VERSION}/bin ./start.sh

查看日志

tail -100f ../logs/vision-agent-{DATE}

cd /iflytek/data/container/view-ocr-server-{VERSION}/bin ./start.sh

查看日志

tail -100f ../logs/view-ocr.log

<a name="XKXN2"></a>
### 4. 验证服务
在浏览器打开 `http://{宿主机IP}:19092/ocr-ui/swagger-ui.html#!/recognise45controller/uploadFileUsingPOST` , **注意: 端口是`19092`, 与创建容器时配置的端口映射有关**, 如果应用配置了9093, 对应的访问端口就是19093, 以此类推.<br />在swagger页面通过**文件上传接口**上传一个文件, userId和dirId随便填


<a name="RqlVv"></a>
# docker常用命令
```bash
# 查看所有容器及其启停状态
docker ps -a

# 启动容器
docker start 容器名称或者容器ID
# 停止容器
docker stop 容器名称或者容器ID

# 进入容器
docker exec -it 容器名称或者容器ID  /bin/bash
# 退出容器, 回到宿主机, 需要在进入容器后执行
exit