什麼是docker?
Docker 是一個開源的容器化平臺,可以讓用戶將應用程序及其依賴打包到一個可移植的容器中,運行在獨立於系統的環境中,從而避免對系統本身產生影響。這些容器可以運行在任何支持 Docker 的環境中,無論是本地開發機、雲服務器,還是其他操作系統。
可以理解為Python 虛擬環境,但它們兩個隔離方式不同。
Python 虛擬環境 主要用於隔離 Python 依賴庫,以避免不同項目之間的庫衝突。Python 虛擬環境僅限於 Python 環境中的依賴,不影響系統級的庫或應用程序
Docker 則是一種更為全面的隔離技術,它通過容器化將應用及其所有依賴(不僅限於 Python)封裝起來,能夠在不同的系統環境中運行
Docker 的主要優點:
輕量化:容器共享主機操作系統內核,佔用資源少。
快速啟動:容器啟動速度通常在秒級。
一致性:無論在開發、測試還是生產環境中,容器的運行結果完全一致。
強大的生態系統:通過 Docker Hub,用戶可以獲取大量預構建的鏡像。(有能力解決網絡問題的話)
一個簡單的例子
假設你有兩個應用程序,分別依賴 MySQL 5.7 和 MySQL 8.0
應用 A 需要 MySQL 5.7,而我們系統也只有這個版本。
應用 B 則依賴 MySQL 8.0,並且需要使用新版本的特性。
用傳統方法嘗試直接在系統中安裝多個版本的 MySQL,"可能"會遇到版本衝突的問題。降級或升級 MySQL 可能會影響到整個服務器上的其他服務,比較的麻煩,需要一定的動手能力(前提是你有很強的解決問題的能力或者擁有折騰的心)
而如果用docker,可以為應用 B 創建一個的容器,並在這個容器中運行 MySQL 5.7,從而確保不同版本的 MySQL 互不干擾這種方式完全隔離了每個版本,避免了全局版本衝突
安裝docker
安裝必要的依賴包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
由於我不知道國內源有沒有被限制,這裡添加Docker 的官方 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加 Docker 倉庫
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
安裝 Docker
sudo apt install docker-ce
啟動並啟用 Docker 服務
sudo systemctl start docker
sudo systemctl enable docker
演示
我的電腦沒有安裝 Python,但我想通過 Docker 來運行 Flask 應用
這是我的目錄:
內容:
Dockerfile文件
app.py
這個requirement是我隨便在網上抄的
構建 一個Docker 鏡像
sudo docker build -t flask .
docker build : Docker 的一個命令,用來根據當前目錄中的 Dockerfile 創建(構建)一個 Docker 鏡像。這個命令會執行 Dockerfile 中定義的步驟(例如安裝依賴、複製文件等),然後生成一個鏡像
-t flask : 給鏡像命名為 flask
. : 指定當前目錄作為構建上下文,Docker 會在這個目錄查找 Dockerfile 和其他文件
構建成功
運行 Docker 容器
sudo docker run -d -p 5000:5000 flask
run : 運行容器,根據後面怎麼定義
-d : 將容器後臺運行著,不用麻煩手動再創一個終端
-p 5000:5000:將容器的 5000 端口映射到宿主機的 5000 端口
flask : 鏡像的名稱
接下來我們局域網訪問flask,輸入服務器ip和端口5000