docker compose
🔗官網地址
一、為什么要使用docker compose
1. 簡化管理
? 通過一個 YAML 文件定義和管理多容器應用。
? 簡化服務間的編排與協調,方便環境的管理與復制。
2. 提升協作效率
? 配置文件易于共享,便于開發、運維等團隊協作。
? 加快問題解決速度,提升整體開發效率。
3. 加快開發迭代
? Compose 緩存容器配置,未更改的服務可復用容器。
? 快速修改和重啟環境,提高開發與測試效率。
4. 良好的可移植性
? 支持在 Compose 文件中使用變量。
? 可靈活適配不同環境和用戶需求。
5. 強大的社區支持
? 擁有活躍社區和豐富的資源與教程。
? 持續更新迭代,便于問題排查與學習提升。
二、 docker compose簡介
1、Docker Compose是一個工具,用于定義和運行多容器應用程序的工具;
2、Docker Compose通過yml文件定義多容器的docker應用;
3、Docker Compose通過一條命令根據yml文件的定義去創建或管理多容器;
如下圖所示:
三、下載與安裝
下載與安裝:
- 在安裝docker時候已經完成了安裝,直接查看版本號,查看是否安裝成功
- Docker 的 RPM 包已經 自動附帶了 Compose 插件(docker-compose-plugin)
docker compose version
如果你想看看你的docker compose安裝目錄
docker info | grep -i compose
# -i 忽略大小寫 (ignore)
四、 入門案例
需求:使用docker compose部署redis和mysql
docker-compose.yml文件的內容如下所示:
我本地已經有redis 6379和mysql 3306, 還有他們對應的數據卷, 為了避免各種沖突, 所以我的配置看起來有些奇怪
1、使用vim編輯
vim docker-compose.yml
# 按i 進入編輯模式 粘貼配置
# 按escwq #保存并退出
version: '3.9' # 指定 Docker Compose 文件版本(可選但推薦)services:redis: # Redis 服務image: redis:7.0.10 # 使用 Redis 7.0.10 鏡像container_name: redis-test # 容器名稱為 redis-testports:- "6380:6379" # 宿主機端口6380映射到容器6379volumes:- redis-data-test:/data # 使用命名卷持久化 Redis 數據mysql: # MySQL 服務image: mysql:8.0.30container_name: mysql-testports:- "3307:3306" # 宿主機端口3307映射到容器3306volumes:- mysql_data-test:/var/lib/mysql # 數據目錄- mysql_conf-test:/etc/mysql # 配置目錄privileged: true # 給予容器 root 權限(僅建議測試環境使用)environment:- MYSQL_ROOT_PASSWORD=test # 設置 root 密碼volumes:redis-data-test: {} # Redis 數據卷mysql_data-test: {} # MySQL 數據卷mysql_conf-test: {} # MySQL 配置卷
- 解釋一下 volumes:
🔹 告訴 Docker Compose:
“我要用這幾個命名卷(redis-data-test、mysql_data-test、mysql_conf-test),你用默認設置幫我創建就行。”
📦 這些卷的作用:
? 是 命名卷(Named Volumes),用于數據持久化。
? 會在路徑 /var/lib/docker/volumes/<卷名>/_data 中保存數據。
? 每次運行 Compose 時都會復用這些卷(不會重復創建,但會自動掛載)。
? 即使你刪除了容器,卷中的數據也會保留。
📌 {} 的作用
? {} 表示“使用默認設置創建”
? 你也可以只寫成這樣,效果一樣:
volumes:redis-data-test:mysql_data-test:mysql_conf-test:
2、使用cat命令
- 如果你的格式是復制過去是亂的可以用cat命令不走編輯器
cat > docker-compose.yml <<EOF
version: '3.9' # 指定 Docker Compose 文件版本(可選但推薦)services:redis: # Redis 服務image: redis:7.0.10 # 使用 Redis 7.0.10 鏡像container_name: redis-test # 容器名稱為 redis-testports:- "6380:6379" # 宿主機端口6380映射到容器6379volumes:- redis-data-test:/data # 使用命名卷持久化 Redis 數據mysql: # MySQL 服務image: mysql:8.0.30container_name: mysql-testports:- "3307:3306" # 宿主機端口3307映射到容器3306volumes:- mysql_data-test:/var/lib/mysql # 數據目錄- mysql_conf-test:/etc/mysql # 配置目錄privileged: true # 給予容器 root 權限(僅建議測試環境使用)environment:- MYSQL_ROOT_PASSWORD=test # 設置 root 密碼volumes:redis-data-test: {} # Redis 數據卷mysql_data-test: {} # MySQL 數據卷mysql_conf-test: {} # MySQL 配置卷
EOF
3、docker compose常用命令:
# 啟動容器(如果不存在容器就創建、存在則修改)
docker compose -f docker-compose.yml up -d# 刪除所有容器
docker compose -f docker-compose.yml down# 停止所有容器
docker compose -f docker-compose.yml stop# 啟動所有容器
docker compose -f docker-compose.yml start# 重啟所有容器
docker compose -f docker-compose.yml restart
🔗常見指令參考官方文檔
4、 查看結果
- 干掉
五、部署springboot項目也一樣
在yml配置中添加你制造好的鏡像, 如何制作springboot鏡像見教程🔗