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

好記性不如爛筆頭,記錄下來的才是永恆!這裡是Java實戰技術大本營,誠邀關注。本文已收錄入GitHub,GitHub搜【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入門級實戰,真香

安裝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入門級實戰,真香

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

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

如果碰巧你可以非常快速的下載完成,下面的這步驟可以省了。其實,仔細檢視官方的DockerToolbox-19。03。1。exe說明,安裝包是包含boot2docker。iso檔案的。

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

安裝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,啟動成功後的介面如下圖。

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

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映象。

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

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

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

因為Docker Quickstart Terminal和命令列視窗都不是很好用,所以,我們可以使用常用的ssh軟體登入到建立的default虛擬機器,我這裡使用SecureCRT,其它軟體如XShell也可以。登入主機名:192。168。99。100,埠:22,使用者名稱:docker,密碼:tcuser,登入成功後如下圖。

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

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

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

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

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

輸入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入門級實戰,真香

可以看到我們剛剛透過docker run命令部署的wnameless/oracle-xe-11g-r2映象已經啟動成功了,建立的容器ID為1050ac76bdcf。

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

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

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

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

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

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

啟動一個已停止執行的容器,可以輸入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。

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

小結

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

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

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

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

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

學之多,而後知之少

!朋友們【

點贊+評論+轉發

】是我持續更新的最大動力,我們下期見!

往期推薦

我畫了25張圖展示執行緒池工作原理和實現原理,建議先收藏再閱讀

這樣的API閘道器查詢介面最佳化,我是被迫的

面試被問為什麼使用Spring Boot?答案好像沒那麼簡單

都說ThreadLocal被面試官問爛了,可為什麼面試官還是喜歡繼續問

說實話,面試這麼問Spring框架的問題,我真扛不住

Spring宣告式事務處理的實現原理,來自面試官的窮追拷問

沒使用加號拼接字串,面試官竟然問我為什麼

面試官一步一步的套路你,為什麼SimpleDateFormat不是執行緒安全的