面向開發人員的Docker入門級實戰,真香

好記性不如爛筆頭,記錄下來的纔是永恆!這裏是JavaQ大本營,誠邀關注。本文已收錄入GitHub:https://github.com/wind7rui/JavaHub。

聊聊Oracle

2013年“去IOE”這個話題在IT圈火熱起來,它是由阿里巴巴提出的概念,意思是在IT架構中,去掉IBM的小型機、Oracle數據庫、EMC存儲設備,以自己在開源軟件基礎上開發的系統取而代之。雖然,Oracle數據庫以容量大、穩定、安全、性能高自居,但是這些高性能指標都需要厚實的資金支撐(硬件不斷擴展資金、技術諮詢和服務費),所以當年很多私有、民辦企業緊跟其後,逐漸不再使用Oracle。

回想過去,爲了可以隨時使用Oracle數據庫,不得不在自己的筆記本電腦上安裝,不知道各位有沒有經歷過其安裝過程,安裝過程很漫長,而且可能會遇到各種奇葩的錯誤信息,有錯誤中斷安裝後,需要再次重新安裝。安裝過程中會在系統上安裝很多輔助軟件,有些還被設置成了開機自啓動服務。在經歷過各種安裝重啓之後,好不容易安裝完成,啓動起來試試吧,接下來等待的就是漫長的啓動過程,因爲它需要加載很多東西,這時候如果電腦配置不行,散熱風扇就開始嘶吼了。總結一下,個人筆記本電腦上使用物理安裝的方式使用Oracle數據庫,不容易!

選Vagrant,還是Docker

如果不是有特殊需求,我是不會再碰Oracle了。這不,最近因某些特殊原因不得不再次安裝使用Oracle。不過,現在都2020年了,誰還直接物理安裝啊!我很早之前的文章《開發環境利器vagrant》和《再談Vagrant》詳細介紹了不通過物理安裝,直接使用Vargant快速打造開發環境,利用虛擬化技術將這些開發環境和軟件安裝到虛擬機上,通過Vagrant可以輕鬆實現對虛擬機的管理、自動化配置和安裝開發環境及各類軟件,這種Vagrant簡單快捷、佔用的物理資源也少,用的不爽了可以隨時移除。

不過,Vagrant不是今天的主角,我們要聊的是Docker!Docker是什麼?Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的Linux或Windows機器上。舉個簡單的例子,我們把開發好的war包或可執行jar包在安裝了JDK的Linux系統上部署,並將相關的依賴及配置也都配置好,然後直接將他們打包成一個鏡像,拿着這個鏡像就可以隨時部署了,不用在部署的機器上安裝一系列複雜的軟件環境了(JDK、數據庫、Redis等),不用再擔心“我這可以運行,你那怎麼就不行”,也不需要再考慮各種兼容性問題,因爲這個鏡像就是一個可直接交付的包含運行環境的成品,真正做到一次創建鏡像,任意正常運行。Docker提供了鏡像倉庫,倉庫中有很多打包好的、可以拿過來直接部署的鏡像,例如Oracle、Nginx等。當然,這只是Docker的部分功能,更多有關Docker的介紹請移步搜索引擎。

Vagrant和Docker都使用了虛擬化技術,Vagrant是基於Virtualbox的虛擬機技術,Docker則是基於輕量級容器虛擬技術,兩者的區別就像進程和線程,虛擬機內可以包含很多容器,正如一個進程中可以包含很多線程,所以前者基於虛擬機顯重,後者基於容器虛擬技術顯輕。不過,它們的側重點不同,Vagrant是開發環境的部署工具,這一點可以通過它官網的介紹而知,而Docker是運行環境的部署工具。

安裝Docker

相對於Vagrant的使用,Docker的操作成本會小很多,最主要的是Docker使用起來快、省。所以,本篇內容是在Windows7系統上使用使用Docker部署Oracle。爲什麼是Windows7,而不是Windows10?雖然Win10很炫,但是我更喜歡低調實用的Win7,不知道你們是不是也這麼認爲。不過,如果你是Win10用戶也沒關係,因爲本篇內容也會帶着介紹win10上如何部署,不要走開哦!

在Windows系統上安裝Docker,操作系統的版本不同方式也不一樣。Win7和Win8系統不支持Hyper-V,所以只能安裝Docker Toolbox的方式使用Docker,它利用VirtualBox建立Linux虛擬機,在Linux虛擬機中安裝Docker服務端和客戶端。Win10操作系統可以利用Hyper-V虛擬化技術,所以直接安裝Docker for Windows,它在Windows上安裝docker服務端和客戶端,安裝前需要開啓Hyper-V,具體操作:控制面板-程序-程序和功能-啓用或關閉Windows功能-Hyper-V。

Win7/Win8上安裝Docker Toolbox,目前最高版本是v19.03.1,根據官網的指引需要到github上下載,231MB需要下載很久,因爲很慢!所以,我們需要藉助國內的下載地址,訪問https://get.daocloud.io/toolbox/下載DockerToolbox-19.03.1.exe。

Win10系統安裝Docker for Windows,在這裏下載https://get.daocloud.io/#install-docker-for-mac-windows。

如果你是MacOS系統,系統版本低於OS X 10.10.3,在這裏https://get.daocloud.io/toolbox/下載安裝DockerToolbox-19.03.1.pkg,如果系統是OS X 10.10.3或者更高版本,需要下載安裝Docker for Mac,在這裏下載https://get.daocloud.io/#install-docker-for-mac-windows。

對於Windows系統,在安裝前需要確認BIOS設置中是否開啓了“Virsualization Technology”,具體操作:開機快速按BIOS設置鍵(各個品牌電腦不同,如果不知道通過搜索引擎查詢),進入BIOS界面,依次選擇Configuration -> Intel Virtual Technology -> Enabled(注意:因主板不同,名稱和位置可能不一樣,主要找Virtual字樣的設置)。

Win7/Win8系統雙擊下載的DockerToolbox-19.03.1.exe,根據指引安裝,如果VirualBox或Git已經安裝,可以不勾選安裝,下圖中這個選項建議勾選。

安裝完成後,桌面上會出現Docker Quickstart Terminal快捷鍵圖標,首次雙擊它進入命令行窗口後,界面提示正在創建一個名字叫default的虛擬機,創建過程會自動從github上下載boot2docker.iso文件,這個過程非常緩慢,而且大多數情況下會出現timeout,如果不能正常下載,虛擬機創建失敗。

如果碰巧你可以非常快速的下載完成,下面的這步驟可以省了。其實,仔細查看官方的DockerToolbox-19.03.1.exe說明,安裝包是包含boot2docker.iso文件的。

安裝DockerToolbox-19.03.1.exe後,boot2docker.iso文件被存放到了安裝目錄下,例如我安裝時選擇的目錄是C:\Program Files\Docker Toolbox,直接將boot2docker.iso拷貝到C:\Users\Administrator.docker\machine\cache下(其中,Administrator是我的用戶名,可能和你的不一樣),然後斷開有線網和無線網,重新打開Docker Quickstart Terminal,就可以創建成功了(如果你嘗試了還不行,評論留言@我直接發你),創建的default虛擬機IP默認是192.168.99.100,啓動成功後的界面如下圖。

Win10系統雙擊下載的Docker for Windows Installer安裝文件,根據指引安裝。安裝完成後,Docker會自動啓動,並且右下角通知欄上會出現個小鯨魚的圖標,這個小圖標可以右擊選擇settings,在這裏可以做更多配置,例如設置國內鏡像地址。win+R快捷鍵打開運行窗口,輸入cmd,在命令行窗口輸入docker --version驗證安裝是否成功,正常輸出Docker版本則安裝成功。

部署Oracle

本文通過使用Docker部署Oracle來學習一下Docker的入門級使用。開始下面的內容之前,我們先了解一下Docker中的鏡像、容器和倉庫。鏡像是一個特殊的模板文件,它裏面包含了運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等),例如一個MySQL鏡像,它包含一個完整的Linux系統,在這個系統上安裝了MySQL數據庫和其它相關的資源文件和配置。容器是由鏡像創建的運行實例,運行鏡像就會創建一個容器。鏡像和容器的關係,打個比方,就像Java中的類和對象的關係。倉庫,這個很好理解了,既然鏡像是模板,那麼就需要有存儲的地方,倉庫就是管理鏡像的地方,我們可以從倉庫中下載鏡像,也可以向倉庫提交鏡像。

默認情況下,我們使用Docker時,它會使用自己的鏡像倉庫地址,但是從這個地址下載鏡像會很慢,所以,我們需要配置國內的鏡像加速器地址。國內的加速器這裏推薦使用阿里雲,具體如何獲取阿里雲鏡像加速器地址,看這裏https://help.aliyun.com/document_detail/60750.html獲取到阿里雲鏡像加速器後,Win7/Win8系統在打開Docker Quickstart Terminal後執行如下命令:

sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS=' --registry-mirror=自己的加速器地址 |g" /var/lib/boot2docker/profile

然後執行exit,可以看到退出了default虛擬機,接着依次執行如下命令:

docker-machine env default
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env default) --這一步是根據docker-machine env default執行後,提示需要執行的,如果你沒有這個提示,請忽略
docker-machine restart default
docker-machine env --這一步是根據docker-machine restart default執行後,提示需要執行的,如果你沒有這個提示,請忽略

查看是否配置成功,使用docker info命令,如果輸出的信息(內容很長,慢慢找)中有--registry-mirror=自己的加速器地址,那就表明配置成功了。

Win10操作系統,還記得我上面說的那個右下角的小鯨魚的圖標嘛,右鍵選擇settings,打開配置窗口後左側導航菜單選擇“Docker Daemon”。編輯窗口內的JSON串,填寫下方加速器地址,編輯完成後點擊Apply保存按鈕,等待Docker重啓並應用配置的鏡像加速器。

{
  "registry-mirrors": ["自己的加速器地址"]
}

Docker Hub是Docker官方維護的一個公共倉庫,存放着Docker及其組件的所有資源,包括鏡像,我們要想使用Docker Hub中的鏡像,首先需要先註冊一個賬號,註冊地址https://hub.docker.com/,記住註冊的Docker ID和密碼,後面會用到。

註冊完成後,在https://hub.docker.com/search頁面搜索Oracle鏡像。

頁面會列出很多鏡像,我們根據需要選擇某一個,我這裏選擇wnameless/oracle-xe-11g-r2這個鏡像,點擊進入詳情頁面,在這個頁面會詳細的描述這個鏡像如何使用,以及鏡像裏有什麼。

因爲Docker Quickstart Terminal和命令行窗口都不是很好用,所以,我們可以使用常用的ssh軟件登錄到創建的default虛擬機,我這裏使用SecureCRT,其它軟件如XShell也可以。登錄主機名:192.168.99.100,端口:22,用戶名:docker,密碼:tcuser,登錄成功後如下圖。

輸入docker login命令,根據指引完成登錄Docker Hub操作。

根據剛剛在Docker Hub頁面搜索wnameless/oracle-xe-11g-r2得到的使用指引,我們需要先輸入docker pull wnameless/oracle-xe-11g-r2命令從鏡像倉庫中拉取該鏡像到本地,拉取完成後,輸入docker images查看本地有哪些鏡像可以使用。

輸入docker run -d -p 1522:22 -p 1521:1521 --name awesome_lalande wnameless/oracle-xe-11g-r2命令,部署Oracle鏡像,創建一個新的容器,得到一個可使用的Oracle數據庫服務,啓動過程之快令人驚訝,秒級別的。

上面命令參數解釋:

  • docker run:創建一個新的容器並運行命令;

  • -d:後臺運行容器,並返回容器ID;

  • -p:指定端口映射,格式爲:主機(宿主)端口:容器端口,如1521:1521;

  • --name:指定容器的名稱,如awesome_lalande;

  • wnameless/oracle-xe-11g-r2:要運行的鏡像;

輸入docker ps查看有哪些正在運行的容器,如果想列出所有的容器,包括未運行的,可以使用docker ps -a。

可以看到我們剛剛通過docker run命令部署的wnameless/oracle-xe-11g-r2鏡像已經啓動成功了,創建的容器ID爲1050ac76bdcf。

如果你想看容器的運行啓動日誌,輸入“docker logs CONTAINER_ID”,CONTAINER_ID就是docker ps輸出的CONTAINER_ID。

如果你想進入到Oracle容器中,也就是運行Oracle的Linux系統中,輸入“docker exec -it CONTAINER_ID /bin/bash”,CONTAINER_ID同樣是docker ps輸出的CONTAINER_ID。退出容器,輸入exit。

如果想停止運行中的容器,可以輸入docker stop 容器名稱,例如docker stop awesome_lalande,這個awesome_lalande是我們上面使用docker run時通過--name參數指定的容器名稱,如果你不確定容器名稱,可以通過docker ps命令查看,輸出的最後一列就是容器名稱。

啓動一個已停止運行的容器,可以輸入docker start 容器名稱,例如docker start awesome_lalande。當日也可以使用docker restart命令重啓容器,例如docker restart awesome_lalande。

到這裏,我們就可以使用數據庫操作客戶端連接Oracle數據庫並使用了。我這裏使用Navicat,連接信息如下:hostname:192.168.99.10,port:1521,sid:xe,username:system,password:oracle。

小結

本篇內容基於Oracle鏡像,當然你有可以試試其它鏡像,例如MySQL、Nginx等,使用方式都是一樣的,具體如何使用鏡像,可以根據上面說的,查看Docker Hub中搜索得到的鏡像詳細描述。

本篇內容只是一個入門級的使用,Docker有很多很強大的功能,後續我也會結合實際工作中的使用經歷不斷分享,歡迎朋友們繼續關注!

如果你還不知道Docker是什麼,或者還沒使用過,真的需要好好補補課了,不是因爲它流行,而是真的很好用,真香!

聊個題外話,關注我的朋友可能發現了,我更新文章不是很固定,有時一週一更,有時兩週一更,我不是專門做自媒體的,寫作只爲了記錄(記憶不可靠)和分享(開源),所以沒必要爲了討好別人浪費時間到處找文章、轉發別人未授權的文章,一天一更。

以前看到好的文章也會分享、做排版,但是後來想想基本是在消耗我的時間,自己也沒有得到技術積累,從那之後索性只分享自己的原創。我也會在圈裏分享我寫的文章,畢竟這些都是我早上早起擠時間整理的。所以關注我你會看到一手原創、有料的技術文章

學之多,而後知之少!朋友們點【在看】是我持續更新的最大動力,我們下期見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章