docker及docker-compose安装及使用
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镜像见教程🔗