1. 是什么
Docker 是一個用于開發、部署和運行應用程序的開源平臺,它使用 容器化技術 將應用及其依賴打包成獨立的容器,確保應用在不同環境中一致運行。
2. Docker與虛擬機
2.1 Docker(容器化)
容器化是一種輕量級的虛擬化技術,它將應用程序及其依賴項打包成獨立的容器,確保應用在不同環境中一致運行。與傳統虛擬機相比,容器共享宿主操作系統的內核,因此更輕量、更高效。
- 核心技術:Linux 的 namespaces(隔離進程、網絡等)和 cgroups(限制資源使用)。
- 工作方式:容器直接運行在宿主機的內核上,共享操作系統,僅封裝應用的用戶空間。
- 優點:資源效率高、啟動快、部署簡單。
- 缺點:隔離性較弱(共享內核),不適用于需要完全隔離內核的場景。
2.2 虛擬機(VM)
- 核心技術:Hypervisor(如 VMware、VirtualBox、KVM)模擬硬件資源。
- 工作方式:每個 VM 包含獨立的操作系統、驅動程序和應用,通過 Hypervisor 訪問物理硬件。
- 優點:完全隔離,安全性高,適用于不同操作系統或需要隔離內核的場景。
- 缺點:資源消耗大,啟動慢,管理復雜。
暫時無法在飛書文檔外展示此內容
2.3 對比
對比項 | Docker(容器化) | 虛擬機(VM) |
---|---|---|
底層依賴 | 共享宿主機的操作系統內核,僅封裝應用和依賴庫 | 每個 VM 包含完整的操作系統(內核 + 應用) |
隔離級別 | 進程級隔離(輕量級) | 硬件級隔離(重量級) |
資源利用率 | 高(無需額外操作系統開銷) | 低(每個 VM 需要獨立的操作系統資源) |
啟動速度 | 秒級(直接啟動應用進程) | 分鐘級(需要啟動完整的操作系統) |
3. 核心概念
3.1 鏡像(Image)
- 只讀的模板,包含應用代碼、依賴庫、環境變量等,類似 “應用的快照”。類似于“菜譜”
- 例如:
cr2.fit2cloud.com/1panel/maxkb
就是一個鏡像
3.2 容器(Container)
- 鏡像的運行實例,可被啟動、停止、刪除。類似于按菜譜做出的菜
- 容器間相互隔離,共享宿主機的操作系統內核
3.3 倉庫(Repository)鏡像源
- 存儲鏡像的地方,分為公有倉庫(如 Docker Hub)和私有倉庫(如
cr2.fit2cloud.com
)。類似于菜譜分享平臺
[圖片]
4 Docker常用命令
4.1 幫助命令
docker verision
# 顯示版本信息docker info
# 顯示系統信息docker 命令 --help
# 幫助命令
官方幫助文檔:https://docs.docker.com/reference/cli/docker/
4.2 鏡像命令
4.2.1 docker images 查看所有鏡像
docker images [選項] [鏡像名[:版本標簽TAG]]
- 常用選項
-a, --all
#列出所有鏡像
-q,--quiet
#只顯示鏡像的id
4.2.2 docker search 搜索鏡像
docker search [選項] TERM
4.2.3 docker pull 拉取鏡像
docker pull [選項] 鏡像名[:版本標簽|@DIGEST]
4.2.4 docker rmi 刪除鏡像
docker rmi [選項] IMAGE [IMAGE...]
docker rmi -f 鏡像id 鏡像id
#刪除指定的鏡像docker rmi -f $(docker images -aq)
#刪除全部的鏡像
4.2.5 docker commit 保存鏡像
docker commit [選項] 容器ID或名稱 [新鏡像名[:標簽]]
- 容器轉鏡像工具:將單個容器的當前狀態保存為新鏡像,
- 常用選項
-a, --author
指定鏡像作者信息--author="John Doe <john@example.com>"
-m, --message
添加提交信息--message="Installed Apache"
-p, --pause
提交時暫停容器(默認開啟)--pause=false
(不暫停容器) docker commit abc123 my-ubuntu-python:v1
4.3 容器命令
- 有了鏡像才可以創建容器
docker pull centos:7
#需指定下載版本,若直接pull centos ,CentOS 官方已 移除 latest 標簽,或鏡像源中未同步 latest 版本,會導致拉取失敗
4.3.1 docker run 新建容器并啟動
docker run [參數] image
- 常用選項
--name="Name"
#為容器命名,用來區分容器
-d
#以后臺方式運行
-it
#使用交互方式運行,進入容器查看內容
-p
主機端口:容器端口 #指定容器的端口 - 示例:啟動并進入
4.3.2 exit 從容器退回到主機
exit
# 停止容器并退回到主機
Ctrl
+P
+ Q
# 容器不停止退回到主機
4.3.3 docker ps 或 docker top查看服務器進程
docker ps [選項]
- 常用選項
-a
#列出當前正在運行以及歷史運行過的容器
-n=1
#顯示最近1次創建的容器
-q
#只顯示容器編號
docker top 容器id
4.3.4 docker rm 刪除容器
docker rm [選項,] 容器id [容器id...]
docker rm 容器id
#刪除指定容器,但無法刪除正在運行的容器docker rm -f $(docker ps -aq)
#刪除所有容器docker ps -a -q | xargs docker rm
#刪除所有容器docker rm $(docker ps -a -q)
#刪除所有停止的容器
4.3.5 啟動和停止容器
docker start 容器id
#啟動容器
docker restart 容器id
#重啟容器
docker stop 容器id
#停止當前正在運行的容器
docker kill 容器id
#停止當前正在運行的容器
4.4 常用其它命令
4.4.1 docker run -d 后臺啟動容器
docker run -d 鏡像名
- docker 容器使用后臺運行,必須要有一個前臺進程,若 docker 發現沒有應用,就會自動停止
4.4.2 docker logs 查看日志
docker logs [選項] 容器
- 常用選項
-tf
#顯示帶時間戳的日志
--tail 1
#顯示1條日志
#沒有日志可以自己編寫一段 shell 腳本
docker run -d centos /bin/sh -c "while true;do echo ronghaha;sleep 1;done"
#每隔一秒輸出一次 ronghaha
#再進行日志的查看
4.4.3 docker inspect查看源數據
docker inspect 容器id
[{"Id": "4d9c107c8975344c1188cd5d27351bbcca812f5ecf6600e9cc975dcfab805415","Created": "2025-05-23T10:03:37.047169586Z","Path": "/bin/sh","Args": ["-c","while true;do echo ronghaha;sleep 1;done"],-----------------------后續內容省略----------------------
4.4.4 docker exec 或 docker attach進入當前正在運行的容器
我們通常容器都是使用后臺方式運行的,需要進入容器,修改一些配置
- 方式一:docker exec 進入容器后開啟一個新終端,可進行操作(常用)
docker exec -it 容器id bash
- 方式二:docker attach 進入容器正在執行的終端,不會啟動新的進程
docker attach 容器id
4.4.5 docker cp從容器拷貝文件至主機
docker cp [選項] 容器id:文件路徑 拷貝文件路徑
4.5 練習
4.5.1 部署nginx
- Step1:
docker search nginx
或者直接去 dockerhub 上查找對應版本和使用手冊 - Step2: 下拉鏡像:pull
docker pull nginx:1.27
- Step3: 運行測試
docker run -d -p 3344:80 nginx:1.27
#-d后臺運行 -p宿主機端口:容器內部端口,將容器的 80 端口映射到主機的 3344 端口
curl localhost:3344
#測試本地網絡連接和服務可用性
curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
看到Welcome to nginx!證明測試成功
- Step4: 進入容器
→~ docker exec -it df8d23b39485 /bin/bash`
root@df8d23b39485:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
4.5.2 部署tomcat
-
官方的下載:
--rm
一般用來測試,用完刪除
docker run -it --rm tomcat:9.0
-
下載再啟動
docker pull tomcat:11.0
#拉取鏡像
docker run -d -p 3355:8080 --name tomcat:11.0 tomcat:11.0
-
測試訪問無問題
-
進入容器
docker exec -it tomcat /bin/bash
創作不易,點個贊支持一下ヾ(?゚▽゚)ノ