阿猩一直對虛擬化很感興趣,無論是客戶提供的VM,或是在求職網上常看到的Docker、K8S。趁工作告一段落,花了一點時間玩一下虛擬化,後續有空會慢慢完成系列文章,這篇主要是介紹如何用虛擬化工具,在Windows 上建立Ubuntu,並安裝Docker與Jenkins
建置Ubuntu測試環境
環境初步建置
阿猩的電腦作業系統是Windows,如果完成測試必須先將Linux環境建立好。Linux有許多發行版本,而阿猩選擇使用Ubuntu18.04。以VirtualBox掛載Ubuntu ISO檔(參1 、參2),並花很多時間處理很奇怪的問題,例如不能雙向複製貼上(參3)、vi方向鍵異常等問題(參4),安裝好Ubuntu環境大約需要1-2個小時左右。
Advanced Package Tool
Advanced Package Tool,又稱apt-get,使用Linux作業系統時,會使用apt-get install、apt-get purge等指令,進行程式的安裝或移除。原本只在Debian 的 unstable 版本中使用的apt,逐漸被大家接受,除了新增進度條、包含原本新的語法apt-get的功能,還新增了一些指令(參5、參6 )。目前apt-get仍存在,使用上並不會有問題。
安裝Docker
使用apt安裝Docker
在正式介紹如何安裝Jenkins之前,我們需要先安裝Docker,後續使用Docker Image來安裝Jenkins。網路上有很多關於Linux的Docker安裝教學(參7、參8)。
文章做了下列幾件重要的事情:
- 更新Linux軟體的Repositories apt update
- 安裝 sudo apt install docker
- 安裝後可透過指令確認狀態 docker version
看到不少文章是下載docker.io,但阿猩使用的指令是sudo apt install docke,非io或ce的版本。另外,下Docker指令時,如果每次都要打sudo docker xxxxxx就很麻煩,因此可透過whoami指令,查詢目前帳號名稱,並透過sudo usermod -aG docker YourAccount,將你正在使用的帳號加入docker群組,之後就不用加sudo啦。
VM與Container
VM全名為Virtual Machine虛擬機器,我們來看一下IBM對於VM的解釋(參9)。「虛擬化可讓您在單一實體機器上建立多個虛擬機器,每個虛擬機器都有自己的作業系統 (OS) 和應用程式。虛擬機器無法與實體電腦直接互動。而是需要藉助一個叫做 Hypervisor 的輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調。」。這段話提到了許多重點
- 單一實體機器上建立多個虛擬機器
- 每個虛擬機器都有自己的作業系統 (OS) 和應用程式
- 虛擬機器無法與實體電腦直接互動。而是需要藉助一個叫做 Hypervisor 的輕量型軟體層。
虛擬化
在Window底下,主流可選擇的虛擬化工具有Virtual Box、VMWare、 Hyper-V,透過Hypervisor,處理虛擬機器作業系統與實體主機硬體之間的協同
,例如共享記憶體等。如此一來,就可以在單一實體機器上,建立多個作業系統,例如阿猩的實體主機系統為Windows,依然可以透過虛擬化工具,建立多個Linux的虛擬環境。
Hypervisor(虛擬機器管控程式)
Hypervisor又可細分為2類(參10)
- Type I Hypervisor:Bare metal Hypervisor
- Type II Hypervisor:Hosted Hypervisor
簡單來說,Type I Hypervisor會直接使用硬體資源(Ex: VMware ESX/ESXi、Microsoft Hyper-V等),而Type II Hypervisor(Ex: VirtualBox by Oracle等)則是透過Host OS,與硬體層進行溝通,缺點自然就是效能會降低,但可安裝不同的作業系統。
Container
Container可翻譯為容器,阿猩找到一篇調理蠻清楚的文章(參 11)。利用Docker Engine,可以在Host OS上建立一個可以運行容器的環境,並且將Dependency封裝成Image,Docker Engine也可將Image 轉換成Container,利用Container的特性,就可以做到單一容器為單一應用程式,除了可以重複利用與搬遷,容器間彼此獨立運行,互不干擾。
到這裡不難看出VM與Container之間的差異
VM是在硬體或Host OS之上建立新的OS,而Container是以應用程式為主角, Container是依賴Host OS的核心(kernel)來運行容器,因此不需要在Container內中塞入OS相關檔案,除了檔案較小、開啟速度自然比較快。但也因為Container依賴Host OS,在安全性上則沒有VM安全。
實務操作上,可依使用需求,下載單一Images,例如.NET、Node.js、Nginx等,當然也包含我們後續要測試的Jenkins。
使用Docker並安裝Jenkins
阿猩就不介紹Docker了,網路上很多資源。後續阿猩會使用Docker來進行一系列的測試,包含操作Jenkins、建立其他Container並使用Jenkins測試ssh等。用docker安裝Jenkins的語法會像是
docker run \
--name Jenkins_Container \
-d --restart always \
-p 8080:8080 -p 50000:50000 \
-v /data/jenkins:/var/jenkins_home \
jenkins/jenkins:lts
這段語法其實包含了3個主要的步驟
- 下載Image
- 建立Container
- 執行Container
# 查看本機 image
docker images Jenkins
# 如果沒有則下載 image
docker pull Jenkins
# 建立 container
docker create -it --name Jenkins_Container Jenkins
# 使用 docker ps 確認 container 狀態
docker ps -a
其中還有用到很多參數,如-v、-p等,想深入了解就自行google docker run囉。
打開瀏覽器,輸入http:localhost:8080,如果可以看到下圖,就代表成功啟用Jenkins Container囉!
最後應該會要你初始化密碼,到這邊已經完成基礎環境的建置,下篇再來正式介紹Jenkins可以完成哪些工作。
參考資料
- https://www.virtualbox.org/wiki/Downloads
- https://www.ubuntu-tw.org/modules/tinyd0/
- https://steemit.com/vm/@oneleo/oracle-vm-virtualbox-ubuntu-18-04-desktop
- https://blog.csdn.net/shixin_0125/article/details/72805911
- https://iter01.com/585983.html
- https://clay-atlas.com/blog/2021/12/03/linux-apt-get-difference/
- https://ithelp.ithome.com.tw/articles/10236077
- https://blog.gtwang.org/virtualization/ubuntu-linux-install-docker-tutorial/
- https://www.ibm.com/tw-zh/cloud/learn/virtual-machines
- https://www.vmware.com/topics/glossary/content/hypervisor.html
- https://medium.com/mr-efacani-teatime/%E6%B7%BA%E8%AB%87%E8%99%9B%E6%93%AC%E5%8C%96%E6%8A%80%E8%A1%93-%E8%99%9B%E6%93%AC%E6%A9%9F-vm-%E8%88%87%E5%AE%B9%E5%99%A8-container-%E4%B9%8B%E6%8A%80%E8%A1%93%E5%83%B9%E5%80%BC%E8%88%87%E6%AF%94%E8%BC%83%E5%88%86%E6%9E%90-5c10457aad62