# Docker ## VM vs Docker VM(*Virtual Machine*)需要**虛擬機器監視器(VMM/Hypervisor)** 模擬出軟體、韌體或硬體包含OS,才能運行應用程式 > Hypervisor負責將實體運算資源(處理器,記憶體及儲存設備)配置給每個VM,VM無法與實體電腦直接互動,Hypervisor是輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調,這樣可防止 VM 之間相互干擾。 Docker運行應用程式的環境稱作容器(container),直接運行在母體host machine的核心,比虛擬機器又更為輕量級、執行啟動又更快 1. 同一台主機或VM上執行多個container,共享硬體資源(sandbox) 2. Scaling: 根據業務需求輕易的擴張縮小(需要被統一管理) 3. 讓開發跟發佈有統一的標準環境(語言、套件版本),對CI/CD更方便 ## Docker Architecture 透過docker CLI指令與docker daemon通訊操作docker物件:images、containers、networks和volumns  * **Images** 是一種創建container且read-only的template,通常會based on其他的image下去安裝需要的packages,並加上版本號,Ubuntu、Python3.8.10都是常用的images base * 如果要重build自己的image,Dockerfile可以自定義一些步驟: 1. base images 2. copy directory into container 3. apt install packages 4. environment setting 5. run commend ```dockerfile FROM python:3.8.10-slim RUN mkdir /root/app WORKDIR /root/app ADD . /root/app RUN apt update && apt -y install vim RUN pip install --upgrade pip && apt update RUN pip install -r requirements.txt CMD ["gunicorn", "--bind", "0.0.0.0:8889", "--timeout", "500", "main:app"] ``` * Registry: 一個存放images的地方: docker hub、Harbor、自建的repository (deamon.json需加入insecure-registries) * 常用指令 ``` $ docker images # 列出host已經pull下來的images $ docker rmi <image_name/id> # 刪除image $ docker pull <path+image_name+:version> $ docker push <path+image_name+:version> ``` * **Network** * **Volumn** * **Container** 一個runnable inastance of an image,預設每個container是獨立於其他instance和host machine的,可以控制它的network、volumn與其他container或host共用
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up