Docker 介紹

為什麼要用到 Docker 呢? 假設我們遇到一個情境:「 A 同學在自己的電腦上寫好一個專案 , 結果發現在 B 同學的電腦上無法順利執行」,那會產生這樣的問題可能是因為每台電腦作業系統與硬體配置不盡相同,造成程式無法相容的情況。為了解決這個問題,我們會希望模擬出一個相同的執行環境,也就是虛擬化。
虛擬化的方式分為兩種,第一種就是常聽到的「虛擬機」(Virtual machine),另一種為「容器」(Container)今天要使用的 Docker 就是容器的一種,它讓我們可以分離應用程式運行的基礎設施(infrastructure),快速的建立、發佈應用程式。開發應用程式時也可以專注開發應用,而不用花太多的時間在安裝/運行環境的設置。

虛擬機(Virtual machine)與容器(Container)

• 虛擬機器(Virtual machine)

虛擬機器是以作業系統為中心,模擬出軟體、韌體及硬體,簡單來說就是在你原先的作業系統(Host OS)上再裝上另一個作業系統(Guest OS),但使用虛擬機需要占用大量的磁碟、內存和CPU資源。

• 容器(Container)

容器則以應用程式為中心,容器是在作業系統層上虛擬化,透過 Container Manager 直接將一個應用程式所需的程式碼、函式庫打包,建立資源控管機制隔離各個容器,並分配 Host OS 上的系統資源。應用程式不需要再另外安裝作業系統(Guest OS)也可以執行,降低占用的硬碟容量,啟動速度更快。

Docker 三個重要概念

Docker 包括三個基本概念:映像檔(Image)、容器(Container)、倉庫(Repository)。

映像檔(Image)

映像檔裡面包含了你要部屬的應用程序(程式碼、函式庫、環境配置檔),例如一個映像檔裡可以包含一個完整的 MySQL 服務、一個 Golang 的編譯環境、或是一個 Ubuntu 作業系統,通過映像檔可以去創建多個 Docker 容器。

映像檔可以透過撰寫由命令行構成的 Dockerfile 輕鬆建立,或甚至可以從公開的地方下載已經做好的映像檔來使用。舉例來說,如果我今天想要一個 node.js 的執行環境跑我寫好的程式,我可以直接到上 DockerHub 找到相對應的 node.js 映像檔 ,而不需要自己想辦法打包一個執行環境。

• 可以自己建立一個 Image

1
2
3
4
5
6
FROM node:10.15.3-alpine
WORKDIR /app
ADD . /app
RUN npm install
EXPOSE 3000
CMD node index.js

• 利用 docker pull 指令抓取 Image

1
docker pull "NAME"

容器(Container)

容器是從映像檔建立的執行實例,用 docker + run(建立並執行) / start(執行) / restart(重新執行) / stop(停止) / rm(移除) 指令可以管理容器。你可以想像映像檔是一個小熊模具,而容器就是利用這個小熊模具而烤出來的餅乾。

倉庫(Repository)

倉空就是存放映像檔的地方(收集各種模具:小熊、小狗、小貓…等的地方),倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 DockerHub,存放了數量龐大的映像檔供使用者下載。

Docker 實作練習

安裝 Docker

Docker官網下載 Docker Desktop

建立 Docker Image

利用 git clone 抓取 docker-tutorial 檔案,接著 cd 進入 docker-demo-app,裡面已經有一個撰寫好的 Dockerfile,如上方映像檔(Image)程式範例。

1
$ git clone https://github.com/HcwXd/docker-tutorial.git

接著透過指令 docker build 建立 docker image 並為這個映像檔加上 tag docker-demo-app。

1
docker build . -t docker-demo-app

建立好後輸入指令 docker images ,列出目前所有 image 資訊。

新建容器並啟動

剛剛我們建立好 image 後,我們就可以利用這個映像檔來創建一個容器,透過上面 docker images 指令,可以找到 Image 的 ID 在這裡是 9d78a4271402。
透過 docker run 將映像檔執行成容器 ,-p 3000:3000 ,前面數字是本機端端口,後面是伺服器預設端口,設定完後利用瀏覽器打開 localhost:3000,就可以看到執行結果。

在 docker desktop 也可以看到 目前建立好的 image 及 container

其它相關指令

docker ps (查看容器內容)

1
$ docker ps

docker stop (停止容器)

1
$ docker stop <container ID>

今天學習筆記就到這邊啦~對於電腦記憶體不大的人(我)來說,安裝虛擬機後電腦就很常當機 XP
運用 docker 後真的能明顯感受出它的輕便性。