Docker 通過提供輕量級、可移植且高效的解決方案,簡化了軟件開發和部署。“docker build”命令是 Docker 鏡像創建過程的核心。本文將探討 Docker 構建命令、用法以及 Docker 構建的優化。
Docker 構建有什么作用?
Docker build 是一個命令行界面 CLI命令,允許你根據 Dockerfile 中指定的指令構建 Docker鏡像。它使鏡像創建過程自動化,確保了一致性和可重復性。
Docker 構建是如何工作的?
Docker 構建通過執行 Dockerfile 中的指令序列來創建鏡像。這些指令包括復制文件、安裝依賴項和執行命令等操作。當運行?docker build?命令時,Docker 守護進程會逐條讀取并執行 Dockerfile 中的指令,每條指令都會生成一個輕量級的只讀層。這些層被堆疊起來,形成最終的鏡像。
為了提高效率,Docker 會緩存那些自上次構建以來未發生變化的層,這樣在后續的構建中就可以直接使用這些緩存層,而無需重新構建,從而大幅縮短構建時間。
完成所有指令后,Docker 將生成一個包含應用程序及其所有依賴項的最終鏡像,這個鏡像隨時準備被用來運行容器。
安裝 Docker
安裝必要的依賴包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
添加 Docker 的官方 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
添加 Docker APT 源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
?更新軟件包索引
sudo apt-get update
安裝 Docker CE (社區版)
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
驗證 Docker 是否安裝成功
sudo docker --version
Docker version 24.0.5, build 12345678
?啟動并設置 Docker 開機自啟
sudo systemctl start docker
sudo systemctl enable docker
將當前用戶加入 docker 用戶組
默認情況下,只有 root 用戶或 docker 用戶組的成員才能運行 Docker 命令。如果您希望當前用戶無需使用 sudo 即可運行 Docker,可以將用戶加入 docker 用戶組:
sudo usermod -aG docker $USER
然后重新登錄終端或重啟系統以使更改生效。
檢查 Docker 服務是否正在運行:
sudo reboot #重啟
sudo systemctl status docker
測試 Docker
docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.
- 該命令會從 Docker Hub 上拉取?
hello-world
?鏡像,并在容器中運行。 - 如果成功,會在終端中看到一段歡迎信息。
安裝docker-compose
docker-compose 是一個用于定義和運行多容器 Docker 應用程序的工具。通過 docker-compose,你可以使用 YAML 文件來配置應用程序的服務、網絡和卷。它簡化了復雜應用的配置和啟動過程,使得管理和部署多個相互依賴的容器變得非常簡單。
# 刪除舊版本(如果有)
sudo rm -f /usr/local/bin/docker-compose#離線安裝
wget -c --no-check-certificate https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-Linux-x86_64
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose# 或者使用阿里云鏡像源下載
sudo curl -L "https://mirrors.aliyun.com/docker-toolbox/linux/compose/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 檢查下載內容是否為二進制文件
file /usr/local/bin/docker-compose
#/usr/local/bin/docker-compose: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=..., not stripped# 賦予執行權限
sudo chmod +x /usr/local/bin/docker-compose# 驗證安裝
docker-compose --version
在docker-compose.yml文件所在目錄,運行容器服務
docker-compose up
docker-compose.yml 文件詳解
docker-compose.yml 文件用于定義服務、網絡和卷。這個文件使用 YAML 格式編寫,并且可以通過它來描述多個容器之間的關系以及它們的配置。下面是一個詳細的解釋,幫助你理解如何編寫和使用 docker-compose.yml 文件。
version: '3.4'
services:project:image: shanghai.aliyuncs.com/hyperf-work/skeleton:hyperf-7.4container_name: test-apirestart: alwaysports:- "9005:8080"volumes:- ./:/wwwentrypoint: ["php", "/www/bin/hyperf.php", "start"]#entrypoint: ["sleep", "3600"]networks:- manage-v3-apinetworks:test-api:driver: bridge
- image: 使用的鏡像地址,這里是阿里云的一個私有鏡像倉庫中的 Hyperf 項目鏡像。
- container_name: 容器名稱,命名為 test-api。
- build: 如果需要從 Dockerfile 構建鏡像,可以指定路徑。
- depends_on: 表示依賴的服務,但請注意這不會等待直到依賴服務完全啟動。
- restart: 設置容器重啟策略為 always,即無論退出狀態如何,Docker 都會自動重啟該容器。
- environment: 設置環境變量。
- ports: 端口映射,將主機的 9005 端口映射到容器的 8080 端口。可以使用9005或者8080訪問
- volumes: 卷掛載,將當前目錄(.)掛載到容器內的 /www 目錄。
- command: 覆蓋默認的命令
- entrypoint: 容器啟動時執行的命令,這里是啟動 Hyperf 應用。
- networks: 容器連接的網絡,指定為 test-api 網絡。
- test-api: 定義了一個名為 test-api 的自定義網絡,使用 bridge 網絡驅動。