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