基本介紹
我寫好了一隻在我電腦上可以順利運行的程式,但是搬到你電腦上就會爆掉,因此我們需要虛擬化的技術來幫助我們
在虛擬化的技術中我們已經知道有VM,為在共用硬體上建構新的OS和App,而Container是建構共用硬體及OS上建構不同的App
這樣的特性造成Container相比VM有許多的優點:
1.相較VM輕便,啟動速度較快
2.橫向擴充方便
3.轉移性很強,伺服器Host上裝載Container Engine就可以快速運行各個容器
因此軟體開發近年越來越採用容器化方法,包含在任何環境中執行的所有必要元素
Docker
docker是目前容器虛擬化最有名的工具
其有三大基本概念:
映像檔 (Image):
image是一個模板用來重複產生容器的實體
把container所需的系統元件一層一層的image layer中
Docker使用Docker file去定義一個image中每個image layer的內容容器 (Container):
可以被啟動、停止、刪除。每一個容器都是相互隔離、保證安全的平台。
可以把容器看作一個簡易版Linux環境和在其中執行的應用程式Docker file --(build)-->Docker image --(Run)--> Docker Container
倉庫 (Repository):
集中存放映像檔案的地方
最大的公開倉庫伺服器是 Docker Hub,存放大量 Image 可以下載,概念類似 GitHub
Docker compose
問題:如果今天有十個 container 要建立,這樣一直重複啟image很麻煩
解決:Docker compose
Docker程式實作
dockerfile
FROM node:16.13.0-bullseye-slim
WORKDIR /app
COPY package*.json .
RUN npm i
COPY . .
EXPOSE 3005
CMD npm start
FROM node:16.13.0-bullseye-slim
FROM指定一個要繼承的image file, 這裡我們直接繼承了node官方提供的image file
WORKDIR /app
WORKDIR是指定工作目錄的位置
COPY . .
複製資料夾或是檔案到容器中
RUN npm i
執行
EXPOSE 3005
宣告image file內所監聽的port
CMD npm start
啟動 api server
docker cmd
先將以下資料夾在IDE中開啟再打開Docker連線
https://github.com/yucheng880730/WorkShop_20221213
我們就可以用IDE中的cmd指令來操作Docker功能
https://hackmd.io/@3FEcAD4XRui3qzMhgBzfow/HyeV5rQui#dockerignore