【VM、Docker】在Windows OS下建立Container

  • 318
  • 0

阿猩一直對虛擬化很感興趣,無論是客戶提供的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 installapt-get purge等指令,進行程式的安裝或移除。原本只在Debian 的 unstable 版本中使用的apt,逐漸被大家接受,除了新增進度條、包含原本新的語法apt-get的功能,還新增了一些指令(參5參6 )。目前apt-get仍存在,使用上並不會有問題。

 

安裝Docker


使用apt安裝Docker
在正式介紹如何安裝Jenkins之前,我們需要先安裝Docker,後續使用Docker Image來安裝Jenkins。網路上有很多關於Linux的Docker安裝教學(參7參8)。

文章做了下列幾件重要的事情:

  1. 更新Linux軟體的Repositories apt update
  2. 安裝 sudo apt install docker
  3. 安裝後可透過指令確認狀態 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 的輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調。」。這段話提到了許多重點

  1. 單一實體機器上建立多個虛擬機器
  2. 每個虛擬機器都有自己的作業系統 (OS) 和應用程式
  3. 虛擬機器無法與實體電腦直接互動。而是需要藉助一個叫做 Hypervisor 的輕量型軟體層。


虛擬化
在Window底下,主流可選擇的虛擬化工具有Virtual Box、VMWare、 Hyper-V,透過Hypervisor,處理虛擬機器作業系統與實體主機硬體之間的協同

,例如共享記憶體等。如此一來,就可以在單一實體機器上,建立多個作業系統,例如阿猩的實體主機系統為Windows,依然可以透過虛擬化工具,建立多個Linux的虛擬環境。

Hypervisor(虛擬機器管控程式)
Hypervisor又可細分為2類(參10)

  1. Type I Hypervisor:Bare metal Hypervisor
  2. 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個主要的步驟
  1. 下載Image
  2. 建立Container
  3. 執行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可以完成哪些工作。
 

參考資料

  1. https://www.virtualbox.org/wiki/Downloads
  2. https://www.ubuntu-tw.org/modules/tinyd0/
  3. https://steemit.com/vm/@oneleo/oracle-vm-virtualbox-ubuntu-18-04-desktop
  4. https://blog.csdn.net/shixin_0125/article/details/72805911
  5. https://iter01.com/585983.html
  6. https://clay-atlas.com/blog/2021/12/03/linux-apt-get-difference/
  7. https://ithelp.ithome.com.tw/articles/10236077
  8. https://blog.gtwang.org/virtualization/ubuntu-linux-install-docker-tutorial/
  9. https://www.ibm.com/tw-zh/cloud/learn/virtual-machines
  10. https://www.vmware.com/topics/glossary/content/hypervisor.html
  11. 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