docker 安装openoffice 以及docker的一些学习


原来只知道根据教程帖子简单使用docker安装MySQL、tomcat,搞了这个docker内安装应用半学半上手的操作,花了一周。记录一下

docker根据DockerFile配置构建镜像(可以取不同的名构建多个镜像)
一个镜像可以构建多个不同名的容器,容器就是一个小型服务器,通过映射端口以及和宿主机(服务器)共享目录来达到和宿主机交互。
使用podman操作

最终结果如图:

1.ApacheOpenoffice官网下载openoffice的linux版本安装包

安装包rpm名为:Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN.tar.gz
服务器上 mkdir 新建目录为
/root/openoffice/
将安装包放到/root/openoffice/目录下

2.搭建jdk环境

下载jdk-8u311-linux-x64.rpm
将安装包放到/root/openoffice/目录下

3.确保安装docker的情况下,编写DockerFile

新建DockerFile文件(无后缀)
内容如下,按照自己实际情况的修改

#基础镜像为centos8

FROM centos

#java环境
COPY jdk-8u311-linux-x64.rpm  /tmp/jdk-8u311-linux-x64.rpm

#引入openoffice
ADD Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN.tar.gz   /tmp/Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN

RUN yum install -y /tmp/jdk-8u311-linux-x64.rpm
#解压缩 ADD进来后已经解压了,变成了目录。此处不用解压
#tar -xvf Apache_OpenOffice*.tar.gz
#安装JDK(太慢,改从lib库里add进来了)
#yum install -y java-1.8.0-openjdk.x86_64
#安装wget
#yum -y install wget && \

#安装OpenOffice,会安装到/opt/openoffice4/目录下
RUN yum install -y /tmp/Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN/zh-CN/RPMS/*.rpm
run cd /tmp/Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN/zh-CN/RPMS/desktop-integration/ && ls -r
RUN yum install -y /tmp/Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN/zh-CN/RPMS/desktop-integration/openoffice4.1.11-redhat-menus-4.1.11-9808.noarch.rpm

#必要的库
RUN yum install -y libXext.x86_64
RUN yum install  -y gcc
RUN yum install  -y gcc-c++
RUN yum install  -y freetype-devel
RUN yum install  -y glib2-devel
RUN yum install  -y cairo-devel
RUN yum install  -y libXt.x86_64

# 修改时区
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#安装中文字体,解决中文乱码  
# \ 为换行符,后面不能有空格,相当于为了方便查看与美观的时候换行,这时候下一行也只目前这一行,只有这一行一起执行
RUN yum install -y mkfontscale
RUN yum install -y fontconfig
RUN cd /usr/share/fonts/ && \
chmod -R 755 /usr/share/fonts  && \
mkfontscale && \
mkfontdir

##上面的不知道为什么安装失败。应该是centos8的缘故吧
##从这个贴子找方法,用docker构建的时候一并执行完毕,链接在下面:CentOS8安装中文字体
RUN mkdir /usr/share/fonts/chinese && \
chmod -R 755 /usr/share/fonts/chinese && \
chmod -R 755 /etc/fonts
ADD chinese/msyhbd.ttc /usr/share/fonts/msyhbd.ttc
ADD chinese/msyhl.ttc /usr/share/fonts/msyhl.ttc
ADD chinese/msyh.ttc /usr/share/fonts/msyh.ttc
ADD chinese/simhei.ttf /usr/share/fonts/simhei.ttf
ADD chinese/simsun.ttc /usr/share/fonts/simsun.ttc
## fonts.conf 是字体配置文件也是安装CentOS8安装中文字体贴子修改后,直接提取出来,方便每次构建的时候打包进镜像
ADD fonts.conf /etc/fonts/fonts.conf

#刷新缓存字体生效
RUN fc-cache -fv

#适配 centos 8 中文安装包
RUN yum install -y glibc-langpack-zh && \
yum install -y glibc-common && \
yum install -y langpacks-zh_CN && \
yum install -y langpacks-zh_CN.noarch

RUN echo "export LC_ALL=zh_CN.utf8" >> /etc/profile && source /etc/profile
ENV LANG en_US.utf8
#清除yum缓存
RUN yum clean all

#删除压缩包
RUN rm -Rf /tmp/jdk-8u311-linux-x64.rpm
RUN rm -Rf /tmp/Apache_OpenOffice_4.1.11_Linux_x86-64_install-rpm_zh-CN
#删除解压缩的文件
#rm -Rf zh-CN

VOLUME /tmp

#暴露接口
EXPOSE 8080

#启动服务,占用8080端口

RUN mkdir /home/jar
ADD startjar.sh /home/startjar.sh

RUN chmod 777 /home/startjar.sh

##  &是后台执行home目录下的startjar.sh,控制台日志输出到 > startjar.log
ENTRYPOINT [ "sh","/home/startjar.sh",">","/home/startjar.log","&" ]

链接:CentOS8安装中文字体

chinese目录也是按照上面的教程,把Windows的字体文件放上来,随便找个微软雅黑、宋体的文件

4.startjar.sh文件(可不要)

这个shell脚本是检查固定目录下是否有jar包,并启动它,并记录文件时间戳,有新打包后的jar文件,杀死旧jar进程并启动新进程


#!/bin/bash

route=/home/jar
num=0
date=0

while [ ture ]
do
   let num++
   echo "--------------------------------------------第$num次扫描$route--------------------------------------------"
   for file in `ls $route`
   do
       app_name=$route"/"$file
       echo 尝试获取目录文件:$app_name
       while [ -f $route"/wait" ]
       do
         echo waitting...
         sleep 60
       done

       if [ -f $app_name ] && [ "${app_name##*.}" = "jar" ];
       then
           echo 目录文件:$app_name
           ps -fe|grep $app_name |grep -v grep
           if [ $? -eq 0 ]
           then
               echo "$file正在运行.....不进行启动操作"
           else
               echo "$file没有运行.....正在尝试启动"
               java -jar -Dserver.port=8080 -Dfile.encoding=UTF-8 -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -jar $app_name > /home/log &
               date=`date +%s -r $app_name`
               echo "存储文件时间:$date"
               sleep 30
           fi
           sleep 2

           new_date=`date +%s -r $app_name`

           echo "new_date:$new_date date:$date"
           if [[ "$new_date"0 -gt "$date"0 ]]
           then
               echo "检测到新文件,将杀死进程重新启动"
               pid=`ps -ef | grep $app_name | grep -v "grep" | awk '{print $2}'`
               kill -15 $pid
               echo "killed $pid"
               ps -ef | grep /opt/openoffice4 | grep -v grep | awk '{print $2}' | xargs kill -9
               echo "kill openoffice进程进行中,检测kill结果:"
               ps -fe|grep /opt/openoffice4 |grep -v grep
               if [ $? -eq 0 ]
               then
                   echo "openoffice正在运行,再次执行kill"
                   ps -ef | grep /opt/openoffice4 | grep -v grep | awk '{print $2}' | xargs kill -9
               else
                   echo "没有openoffice进程,kill完成"
               fi
           else
               echo "无新文件,不执行kill"
           fi
       else
           echo "jar文件不存在"
       fi
   done
echo ""
echo ""
sleep 10
done

效果图如下:

5.在学习的过程中使用过的相关命令


--------------------------------------------2021年11月25日指令--------------------------------------------


查看当前应用所占用端口
netstat -nltp | grep 8080
查找端口
lsof -i :8080 
杀死进程
kill -9 3724281

查找名为startjar的进程端口并杀死
ps -ef | grep startjar | grep -v grep | awk '{print $2}' | xargs kill -9


查看jar进程
ps aux|grep jar
ps -ef|grep java
ps -ef| grep file-api.jar


启动file-api.jar包  输出控制台日志到log
设置端口为8080 :-Dserver.port=8080 
设置编码-Dfile.encoding=UTF-8   
好像是防止乱码的:-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider 
nohup java -jar -Dserver.port=8080 -Dfile.encoding=UTF-8 -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -jar file-api.jar >log &



1.构建镜像  podman = pm
pm build -t openoffice -f DockerFile 

查看镜像
podman images

删除多余镜像 + 镜像id
podman rmi ba4af1f9fb16

2.构建镜像之后创建容器,
设置名字:--name openoffice
设置映射目录,顺序是从宿主机的/home/jar目录,映射到容器中的/home/jar目录,两边的目录相当于一个:-v /home/jar:/home/jar
设置端口映射宿主机的10013端口映射了容器中的8080端口,相当于访问宿主机的10013端口,就是访问了容器的8080端口:-p 10013:8080 
pm create -it --name openoffice --privileged=true -v /etc/localtime:/etc/localtime:ro \
-v /home/jar:/home/jar \
-v /home/WebLogs/file-api/`uname -n`:/usr/local/tomcat/logs \
-p 10013:8080 localhost/openoffice


查看所有容器  -a
podman ps -a

3.创建容器后启动容器
pm start 385

查看容器日志
podman logs -f --tail=100 eff

4.进入容器 容器名openoffice 
podman exec -ti openoffice /bin/bash

停止容器
podman stop 6fbf0216d07d

删除容器
podman rm 6fbf0216d07d

删除文件夹
rm -rf 目录名 

重新启动容器
podman restart 容器id


宿主机上面执行命令:容器拷文件到宿主机
pm cp openoffice:/home/jar/start_jar.sh /root/openoffice/start_jar.sh 

宿主机上面执行命令:宿主机拷文件到容器
pm cp /root/openoffice/start_jar.sh openoffice:/home/jar/start_jar.sh
pm cp /root/openoffice/chinese/msyhbd.ttc openoffice:/usr/share/fonts/msyhbd.ttc
pm cp /root/openoffice/chinese/msyhl.ttc openoffice:/usr/share/fonts/msyhl.ttc
pm cp /root/openoffice/chinese/msyh.ttc openoffice:/usr/share/fonts/msyh.ttc
pm cp /root/openoffice/chinese/simhei.ttf openoffice:/usr/share/fonts/simhei.ttf
pm cp /root/openoffice/chinese/simsun.ttc openoffice:/usr/share/fonts/simsun.ttc


查看容器所有语言环境(解决中文乱码时使用到,查看是否有中文语言)
locale -a

中文乱码
java -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider 修改成下面
java -Dfile.encoding=UTF-8 -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider


查看当前字符集
locale

编辑修改语言
vim /etc/locale.conf

服务器重启
reboot


注意事项

其中有一些问题,这一段是镜像在构建的时候一并写入
1.ADD添加文件到容器里面
2.赋予777权限
3.执行startjar.sh文件

4.这个时候去从构建好的镜像中去构建容器,并启动容器的时候,这个程序也开始启动了,并且是1号进程,kill -9都杀不死


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM