Ubuntu 20安裝Docker全攻略:3分鐘避坑指南+版本選擇技巧
sudo apt remove -y docker docker-engine docker.io containerd runc
2.1 通過官方倉庫安裝Docker Engine
我的首選安裝方式是從Docker官方倉庫獲取最新穩(wěn)定版本。先給系統(tǒng)添加可信密鑰環(huán),執(zhí)行curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
時(shí),注意終端不能出現(xiàn)gpg: no valid OpenPGP data found
的警告。遇到網(wǎng)絡(luò)波動(dòng)導(dǎo)致密鑰下載失敗的情況,可以改用sudo mkdir -p /etc/apt/keyrings && curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
通過國內(nèi)鏡像源加速。
配置軟件源時(shí)需精準(zhǔn)匹配系統(tǒng)代號(hào),Ubuntu 20.04對(duì)應(yīng)的代號(hào)是focal
。建立倉庫鏈接的命令echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list
要逐字核對(duì),曾經(jīng)有運(yùn)維同事把signed-by
參數(shù)寫成sign-by
導(dǎo)致后續(xù)安裝報(bào)錯(cuò)。更新源清單后運(yùn)行sudo apt update
,應(yīng)該在輸出列表里看到docker-ce-stable
分支的新條目。
2.2 使用deb包手動(dòng)安裝方式
當(dāng)服務(wù)器無法連接外網(wǎng)時(shí),手動(dòng)安裝deb包成為救命稻草。先到https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/ 找特定版本包,比如docker-ce_24.0.7-1~ubuntu.20.04~focal_amd64.deb。用wget
下載到本地后,執(zhí)行sudo dpkg -i docker-ce*.deb
時(shí)經(jīng)常會(huì)出現(xiàn)依賴缺失的紅字報(bào)錯(cuò),這時(shí)候需要提前備好containerd、docker-cli等依賴包的deb文件。
手動(dòng)安裝更適合需要固定特定版本的生產(chǎn)環(huán)境。我有次在金融系統(tǒng)部署時(shí),客戶指定必須使用docker-ce=5:20.10.23~3-0~ubuntu-focal版本,只能通過手動(dòng)下載30多個(gè)關(guān)聯(lián)deb包逐個(gè)安裝。記得用apt-cache depends docker-ce
查看完整依賴樹,避免漏裝關(guān)鍵組件導(dǎo)致服務(wù)異常啟動(dòng)。
2.3 Docker CE與Docker Engine版本選擇指南
版本命名規(guī)則變化曾讓我栽過跟頭。2017年后Docker CE(社區(qū)版)與EE(企業(yè)版)的劃分已調(diào)整為Docker Engine單一品牌,但apt倉庫里仍保留docker-ce
的包名。通過apt list -a docker-ce
能看到類似24.0.7-1~ubuntu.20.04~focal的版本號(hào)結(jié)構(gòu),其中5:24.0.7
的5代表包版本序列,比單純24.0.7更易追蹤更新路徑。
生產(chǎn)環(huán)境建議鎖定次要版本,比如sudo apt install docker-ce=5:24.0.7-1~ubuntu.20.04~focal
避免自動(dòng)升級(jí)到新主版本。測試環(huán)境可用docker-ce-cli
與docker-ce
組合安裝最新版,但要注意containerd版本兼容性——有次升級(jí)后容器無法啟動(dòng),回退containerd到1.6.9版本才解決。
3.1 運(yùn)行測試容器驗(yàn)證基礎(chǔ)功能
裝完Docker后的第一個(gè)動(dòng)作就是跑個(gè)hello-world容器試試水。在終端敲入sudo docker run hello-world
,當(dāng)看到那只熟悉的鯨魚圖案和"Hello from Docker!"的歡迎信息,懸著的心才算放下。有次在客戶現(xiàn)場遇到鏡像拉取超時(shí),發(fā)現(xiàn)是DNS配置問題,臨時(shí)改用sudo docker run --dns 8.8.8.8 hello-world
才成功加載測試鏡像。
新手常會(huì)遇到權(quán)限拒絕的報(bào)錯(cuò),表現(xiàn)為"Got permission denied while trying to connect to the Docker daemon socket"。這時(shí)候需要把當(dāng)前用戶加入docker組,執(zhí)行sudo usermod -aG docker $USER
后重新登錄系統(tǒng)。記得用docker run --rm alpine echo "導(dǎo)管測試"
驗(yàn)證中文環(huán)境支持,避免后續(xù)開發(fā)時(shí)容器內(nèi)出現(xiàn)亂碼。
3.2 檢查Docker服務(wù)運(yùn)行狀態(tài)
服務(wù)是否正常啟動(dòng)直接決定后續(xù)操作成敗。運(yùn)行sudo systemctl status docker
時(shí),關(guān)注輸出中的"Active: active (running)"綠色標(biāo)識(shí)。有次凌晨升級(jí)內(nèi)核后服務(wù)異常,發(fā)現(xiàn)狀態(tài)顯示"inactive (dead)",用journalctl -u docker.service --since "2024-01-01 00:00:00"
查日志才發(fā)現(xiàn)是cgroup驅(qū)動(dòng)不兼容。
配置開機(jī)自啟是生產(chǎn)環(huán)境必備操作,執(zhí)行sudo systemctl enable docker
會(huì)創(chuàng)建符號(hào)鏈接到systemd啟動(dòng)目錄。測試環(huán)境中偶爾需要重啟服務(wù),掌握sudo systemctl restart docker
比直接reboot服務(wù)器更優(yōu)雅。遇到端口占用導(dǎo)致服務(wù)啟動(dòng)失敗時(shí),netstat -tulnp | grep 2375
能快速定位沖突進(jìn)程。
3.3 查看版本信息確認(rèn)組件完整性
版本一致性檢查是部署后的重要環(huán)節(jié)。執(zhí)行docker version
會(huì)分兩欄顯示Client和Server的版本信息,特別注意兩者是否匹配。曾遇到客戶端24.0.7連接服務(wù)端23.0.1的情況,導(dǎo)致部分新命令無法執(zhí)行,需要重新用sudo apt install --only-upgrade docker-ce
對(duì)齊版本。
docker info
輸出的信息量更大,包含存儲(chǔ)驅(qū)動(dòng)、鏡像數(shù)量、運(yùn)行容器等關(guān)鍵數(shù)據(jù)。重點(diǎn)關(guān)注"Server Version"和"Containerd Version"的兼容性,有次升級(jí)后containerd從1.6.9跳到1.7.3導(dǎo)致舊容器崩潰,回退時(shí)需要用sudo apt install containerd.io=1.6.9-1
指定版本。通過docker-compose --version
和docker buildx version
還能驗(yàn)證擴(kuò)展組件的完整性,避免構(gòu)建工具鏈缺失。
4.1 配置非root用戶docker權(quán)限
每次操作都要加sudo實(shí)在太麻煩。我習(xí)慣安裝后立即把常用賬號(hào)加入docker組,執(zhí)行sudo usermod -aG docker $USER
這條命令。新用戶在終端看到"docker: command not found"提示別慌,注銷重新登錄就能生效。上次在團(tuán)隊(duì)服務(wù)器配置時(shí)忘做這步,結(jié)果開發(fā)同事的CI/CD流水線一直報(bào)權(quán)限錯(cuò)誤。
真正的權(quán)限問題藏在組權(quán)限里。檢查/etc/group文件確認(rèn)用戶名已出現(xiàn)在docker組條目中,有時(shí)需要手動(dòng)激活組變更newgrp docker
。生產(chǎn)環(huán)境我會(huì)用docker run --user 1001
指定容器用戶ID,避免直接使用root賬戶運(yùn)行容器,這個(gè)習(xí)慣幫我攔住了好幾次安全漏洞。
4.2 設(shè)置國內(nèi)鏡像加速器
拉取鏡像卡在90%進(jìn)度太折磨人。我首選阿里云鏡像加速器,登錄容器鏡像服務(wù)控制臺(tái)就能拿到專屬加速地址。修改/etc/docker/daemon.json時(shí)記得保留原有配置,完整寫法是{"registry-mirrors":["https://xxxx.mirror.aliyuncs.com"]}
。有次誤刪了逗號(hào)導(dǎo)致服務(wù)啟動(dòng)失敗,幸虧提前備份了原文件。
網(wǎng)易鏡像源也很穩(wěn)定,地址填https://hub-mirror.c.163.com
就行。配置完成后必須執(zhí)行sudo systemctl daemon-reload && sudo systemctl restart docker
雙重生效。測試時(shí)用docker pull ubuntu
觀察下載速度,從原先的10KB/s飆升到8MB/s的感覺特別爽。定期運(yùn)行docker info | grep Mirrors
還能驗(yàn)證配置是否持續(xù)生效。
4.3 Docker服務(wù)啟停與自動(dòng)啟動(dòng)設(shè)置
服務(wù)器維護(hù)時(shí)免不了操作服務(wù)狀態(tài)。重啟容器引擎就用sudo systemctl restart docker
,比起直接重啟主機(jī)優(yōu)雅得多。臨時(shí)故障排查我會(huì)先sudo systemctl stop docker
停服務(wù),修完再sudo systemctl start docker
啟動(dòng)。有次磁盤爆滿導(dǎo)致服務(wù)異常,就是靠這套操作保住了正在運(yùn)行的數(shù)據(jù)庫容器。
生產(chǎn)環(huán)境必須設(shè)置開機(jī)自啟。執(zhí)行sudo systemctl enable docker
創(chuàng)建systemd鏈接,重啟后用systemctl is-enabled docker
確認(rèn)返回"enabled"。測試服務(wù)器相反,我會(huì)特意加sudo systemctl disable docker
防止自動(dòng)啟動(dòng)。突發(fā)斷電后最怕服務(wù)沒起來,所以每次維護(hù)完都順手敲sudo systemctl status docker | grep Active
看綠色running標(biāo)識(shí)。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由皇冠云發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。