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
以上是我個人的一些理解,如果有錯誤的地方,請指出,謝謝。