# 使用 Docker 筆記 ## 完整的 Docker 卸載指南 ### 步驟 1:識別已安裝的 Docker 套件 執行以下命令以列出已安裝的 Docker 套件: ```bash dpkg -l | grep -i docker ``` ### 步驟 2:卸載 Docker 使用以下命令來完全卸載 Docker: ```bash sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli docker-compose-plugin sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce docker-compose-plugin ``` **注意:** 這些命令不會刪除映像、容器、卷或使用者創建的配置文件。 ### 步驟 3:刪除 Docker 映像、容器和卷 如果希望刪除所有 Docker 映像、容器和卷,執行以下命令: ```bash sudo rm -rf /var/lib/docker /etc/docker sudo rm /etc/apparmor.d/docker sudo groupdel docker sudo rm -rf /var/run/docker.sock sudo rm -rf /var/lib/containerd sudo rm -r ~/.docker ``` 執行這些命令後,Docker 會完全從系統中移除。 --- ## Docker 安裝 ### 1. 設定 Docker 的 apt 源 首先,添加 Docker 官方 GPG 金鑰: ```bash # 安裝所需的證書與工具 $ sudo apt-get update $ sudo apt-get install ca-certificates curl # 創建 GPG 金鑰存儲目錄 $ sudo install -m 0755 -d /etc/apt/keyrings # 下載並安裝 Docker 的 GPG 金鑰 $ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc # 給 GPG 金鑰設置訪問權限 $ sudo chmod a+r /etc/apt/keyrings/docker.asc ``` 接下來,將 Docker 的 apt 源添加到系統的源列表中: ```bash $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get update ``` ### 2. 安裝 Docker 相關套件 安裝 Docker 引擎及相關的命令行工具: ```bash $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` ### 3. 驗證 Docker 是否安裝成功 運行 `hello-world` 圖像來檢查 Docker 引擎是否安裝成功: ```bash $ sudo docker run hello-world ``` ### 如何使 Docker 無需使用 sudo :::info 非常建議使用,如果使用vscode docker插件,必定要使用底下命令,不用會造成插件異常 ::: 如果希望能夠不使用 `sudo` 就啟動 Docker,可以按照以下步驟操作: ```bash # 1. 創建名為 docker 的組 $ sudo groupadd docker # 2. 將當前用戶加入 docker 組 $ sudo gpasswd -a ${USER} docker # 3. 重啟 Docker 服務 $ sudo systemctl restart docker # 4. 給 /var/run/docker.sock 添加訪問和執行權限 $ sudo chmod a+rw /var/run/docker.sock # 5. 驗證:現在可以不帶 sudo 啟動 Docker ``` --- ## 常用 Docker 指令 - 查看拉取的鏡像: ```bash $ docker images ``` - 查看所有容器(包括停止的): ```bash $ docker ps -a ``` - 將正在運行的容器保存為新的鏡像: ```bash $ docker commit [OPTIONS] CONTAINER_ID [REPOSITORY[:TAG]] $ docker commit 8b0d15d4381c my_image:v1.0 ``` - 進入正在運行的容器並啟動新的終端會話: ```bash $ docker exec -it <CONTAINER_ID> /bin/bash $ docker exec -it 1f3149936998 /bin/bash ``` - 刪除已停止的容器: ```bash $ docker rm -f <CONTAINER_ID> ``` - 退出容器並讓容器繼續運行: 使用 `Ctrl + P + Q` 來退出容器的交互模式,容器會繼續在後台運行。 - 刪除鏡像: ```bash $ docker rmi -f IMAGE_ID # 例如:$ docker rmi -f d2c94e258dcb ``` - 使用 `docker run` 啟動容器: ```bash docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] ``` ### 參數解釋 - **IMAGE**:必須提供的參數,指定容器的鏡像名稱,`TAG` 用來指定鏡像的版本,默認為 `latest`。 - **OPTIONS**:可選參數,用於設置容器的運行行為。 - **COMMAND**:指定在容器內運行的命令(可選)。 - **ARG**:傳遞給 `COMMAND` 的參數。 ### 常用選項 | 參數 | 說明 | |------------------|--------------------------------------------------------| | `-d` | 容器在後台運行,不會阻塞終端(detach 模式)。 | | `-p HOST_PORT:CONTAINER_PORT` | 將容器內的端口映射到主機的端口,讓容器可被外部訪問。 | | `--name` | 指定容器名稱,否則 Docker 會隨機生成一個名稱。 | | `-v HOST_PATH:CONTAINER_PATH` | 將主機目錄掛載到容器中,實現數據共享與持久化。 | | `--rm` | 容器停止後自動刪除,不保留中間文件。 | | `-e ENV_VAR` | 設置環境變量,傳遞給容器中的應用。 | | `--network` | 設定容器的網絡模式(如 bridge、host)。 | ### 使用範例 1. **啟動一個容器:** ```bash docker run ubuntu ``` 這會啟動一個 `ubuntu` 鏡像的容器,並進入交互模式。 2. **在後台運行一個 Nginx 容器並映射端口:** ```bash docker run -d -p 8080:80 nginx ``` 這會啟動一個 `nginx` 容器,並將容器內部的 `80` 端口映射到主機的 `8080` 端口。 3. **指定容器名稱並啟用自動刪除:** ```bash docker run --rm --name my_app ubuntu echo "Hello, Docker!" ``` 容器執行完 `echo "Hello, Docker!"` 後會自動刪除。 4. **掛載主機目錄到容器中:** ```bash docker run -v /path/to/host:/path/to/container ubuntu ``` 這會將主機的 `/path/to/host` 目錄掛載到容器的 `/path/to/container` 目錄。 ### 常見應用場景 - **開發測試**:使用 `-v` 參數同步主機和容器中的文件,實現即時更新。 - **服務部署**:使用 `-p` 參數將應用的端口暴露給外部訪問。 - **批次作業**:使用 `--rm` 在容器停止後自動刪除,保持環境整潔。 ### 鏡像導出與導入 如果需要在不同機器之間傳輸 Docker 鏡像,可以使用以下命令將鏡像導出為 `.tar` 檔案,然後再將它導入到其他機器上。 #### 1. 使用 `docker save` 導出鏡像 假設要導出的鏡像名稱為 `your-image:tag`,可以使用以下命令將其保存為 `.tar` 檔案: ```bash docker save -o your-image.tar your-image:tag ``` #### 2. 傳輸或備份鏡像 導出後,你會擁有一個 `.tar` 檔案(例如 `your-image.tar`)。你可以將這個檔案傳輸到其他機器或備份。 #### 3. 在其他機器上導入鏡像 如果需要將這個鏡像檔案導入到另一台機器,可以使用以下命令: ```bash docker load -i your-image.tar ``` --- ### 範例 假設你有一個名為 `myapp:v1` 的 Docker 鏡像,並希望將它導出為 `myapp_v1.tar` 檔案: ```bash docker save -o myapp_v1.tar myapp:v1 ``` 然後,將 `myapp_v1.tar` 傳輸到另一台機器並加載它: ```bash docker load -i myapp_v1.tar ``` 在 Docker 佔滿磁碟的情況下,`/var/lib/docker` 通常是最大宗空間使用者(儲存 image、container、volume、overlay 等)。 以下是幾個安全清理與**完全刪除**的選項👇 --- ## 🧹 一、安全清理不影響運作的方式 這類指令清理無用的資源,不會刪除正在使用的容器或映像。 ```bash # 清除已停止的容器、無用的 image、volume、network sudo docker system prune -a -f --volumes ``` 說明: * `-a`:刪除所有沒用到的 image(不僅是 dangling) * `-f`:不詢問確認 * `--volumes`:連同無用的 volume 一起清掉 --- ## 🔥 二、完全清空 `/var/lib/docker` ⚠️ **這會移除所有 Docker 資料**(包含容器、映像、volume、設定)。請先確認不需要保留任何內容。 ```bash sudo systemctl stop docker sudo rm -rf /var/lib/docker sudo systemctl start docker ``` 如果你也有使用 `containerd`,可以一併清除: ```bash sudo systemctl stop containerd sudo rm -rf /var/lib/containerd sudo systemctl start containerd ``` --- ## 📊 三、查看哪些佔空間最多 ```bash sudo du -h --max-depth=1 /var/lib/docker | sort -hr | head -n 10 ``` 可以讓你知道是 `overlay2`、`containers` 還是 `volumes` 佔最多空間。 --- ## ✅ 建議組合腳本(安全清理) 若你只是想釋放空間又不想破壞系統,可以用這段: ```bash sudo docker system prune -a -f --volumes sudo du -sh /var/lib/docker ``` ---
×
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