學習紀錄: 初見Docker

更新 發佈閱讀 7 分鐘

最近開始接觸Docker但是從官方的docs很難快速抓到重點,所以寫了一篇當作學習紀錄,希望未來也可以透過這種模式慢慢更新,主打一個細水長流。

什麼是Docker?

以下是官方檔案中的描述:

Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications.

不知道多少人像我一樣有看沒有懂,直到後面稍微了解Docker之後才慢慢理解這些內容,這段說明了Docker平台的開發目的跟應用方向,因此是十分高抽象的敘述,舉例來說就像汽車開發商生產了一台車,這台車的目的是用來載客、駕駛及提供使用者更快到達目的交通工具,但關於這台車的組成跟使用方法卻尚未提及不免讓人難以理解,所以這篇用來記錄我對Docker的理解,希望透過這樣的方式加深印象,如果有人跟我一樣的困惑被解答到那就再好不過。



提到開發這件事就離不開開發環境,不論哪個語言都需要各種套件依賴或是運行環境,因此通常第一件事就是安裝運行環境常見的有Node.js、 .NET,這時候不同的運行環境版本就可能導致套件無法使用,因此不同的開發環境就可能無法正常的執行應用,Docker就是這種情況下的解決方案。

Docker engine是Docker平台的核心,並透過Client/Server架構執行,Client是與使用者互動的主要介面可以透過CLI或Docker desktop進行操作,Server主要管理image、container、網路及儲存等功能。

Docker engine必須依賴Linux kernel運行,使用container提供隔離的環境並使用Namespaces與Cgroups實現,但這部分還沒有深入了解所以不討論,未來有機會再來研究一番,因此為了能夠運行Docker engine必須提供Linux kernel,如果是原生的Linux作業系統就能夠直接運行,但是如果是Windows中則需要啟用Windows Subsystem for Linux(WSL),WSL是Windows10、11透過Hyper-V平台所提供的輕量級的原生Linux kernel。

WSL是Windows提供的一項功能,可以在Windows上執行Linux作業系統而不需要使用虛擬機或是雙開機,並且可以透過Windows的檔案管理或是終端機直接對Linux文件進行操作,甚至還有提供GPU的硬體直連,對於需要在Linux環境中進行的AI訓練基本也是無痛支援,妥妥的微軟黑科技。

有了Linux kernel後Docker便可以透過container提供隔離的運行環境,概念上是container會運行Linux環境,這個環境可以依據需求安裝所需的runtime或是套件,並透過image確保每個開發者都能取得一樣的環境。

所以接下來會簡單地在Win11環境中透過Docker執行Debian環境,並透過bash指令進行簡單的I/O操作。



安裝WSL與Docker Desktop

打開PowerShell並安裝WSL

wsl --install
wsl --version​
vocus|新世代的創作平台

接著就是安裝Docker Desktop,安裝完成後輸入以下指令就可以看到Docker Desktop已經運行在WSL上

wsl --list --verbose
vocus|新世代的創作平台



運行Debian

首先透過下面的指令取得Debian最新的image

docker pull debian:latest

接著查看Docker現在有的images,應該會包含Debian

docker images
vocus|新世代的創作平台

最後使用docker指令啟動container並運行debian

docker run -it --name my_debian debian

這時候就可以透過tty對Debian進行操作了,如果要退出只需要輸入exit就可以

vocus|新世代的創作平台

進行到這邊就是Docker基本的概念,透過container隔離不同的運行環境,並透過運行在WSL的Linux kernel達到原生使用硬體的優勢,當然這樣的實現是複雜且精妙的,如果未來有機會一定好好的研究一番並分享上來,最後就是在Debian運行我們需要的環境,並透過js檔案打印出hello world。


運行的Node.js環境

接著要為Debian安裝Node.js與Nano文字編輯器,前者是js的runtime後者則是用來編輯js檔案

apt update && apt install nodejs nano -y
node --version
nano --version​
vocus|新世代的創作平台

接著會在home路徑下創建一個hello world.js檔案儲存並離開

nano home/hello_world.js
//hello_world.js
console.log("Hello world");

最後使用node執行這個js檔案,BANG!! 成功運行!!

vocus|新世代的創作平台

恭喜!!到這邊我們成功透過Docker container運行Debian環境,並安裝Node.js及Nano,最後打印出Hello world,這時候如果回到PowerShell會發現本機的Node.js版本跟Debian的不同甚至根本沒有安裝Node.js,這就是Docker平台帶來的威能"隔離的container環境"不用再為了不同版本的專案把自己本機的環境搞得一團糟。



總結

這邊文章並不是甚麼高深的技術討論,主要是學習Docker後的一些結論,希望從不同的角度來入門Docker,就像開頭所說的Docker Docs對沒有概念的初學者的說明稍嫌抽象,所以希望用這種簡單的操作練習來理解Docker並加深概念,如果有幫助到腦迴路跟我差不多的小夥伴的話就再好不過了,也同樣歡迎對於內容有疑問或想要補充、糾正的高手分享想法。

謝謝大家,下次見!!

留言
avatar-img
Jerry's Blog
0會員
2內容數
Jerry's Blog