前言
在雲計算和軟件開發領域,Docker就像“輕量級的數字集裝箱”,能把應用和依賴打包成標準化單元,解決“在我電腦上能跑,在你電腦上跑不起來”的痛點。今天就來分享一下Docker的基礎概念和一些實操命令。
一、Docker是什麼?
1. Docker——一個“輕量級的數字集裝箱”
Docker是一款開源的容器化平台,簡單説就是“把應用程序和它需要的環境(比如庫、配置、依賴)打包在一起”,形成一個獨立的“容器”。就像海運中的集裝箱,不管用什麼船運,裏面的貨物(應用)和包裝(環境)都不變,能在任何支持Docker的平台上穩定運行。
和傳統虛擬機(比如VMware)不同,Docker容器不用模擬完整的操作系統,只共享主機的內核,啓動快、佔用資源少——一個主機能跑上百個Docker容器,卻很難同時跑幾十個虛擬機。
2. Docker有什麼用?
- 環境一致性:開發時在自己電腦上配置好環境,打包成容器後,測試、生產環境直接用這個容器,不用再反覆調試“為什麼這裏報錯”,避免“我這能跑”,“你那跑不了”的尷尬;
- 資源高效利用:容器啓動快(秒級啓動)、佔用內存少,比虛擬機更輕量化,適合需要大量部署應用的場景(比如電商平台的多服務架構);
- 簡化部署與遷移:一個容器可以輕鬆部署到Linux、Windows、macOS,甚至雲服務器上,遷移時不用重新配置環境,真正實現“一次打包,到處運行”。
3. Docker適用的典型場景
- 軟件開發與測試:開發團隊統一使用Docker容器,確保每個人的開發環境一致,測試時直接用開發環境的容器,減少環境差異導致的bug;
- 微服務架構部署:比如電商平台的“用户服務”“訂單服務”“支付服務”,每個服務打包成一個容器,獨立部署、升級,某一個服務故障不會影響整體;
- 持續集成/持續部署(CI/CD):在自動化流程中,用Docker容器打包應用,自動完成測試、構建、部署,提高開發效率;
- 單機多應用部署:個人開發者在一台服務器上,用Docker分別部署博客、小程序後台、數據分析工具,各應用互不干擾,管理更清晰。
二、Docker的基礎
在學命令前,先認識Docker的3個核心組件,就像學開車前要知道方向盤、油門、剎車的作用:
- 鏡像(Image):容器的“模板”,比如“ubuntu鏡像”“nginx鏡像”,包含了操作系統或應用的基礎文件。用同一個鏡像能做出多個相同的容器;
- 容器(Container):鏡像運行後的實例,是獨立的運行單元。可以啓動、停止、刪除,每個容器都是隔離的,不會互相影響;
- 倉庫(Repository):存放鏡像的地方,比如Docker官方倉庫(Docker Hub),裏面有各種現成的鏡像(ubuntu、nginx、mysql等),可以直接下載使用,就像“軟件應用商店”。
三、Docker容器常用命令
1. 查看Docker命令幫助
Docker客户端命令很豐富,想了解某個命令的用法,用docker command --help就能查看詳細説明,比如想知道docker stats(查看容器資源佔用)怎麼用:
$ docker stats --help
執行後會顯示docker stats的參數、用法示例,遇到不懂的命令,這招總能幫上忙。
2. 下載鏡像:獲取容器“模板”
如果本地沒有需要的鏡像(比如ubuntu鏡像),用docker pull命令從倉庫下載,就像從應用商店下載軟件:
$ docker pull ubuntu
命令執行後,會自動下載最新版本的ubuntu鏡像,下載完成後,就能用這個鏡像啓動容器了。
3. 啓動容器:運行你的應用
啓動容器的核心命令是docker run,根據需求添加參數,常見場景如下:
場景1:交互式進入容器(適合測試)
想啓動ubuntu容器,並以命令行模式進入(比如在容器裏執行Linux命令),用-it參數(-i是交互式操作,-t是分配終端):
$ docker run -it ubuntu /bin/bash
執行後會直接進入ubuntu容器的命令行,此時輸入ls(查看目錄)、pwd(查看當前路徑)等命令,和在真實的ubuntu系統裏操作一樣。
退出容器:輸入exit並回車,容器會停止運行。
場景2:後台運行容器(適合長期服務)
大部分時候,我們希望容器在後台運行(比如部署的nginx服務),用-d參數指定後台模式,再用--name給容器起個好記的名字(比如“ubuntu-test”):
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
執行後會返回容器的ID,此時容器在後台運行,不會佔用當前終端。
4. 容器管理:啓動、停止、重啓、查看
查看所有容器(包括已停止的)
想知道當前有哪些容器,用docker ps -a(-a表示“所有”,不加-a只顯示運行中的容器):
$ docker ps -a
結果會顯示容器ID、名字、狀態(運行中/已停止)、啓動時間等信息。
啓動已停止的容器
如果容器不小心停止了(比如用exit退出的交互式容器),用docker start + 容器名/容器ID重啓:
# 比如啓動名為“ubuntu-test”的容器
$ docker start ubuntu-test
停止運行中的容器
用docker stop + 容器名/容器ID停止容器,就像關掉正在運行的軟件:
$ docker stop ubuntu-test
重啓容器
不管容器是運行中還是已停止,用docker restart能直接重啓:
$ docker restart ubuntu-test
5. 進入後台運行的容器
容器後台運行時,想進入裏面操作(比如查看日誌、修改配置),有兩種方法,推薦用第二種:
方法1:docker attach(退出會停止容器)
$ docker attach ubuntu-test
注意:用attach進入後,輸入exit退出時,容器會跟着停止,適合臨時查看,不適合長期操作。
方法2:docker exec(推薦,退出不影響容器)
用-it參數進入容器的交互式終端,退出時容器仍會後台運行,是更常用的方式:
$ docker exec -it ubuntu-test /bin/bash
進入後可以正常執行命令,想退出時輸入exit,容器會繼續在後台運行。
6. 容器導出與導入:備份與遷移
導出容器為快照文件
想把某個容器備份(比如配置好的ubuntu容器),用docker export導出為tar文件:
# 導出名為“ubuntu-test”的容器,保存為ubuntu1.tar
$ docker export ubuntu-test > ubuntu1.tar
導出的tar文件可以拷貝到其他電腦,再導入為鏡像。
從快照文件導入為鏡像
把備份的tar文件導入,生成新的鏡像(比如命名為“test/ubuntu:v1”),後續可以用這個鏡像啓動新容器:
$ cat ubuntu.tar | docker import - test/ubuntu:v1
7. 刪除容器:清理無用容器
不用的容器可以刪除,釋放資源,用docker rm命令(-f參數強制刪除運行中的容器):
# 強制刪除名為“ubuntu-test”的容器
$ docker rm -f ubuntu-test
注意:刪除容器不會刪除鏡像,後續還能用鏡像啓動新容器。
四、常見問題:Docker命令報“權限不足”怎麼辦?
執行Docker命令時,可能會遇到這樣的報錯:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied
報錯原因
Docker進程默認用Unix Socket(而非TCP端口)通信,這個Socket文件屬於root用户,普通用户沒有訪問權限,所以執行docker ps等命令會提示“權限不足”。
2種解決辦法
方法1:臨時用sudo獲取管理員權限
每次執行Docker命令前加sudo,比如:
$ sudo docker ps
這種方法簡單,但每次都要輸sudo,比較麻煩。
方法2:永久解決(推薦)
把當前用户加入“docker用户組”——Docker守護進程啓動時,會賦予“docker用户組”訪問Socket的權限,加入後普通用户也能執行Docker命令:
# 1. 創建docker用户組(如果已存在會提示,不用管)
sudo groupadd docker
# 2. 把當前登錄用户加入docker用户組
sudo gpasswd -a $USER docker
# 3. 更新用户組(讓設置立即生效,不用重啓電腦)
newgrp docker
# 4. 測試:執行docker ps,不報錯就成功了
docker ps
五、總結
Docker的核心是“容器化思維”,從“下載鏡像→啓動容器→管理容器”的實操開始,熟悉命令後再逐步探索更復雜的用法(比如Docker Compose管理多容器、Docker Swarm集羣)。
Docker的優勢在於“簡單、高效、一致”,無論是開發、測試還是部署,用Docker能幫你省去大量環境配置的時間,把精力放在核心業務上。