Docker (Ubuntu & Mac OS)
Docker 簡單介紹
容器 vs.虛擬機器
傳統的虛擬機器(Virtual Machine)透過虛擬化技術 vSphere 等,以作業系統為底建立出獨立的執行環境。
以下兩張圖是傳統虛擬機器與 Docker 的比較,虛擬機器(VM)除了包含程式與函式庫之外,還要加上整個 Guest OS。
而 Docker 則使用 Container 技術,將應用程式所需的所有程式碼、函式庫及環境設定檔包裝起來後,建立以應用程式為中心的獨立的執行環境,相對傳統的虛擬機器也輕便(具可攜性且建置快速)許多。
https://docs.docker.com/get-started/#containers-vs-virtual-machines
Docker 架構
Docker 的 Image 是一個可以獨立執行的輕量級套件,其包含所有執行程式所需要的函式庫、環境變數與設定檔等,而 Container 則是一個 Image 的執行實體,就是將 Image 載入至記憶體中執行之後的環境。
預設的情況下,Container 是一個與 host 機器環境分開的獨立執行環境,但其程式卻可以在原生 host 機器的核心中運行,因此 Docker 的執行效能會比傳統虛擬機器更好。
安裝 Docker CE
移除舊版 Docker
$ sudo apt-get remove docker docker-engine docker.io
設定資源庫
$ sudo apt-get update$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
驗證指紋是否正確 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
$ sudo apt-key fingerprint 0EBFCD88
查看你的 Ubuntu 版本
$ lsb_release -a$ lsb_release -cs
按照版本設置穩定的資源庫
- amd64
$ sudo add-apt-repository \
“deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable”
- armhf
$ sudo add-apt-repository \
“deb [arch=armhf] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable”
- s390x
$ sudo add-apt-repository \
“deb [arch=s390x] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable”
更新並安裝 Docker CE
$ sudo apt-get update$ sudo apt-get install docker-ce
安裝特定版本的 Docker CE
$ apt-cache madison docker-ce$ sudo apt-get install docker-ce=<VERSION>
確認 Docker 版本
$ docker version
確認可以執行
$ sudo docker run hello-world
使用非 root 用戶管理 Docker
創建群組並新增用戶至群組
$ sudo groupadd docker$ sudo usermod -aG docker $USER
確認可以不用使用 sudo 執行
$ docker run hello-world
設定開機啟動 Docker
RHEL, CentOS, Fedora, Ubuntu 16.04 及以上:
$ sudo systemctl enable docker
- 禁用開機啟動
$ sudo systemctl disable docker
Ubuntu 14.10 以下會自動配置在開機時啟動 upstart :
- 禁用開機啟動
$ echo manual | sudo tee /etc/init/docker.override
chkconfig
$ sudo chkconfig docker on
移除 Docker CE
$ sudo apt-get purge docker-ce
刪除所有 Images、Containers 和 Volumes
$ sudo rm -rf /var/lib/docker
Dockerfile
Docker 容器內的各種系統資源(例如儲存、網路等)都是抽象的,我們需要自行定義內部抽象資源與外部實體資源的對應關係,這些設定都寫在 Dockerfile
的設定檔中。
首先建立一個檔名為 Dockerfile
的文字檔:
# 使用官方的 Python 執行環境作為基本的 Docker 影像
FROM python:2.7-slim
# 設定工作目錄為 /app
WORKDIR /app
# 複製目前目錄下的內容,放進 Docker 容器中的 /app
ADD . /app
# 安裝 requirements.txt 中所列的必要套件
RUN pip install -r requirements.txt
# 讓 80 連接埠可以從 Docker 容器外部存取
EXPOSE 80
# 定義環境變數
ENV NAME World
# 當 Docker 容器啟動時,自動執行 app.py
CMD ["python", "app.py"]
requirements.txt
Flask
Redis
Docker 基本指令
啟動 Docker 虛擬容器環境
docker run
列出所有 Docker 容器
docker ps
停止 Docker 容器
docker stop DOCKER_ID
重新啟動 Docker 容器
docker restart DOCKER_ID
暫停 Docker 容器
docker pause DOCKER_ID
恢復暫停的 Docker 容器
docker unpause DOCKER_ID
參考資料
https://github.com/twtrubiks/docker-tutorial
https://blog.techbridge.cc/2018/03/17/docker-build-nginx-tutorial/