Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於基礎鏡像並最終創建一個新的鏡像。它們簡化了從頭到尾的流程並極大的簡化了部署工作。Dockerfile從FROM命令開始,緊接着跟隨者各種方法,命令和參數。其產出為一個新的可以用於創建容器的鏡像。水族趣聞
▲作用
▪ 對於開發人員:可以為開發團隊提供一個完全一致的開發環境。
▪ 對於測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了。
▪ 對於運維人員:在部署時,可以實現應用的無縫移植。
▲組成
▲構建鏡像
創建完一個Dockerfile文件之后並在其當前目錄下運行docker build -t new_image_name:tag .命令生成一個新的鏡像。
本次我們僅將中間件部分轉移到docker中,數據庫依舊是用原來虛擬機上的數據庫,所以我們的Dockerfile主要任務有:
▪ 配置中間件運行環境(依賴包及環境變量)
▪ 配置oracle即時客戶端,用於連接原虛擬機的數據庫
▪ 其他一些雜項配置等
Dockerfile
鏡像制作
新建/qx/centos_ssh文件夾,將Dockerfile拷貝到目錄下,並新建source文件夾,文件夾中存放如下資料
上面basic-10.2.0.5.0-linux.zip、sqlplus-10.2.0.5.0-linux.zip為oracle即時客戶端,profile中是環境變量,tnsnames.ora是我們需要連接的tns配置,可以直接從待遷移機器上拷過來即可。
切換到/qx/centos_ssh目錄下,執行
等待鏡像構建完成,可能需要一會兒。完成之后,執行
查看鏡像列表
Dockerfile構建容器
Dockerfile中我們說過,創建掛載點,注意在run時需用-v實際指定具體的宿主機目錄。我們先將hundsun下的三個目錄,包括appcom,linux.i386,workspace拷貝到宿主機器上,例如
然后我們創建容器時就將/home/hundsun/uf_114下的三個目錄分別掛載到我們容器中的/home/hundsun/下的三個目錄中
除此之外,我們還需要根據需要映射端口,如22,9002,9004等。最終,我們的命令如下
由於我們Dockerfile中最后有一條啟動ssh的cmd,所以這里我們不用docker run -it xxx /bin/bash,而是用-d后台運行,因為如果有docker run -it xxx /bin/bash,就會覆蓋Dockerfile中的最后一條cmd命令,導致ssh不能正常啟動。
上面執行成功后,我們通過
進入容器,后面就是與原來虛擬機操作一樣的。由於上面我們上面映射了2225端口到22端口上,所以我們可以直接通過宿主機ip:2225連接到容器中,可通過xshell,xftp等工具直接連接。
還有9002和9004端口,也可以通過hsadmin,客戶端等直接連接宿主機,即可連接到容器內。而我們掛載的三個文件夾,則可以直接連接宿主機進行升級操作,會同步更新到容器內。
上面主要是完成了中間件環境Dockerfile的編寫及構建,數據庫依舊采用的是虛擬機管理,那么接下來我們寫一個安裝oracle的Dockerfile,由於有了上面的基礎,這里就大概的介紹一下流程。
手工安裝oracle是一個非常麻煩的事情,需要改一堆配置,需要嘗試的可以看看linux社區的Docker中安裝Oracle 11.2.0.4這篇文章。在github上找到了一個寫好的,但是有點問題,我們就基於此來修改並新增一些個性化的功能,fork了一個到這兒。
然后我們將上面所需要的文件都放到docker宿主機上,如下:
先看下Dockerfile
其實主要的步驟是:
1./assets/setup.sh腳本中主要是安裝oracle所需依賴、oracle用戶組、以及修改一些系統文件以滿足oracle安裝檢查,新增了安裝ssh服務。
2.切換目錄到/qx/oracle_image/下,通過,構建一個名為oracle的鏡像。
3.構建完鏡像,Dockerfile的任務已經完成,接着創建並啟動容器。
4.
5./assets/entrypoint.sh是在創建容器時執行的,里面主要安裝oracle,通過調用/assets/install.sh安裝。
6.安裝完或者已經安裝(比如第二次啟動時),繼續執行/assets/entrypoint_oracle.sh腳本。
7./assets/entrypoint_oracle.sh這個腳本主要時建庫以及啟動數據庫。
8.至此,數據庫已經安裝完畢,建庫完畢,啟動完畢。
9.linux用戶名:root/install 密碼:oracle/install。
10.數據庫SERVICE_NAME = ORCL,sys密碼oracle。
擴展閱讀