docker是一款用于開發部署和運行容器化平臺,能將應用及其依賴打包成輕量級、可移植的容器,實現一次構建,隨處運行。docker是cs架構程序(客戶端和服務端),docker客戶端向docker守護進程發送請求,docker守護進程返回請求結果 。docker守護進程管理著docker里面的容器,docker客戶端可以是本地也可以是遠程,通過docker客戶端訪問docker守護進程管理著docker容器。鏡像是 docker生命周期中的構建或打包階段,而容器則是啟動或者執行階段,容器基于鏡像啟動,一旦容器啟動完成后,我們就可以登錄到容器中安裝自己需的軟件或服務。
注冊中心
docker用Registry(注冊中心)來保存用戶構建的鏡像。Registry分為公共和私有兩種,docker公司運營公共的Registry叫做docker hub 。用戶可以在docker hub注冊賬號,分享并保存自己鏡像(說明 ?在docker hub下載鏡像 非常慢,可以自己構建 私有的registry),網址是https:hub.docker.com
docker 官方建議在ubuntu中安裝,因為docker是基于ubuntu發布的,一般docker出現的問題ubuntu 中是最新更新或打補丁的,很多版本的centos中是不支持更新最新的一些補丁 包的。如果要在centos中使用,建議在centos7.x以上的版本中使用。低于這個版本需要安裝其他很的環境并且docker很多的補丁不支持更新。
1 、docker安裝
安裝前先更新系統所有的包索引sudo apt-get update? ?和sudo apt-get update -y
1、安裝必要依賴
安裝允許apt
通過 HTTPS 使用倉庫的包:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
2、卸載舊版本
若系統中已存在 Docker 的舊版本,需先將其卸載
sudo apt remove docker docker-engine docker.io containerd runc
測試過上面的命令刪除不全,改成如下刪除全部docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
?這條命令會卸載 Docker 及其相關組件,并清除配置文件等信息。卸載完成后,可通過再次執行?docker - v
?確認是否卸載成功。如果還存在殘留文件,可手動檢查并刪除?/var/lib/docker/
?目錄(該目錄存儲 Docker 的鏡像、容器等數據 ):
sudo rm -rf /var/lib/docker/
3、添加 Docker 官方 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4、添加 Docker 官方倉庫
echo "deb [arch=$(dpkg --print-architecture) 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
?5、安裝 Docker 引擎(安裝docker)
更新apt
包索引,然后安裝最新版本的 Docker 引擎、containerd 和 Docker Compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
?安裝操作和查看docker版本號
6、設置ustc的鏡像?
?默認從國外下載的,比較慢或下載失敗,現在設置為國內下載,設置ustc的鏡像,加快下載速度。 如果沒有目錄就創建,有就打開并創建daemon.json文件并寫入下面內容
mkdir -p /etc/docker
vi /etc/docker/daemon.json
daemon.json內容如下:
{ ? ? ? ? "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }
7、權限問題造成無法使用docker錯誤提示及解決方法如下:
錯誤提示
Server:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.49/info": dial unix /var/run/docker.sock: connect: permission denied
解決方法:
提示 “permission denied” 表明權限不足 。docker info
?命令用于獲取 Docker 系統信息,執行時需與 Docker 守護進程通信,而?/var/run/docker.sock
?是通信的套接字文件。當前用戶沒有該文件的訪問權限,所以報錯。解決方法如下:
- 添加用戶到 docker 組:執行
sudo usermod -aG docker $USER
?,將當前用戶添加到docker
組。添加后需重新登錄或執行newgrp docker
?使權限生效。 - 修改文件權限(不推薦):使用
sudo chmod 666 /var/run/docker.sock
?賦予所有用戶讀寫權限,但會降低安全性,僅適用于測試環境。
具體如下:?
以非 root 用戶運行 Docker(可選但推薦)
默認情況下,運行 Docker 命令需要sudo
權限。你可以創建一個名為docker
的用戶組,并將當前用戶添加到該組中,從而避免每次都輸入sudo
:
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker # 刷新當前會話的用戶組
添加用戶到docker
組后,注銷并重新登錄,或者重啟系統,之后就可以直接運行 Docker 命令了。?
?8、無法啟動docker
?正如提示信息所說,執行?journalctl -xe
?命令,系統會展示與 Docker 服務啟動失敗相關的詳細日志內容。通過日志能明確具體是哪個依賴任務出問題,比如是某個服務未正常啟動、文件加載失敗還是權限問題等 ,進而針對性解決。
執行?journalctl -xe
?命令,查看到失敗相關詳細 日志內容
ubuntu@VM-24-17-ubuntu:/etc/docker$ journalctl -xe
May 28 11:51:32 VM-24-17-ubuntu usermod[2061214]: add 'ubuntu' to group 'docker'
May 28 11:51:32 VM-24-17-ubuntu usermod[2061214]: add 'ubuntu' to shadow group 'docker'
May 28 11:51:32 VM-24-17-ubuntu sudo[2061212]: pam_unix(sudo:session): session closed for user root
May 28 11:51:41 VM-24-17-ubuntu newgrp[2061266]: user 'ubuntu' (login 'ubuntu' on pts/1) switched to group 'docker'
May 28 11:51:51 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=123.160.221.175 DST=10.1.24>
May 28 11:52:01 VM-24-17-ubuntu CRON[2061397]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
May 28 11:52:01 VM-24-17-ubuntu CRON[2061398]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/n>
May 28 11:52:01 VM-24-17-ubuntu CRON[2061397]: pam_unix(cron:session): session closed for user root
May 28 11:52:12 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=106.75.155.108 DST=10.1.24.>
May 28 11:52:20 VM-24-17-ubuntu sudo[2061503]: ubuntu : TTY=pts/1 ; PWD=/etc/docker ; USER=root ; COMMAND=/usr/bin/systemctl start docker
May 28 11:52:20 VM-24-17-ubuntu sudo[2061503]: pam_unix(sudo:session): session opened for user root(uid=0) by ubuntu(uid=1000)
May 28 11:52:20 VM-24-17-ubuntu systemd[1]: docker.socket: Socket service docker.service already active, refusing.
May 28 11:52:20 VM-24-17-ubuntu systemd[1]: Failed to listen on Docker Socket for the API.
?? Subject: A start job for unit docker.socket has failed
?? Defined-By: systemd
?? Support: http://www.ubuntu.com/support
??
?? A start job for unit docker.socket has finished with a failure.
??
?? The job identifier is 86592 and the job result is failed.
May 28 11:52:20 VM-24-17-ubuntu systemd[1]: Dependency failed for Docker Application Container Engine.
?? Subject: A start job for unit docker.service has failed
?? Defined-By: systemd
?? Support: http://www.ubuntu.com/support
??
?? A start job for unit docker.service has finished with a failure.
??
?? The job identifier is 86516 and the job result is dependency.
May 28 11:52:20 VM-24-17-ubuntu systemd[1]: docker.service: Job docker.service/start failed with result 'dependency'.
May 28 11:52:20 VM-24-17-ubuntu sudo[2061503]: pam_unix(sudo:session): session closed for user root
May 28 11:52:29 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=185.156.73.159 DST=10.1.24.>
May 28 11:52:49 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=117.219.97.227 DST=10.1.24.>
May 28 11:53:01 VM-24-17-ubuntu CRON[2061700]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
May 28 11:53:01 VM-24-17-ubuntu CRON[2061701]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/n>
May 28 11:53:01 VM-24-17-ubuntu CRON[2061700]: pam_unix(cron:session): session closed for user root
May 28 11:53:13 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=83.222.191.46 DST=10.1.24.1>
May 28 11:53:28 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=111.7.96.132 DST=10.1.24.17>
May 28 11:53:52 VM-24-17-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:6f:a7:68:fe:ee:0e:00:4d:44:08:00 SRC=92.63.197.177 DST=10.1.24.1>
May 28 11:54:01 VM-24-17-ubuntu CRON[2062000]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
May 28 11:54:01 VM-24-17-ubuntu CRON[2062001]: (root) CMD (flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/n>
May 28 11:54:01 VM-24-17-ubuntu CRON[2062000]: pam_unix(cron:session): session closed for user root
May 28 11:54:09 VM-24-17-ubuntu ke
如上截圖信息錯誤的,解決方法就是刪除完 docker,重新安裝docker就完美解決了?
9、啟動 Docker 服務
sudo systemctl start docker
?設置 Docker 開機自啟:
sudo systemctl enable docker
?停止 Docker 服務
sudo systemctl stop docker
?重啟 Docker 服務
sudo systemctl restart docker
查看docker運行狀態?
sudo systemctl status docker
- 狀態標識:輸出中明確顯示?
Active: active (running)
?,這表明 Docker 服務處于活躍且正在運行的狀態 。 - 運行時間:有?
since wed 2025-05-28 12:43:49 CST
?,說明從該時間點起 Docker 服務就已處于運行狀態 。 - 主進程信息:
Main PID: 2129132 (dockerd)
?表示 Docker 守護進程(dockerd
?)已正常啟動并獲取到了主進程 ID 。
檢查看開機自啟是否設置成功
systemctl list - enabled - units | grep docker
?
如果出現 “Unknown command verb” 報錯,大概率是你系統上的?systemctl
?版本較舊,不支持這些命令用法。你可以嘗試下面替代方法來判斷 Docker 開機自啟狀態:
可使用這個查看systemctl list--enabled--units | grep docker?
你執行的命令報錯 “Unknown command verb list--enabled--units” ,說明命令未被正確識別,無法據此判斷 Docker 開機自啟是否設置成功 。可能是系統的?systemctl
?版本較老,不支持這種格式。建議按前面提到的替代方法,如查看?/lib/systemd/system/docker.service
?文件中?Install
?段配置 ,或檢查?/etc/systemd/system/
?下是否有指向?docker.service
?的軟鏈接來確定。?
打開 vi?/lib/systemd/system/docker.service 看到如下截圖所示,是添加成功的