Docker介紹與基礎實作教學
大家可能沒有聽過Docker,但對VM(Virtual Machine虛擬機)應該都有一定程度的了解,這篇文章將會仔細介紹Docker是什麼、和虛擬機比較起來的優缺點,還有在專案管理及工程端Docker又扮演了什麼樣的角色
- Docker可以做什麼
- 專案管理:可以確保開發、測試、運行的環境一致性
- 工程師:Doceker很適合做自動化測試了,可以將Test的流程優化,讓整個開發團隊與測試團隊的環境一致,減少因環境導致的時間成本
2. Docker的優缺點
- 優點:部署相當快速安全、成本低、Docker Container是隔離的不會影響到其他應用程式、有效精準的CPU和空間資源分配、有許多公開資源(Docker Hub)、Mac版本有提供視覺化的應用程式
- 缺點:如果團隊中有不同OS的話可能會不方便
3. Docker 的 Container vs Virtual Machine
在Docker推出之前大多人都是使用虛擬機在電腦硬碟上劃分出一個空間去模擬開發環境,相較於虛擬機Docker就不會去佔用固定的硬碟空間,在一個OS(作業系統)中可以跑很多個Container,相較之下Container也比較省儲存空間(Image通常在10MBs左右)
4. Docker的三大名詞 — Container、Image、Repository
Container(容器):就像容器一樣,把Code和其他的許多東西組在一起變成一個Package,讓使用者可以在不同軟硬體環境切換,有點像把四五種水果打成果汁變成固定比例的飲料給每個客人喝,大家喝起來的味道都一樣,而不是發四五種水果給客人自己決定打汁的比例
Image(映像):Image的概念是將軟體和程式碼都變成一個Package,Image是唯獨且可以獨立存在的,而當Image在Container Engine上面跑的時候Image就變成Container
Repository(資料庫):在Github上我們透過repository來將自己開發的東西與別人分享,而Docker也傳承了這樣的概念,在docker網站登入自己的帳號後就可以create repository,而之後也可以將自己的程式碼push上去供其他團隊成員一起co-work(如下圖)
Docker push的方法很簡單,在先tag讓Docker知道你要將什麼檔案上傳
docker tag PROJECT-NAME YOUR-USER-NAME/PROJECT-NAME
之後就可以push上去已經建立好的資料庫
docker push YOUR-USER-NAME/PROJECT-NAME
5. Container下載範例(Docker pull) — 最常用的功能
這邊以hello-world來舉例,在Dockerhub中尋找想要的Container,點進去後會有下載容器的指令docker pull hello-world
,在Terminal中執行
下載成功後會出現在docker應用程式的image裡
接著在Terminal中執行我們下載的image docker run hello-world
最後檢查一下image的詳細資訊docker image hello-world
,跑出來的image ID可以跟應用程式中的做對照(Image ID會隨著每個裝置不同)
6. Localhost App
這邊我們試著官網的教學在Localhost(本機端)開啟一個可視化的APP網頁
docker run -d -p 80:80 docker/getting-started
-d
讓我們的container在Local host執行 (-d -p
也可以用-dp
表示)-p 80:80
把container的port80對到localhost的port80docker/getting-started
- the image to use
可以看到裡面多了一個happy_wright(應該是隨機取)的Container
然後將container設定(map)到我們想要的Localhost位址
docker run -dp 3000:3000 getting-started
接者打開瀏覽器輸入 localhost:3000 就會出現下面的網頁囉!
7. 最後補充一些在terminal中可能會用到的Docker語法
docker ps -a
:顯示Docker中有哪些Container
docker ps
:看一下有哪些Container是正在執行的
docker start ‘container ID’
:開始運行特定的Container
docker stop ‘container ID’
:停止Container,Docker ID在前面指令(ps)查
docker rm ‘container ID’
:刪除Container
docker search ‘image name’
:列出Docker Hub中所有相似的image
寫了一篇應該很少人會看的文章,但希望能幫助到需要的人XD