1. 程式人生 > >centos離線安裝mono(docker)

centos離線安裝mono(docker)

最近公司有需求要在centos上執行exe程式(一個生成pdf的exe程式),這個exe程式執行需要依賴mono,然後就到mono官網http://www.mono-project.com/download/stable/#download-lin-centos上下載,直接三步搞定:

1、rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"

2、su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'


3、yum install mono-devel

後來我們的專案需要部署到伺服器上,而部署的伺服器是無法聯網的,所以就需要離線部署了,開始的時候以為很簡單,不就是下載tar包,原始碼包安裝就完了,結果是安裝好了,但是執行的時候發現無法列印exe,缺少依賴包,然後下載相關依賴原始碼包再安裝,結果又缺依賴包,然後下載...安裝...下載...安裝。。。。太多依賴了,並且有很多依賴包的原始碼包在網上不是很好找。最後領導建議使用docker來進行安裝。然後就開始的docker的學習。

先說下docker,我對docker的學習僅限於成功的docker save了一個docker的映象檔案,可以進行mono的離線安裝。docker還有很多很好用的地方,以後有時間再去探索。

docker有幾個概念需要理解,image是映象,docker images檢視所有映象,docker run 是執行映象,執行的映象稱之為容器,使用docker ps進行檢視,docker stop 容器id 是停止執行的容器,檢視所有的容器(執行+停止狀態)docker ps -a。一個docker映象可以建立多個執行的環境,刪除映象前需要先刪除所有容器,命令為docker rm 容器id 容器id... 可以同時刪除一個或者多個容器,刪除完容器後使用docker rmi 映象id 來進行映象的刪除。

下面對我安裝的mono進行說明一下。

docker search 查詢docker的映象源。比如我需要先安裝一個centos,就執行docker search centos,這個時候可以選擇一個對應的版本進行docker pull centos,下載下來之後首先要建立一個執行環境docker run -d -p 10023:10023 -it --privileged=true -v /home:/home 映象Id /bin/bash -c "/mnt/autostart.sh"(這一段下面會進行專門講解)。 進入容器後使用如上描述的方法安裝mono,再exit退出來,使用docker cp 主機目錄(檔案) 容器id:/home ,將專案拷貝至容器,jdk拷貝也是一樣。都拷貝進去後再將容器打包成為一個新的映象,docker commit -a "chenfeng" -m "aotu-start" 容器id repository:tag(這個設定為需要的),生成完新的映象後,將這個映象save成檔案就可以離線安裝了。儲存檔案命令docker save -o /home/fileName.tar 映象id repository:tag,載入檔案命令docker load -i /home/fileName.tar。

docker run -d -p 10023:10023 -it --privileged=true -v /home:/home 映象Id /bin/bash -c "/mnt/autostart.sh"

    run 建立容器並執行

    -d  後臺執行

    -p  容器中埠與本機的埠對映

    --privileged=true 開啟容器使用者root許可權,否則對映的目錄檔案可能沒許可權開啟

    -v 主機的目錄和容器目錄的對映

    -c 啟動時容器執行的命令,執行的這個指令碼的最後需要加入 tail -f /dev/null 來確保指令碼一直執行,否則這個指令碼不會生效

再記錄一些坑,由於exe程式執行的時候命令中有中文,docker新建的centos不支援中文,需要進行設定

yum -y install kde-l10n-Chinese

yum -y reinstall glibc-common

localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

export LC_ALL=zh_CN.utf8

以上是我個人的一些理解,如果有錯誤的地方,請指出,謝謝。