Container筆記 - Docker簡介


基本介紹

我寫好了一隻在我電腦上可以順利運行的程式,但是搬到你電腦上就會爆掉,因此我們需要虛擬化的技術來幫助我們

在虛擬化的技術中我們已經知道有VM,為在共用硬體上建構新的OS和App,而Container是建構共用硬體及OS上建構不同的App

這樣的特性造成Container相比VM有許多的優點:
1.相較VM輕便,啟動速度較快
2.橫向擴充方便
3.轉移性很強,伺服器Host上裝載Container Engine就可以快速運行各個容器

因此軟體開發近年越來越採用容器化方法,包含在任何環境中執行的所有必要元素

Docker

docker是目前容器虛擬化最有名的工具
其有三大基本概念:

  1. 映像檔 (Image):
    image是一個模板用來重複產生容器的實體
    把container所需的系統元件一層一層的image layer中
    Docker使用Docker file去定義一個image中每個image layer的內容

  2. 容器 (Container):
    可以被啟動、停止、刪除。每一個容器都是相互隔離、保證安全的平台。
    可以把容器看作一個簡易版Linux環境和在其中執行的應用程式

    Docker file --(build)-->Docker image --(Run)--> Docker Container

  3. 倉庫 (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

其餘參考資料
https://ithelp.ithome.com.tw/articles/10209242







你可能感興趣的文章

實作 API 練習

實作 API 練習

vite系列#vite與Pinia整合範例

vite系列#vite與Pinia整合範例

Express

Express






留言討論