当涉及到多个容器的部署和管理时,Docker Compose 是一个非常有用的工具。它能够简化和自动化多容器应用程序的配置、启动和停止过程。
通过一个单一的 YAML 文件,您可以定义多个容器、它们之间的连接以及其他配置选项。然后,使用一个简单的命令就能够启动、停止和管理整个应用程序。
Docker Compose 的主要好处包括:
简化应用程序部署:通过 Docker Compose,您可以将所有容器的配置信息集中在一个文件中,这样可以大大简化应用程序的部署过程。只需一条命令,即可轻松地启动整个应用程序。
容器编排和连接:Docker Compose 允许您定义容器之间的连接和依赖关系。您可以指定容器之间的网络连接、共享卷、环境变量等。这样,您可以轻松地搭建复杂的多容器应用程序,并确保它们之间的正确交互。
可移植性和一致性:使用 Docker Compose,您可以轻松地在不同的环境中运行应用程序,例如开发、测试和生产环境。由于所有的配置都在一个文件中,您可以确保应用程序在不同环境中的一致性,减少了由于环境差异导致的问题。
扩展性和弹性:Docker Compose 允许您根据需要扩展容器的数量,以满足应用程序的负载需求。通过简单地增加副本数,您可以快速地扩展整个应用程序,并确保高可用性和负载均衡。
总之,Docker Compose 是一种简化多容器应用程序部署和管理的工具,它提供了易用性、可移植性和弹性等多个好处。通过定义和管理应用程序的配置文件,您可以轻松地构建、部署和管理复杂的容器化应用程序。
假设要部署一整个项目,前端、后端、数据库、nginx。那我们至少要构建三个镜像,分别启动,调试等。
这一波操作下来,人都麻了。
服务器没问题还好,一旦出问题了,天台见~
只需创建一个docker-compose.yml文件,在yml中将上面操作,配置一遍即可统一管理了。
version: '3.8'
services:
# 前端应用
frontend:
image: nginx:latest
ports:
- "80:80" # 将宿主机的80端口映射到容器的80端口
networks:
- manage-network
# 后端应用
backend:
image: your-java-backend-image:latest
networks:
- manage-network
# MySQL数据库
mysql:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example # 设置数据库的root用户密码
MYSQL_DATABASE: your_database # 设置数据库名称
MYSQL_USER: your_username # 设置数据库用户名
MYSQL_PASSWORD: your_password # 设置数据库用户密码
networks:
- manage-network
# Redis缓存服务器
redis:
image: redis:latest
ports:
- "6379:6379" # 将宿主机的6379端口映射到容器的6379端口
networks:
- manage-network
networks:
manage-network:
driver: bridge # 使用bridge驱动创建自定义网络
配置好后,只需一个命令即可启动全部。
docker-compose up
# 或者,这个是版本不通,写法不同
docker compose up
配置文件要备份好~。
sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
docker-compose --version
出现版本号即为成功
sudo pip install docker-compose
详细docker-compose.yml配置如下:
version: '3.8'
services:
# 前端Vue应用
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
image: nginx:latest
ports:
- "80:80" # 将宿主机的80端口映射到容器的80端口
volumes:
- ./frontend:/usr/share/nginx/html # 将宿主机的./frontend目录挂载到容器的/usr/share/nginx/html目录
- ./frontend-logs:/var/log/nginx # 将nginx日志目录挂载到宿主机的./frontend-logs目录
- ./nginx.conf:/etc/nginx/nginx.conf # 将nginx配置文件挂载到宿主机的./nginx.conf文件
networks:
- manage-network
# 后端Python应用
backend:
build:
context: ./backend
dockerfile: Dockerfile
image: python:latest
volumes:
- ./backend:/app # 将宿主机的./backend目录挂载到容器的/app目录
- ./backend-logs:/app/logs # 将后端应用的日志目录挂载到宿主机的./backend-logs目录
networks:
- manage-network
# MySQL数据库
mysql:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example # 设置数据库的root用户密码
MYSQL_DATABASE: your_database # 设置数据库名称
MYSQL_USER: your_username # 设置数据库用户名
MYSQL_PASSWORD: your_password # 设置数据库用户密码
volumes:
- ./mysql-data:/var/lib/mysql # 将数据库数据目录挂载到宿主机的./mysql-data目录
- ./mysql-logs:/var/log/mysql # 将数据库的日志目录挂载到宿主机的./mysql-logs目录
networks:
- manage-network
# Redis缓存服务器
redis:
image: redis:latest
ports:
- "6379:6379" # 将宿主机的6379端口映射到容器的6379端口
volumes:
- ./redis-data:/data # 将Redis数据目录挂载到宿主机的./redis-data目录
- ./redis-logs:/var/log/redis # 将Redis的日志目录挂载到宿主机的./redis-logs目录
networks:
- manage-network
networks:
manage-network:
driver: bridge # 使用bridge驱动创建自定义网络
输入如下命令即可构建并运行上面的全部容器
docker-compose up -d
docker ps
docker-compose.yml文件存放目录
manage-app/
├── docker-compose.yml
├── frontend/
│ ├── index.html
│ ├── main.js
│ ├── Dockerfile
│ └── ...
├── backend/
│ ├── app.py
│ ├── requirements.txt
│ ├── Dockerfile
│ └── ...
├── mysql-data/
│ ├── db_1.frm
│ ├── db_1.MYD
│ ├── db_1.MYI
│ └── ...
└── redis-data/
├── dump.rdb
└── ...
version: 指定 Docker Compose 文件的版本号,用来指示采用哪个版本的 Compose 文件语法。
services: 定义需要运行的各个服务,每个服务可以包括构建配置、端口映射、环境变量等信息。
build: 指定构建镜像所需的上下文路径和 Dockerfile 路径,用于构建自定义镜像。
image: 指定使用的镜像名称,可以是官方镜像或自定义构建的镜像。
ports: 定义服务的端口映射,将容器内部的端口映射到宿主机上的端口。
volumes: 挂载卷的配置,将宿主机上的目录或文件挂载到容器内部,用于数据持久化或配置文件共享。
environment: 设置容器的环境变量,用来传递配置信息给容器内的应用程序。
networks: 定义服务所属的网络,可以是默认网络或自定义网络,用于连接不同的服务。
depends_on: 指定服务依赖关系,用来定义服务启动的顺序或依赖关系。
command: 定义容器启动时执行的命令,用于覆盖镜像中默认的启动命令。
restart: 定义容器的重启策略,可以设置为无、总是、根据失败次数等不同的重启策略。
stop_grace_period: 定义容器停止的优雅期限,超过该期限后强制终止容器。
docker-compose up: 启动 Docker Compose 文件中定义的服务。如果首次运行,会构建镜像并启动容器;如果已经存在镜像和容器,则直接启动。
docker-compose up -d: 在后台启动 Docker Compose 文件中定义的服务,不会显示容器的输出日志。
docker-compose down: 停止并移除 Docker Compose 文件中定义的服务,同时删除相关的容器、网络和卷等资源。
docker-compose ps: 列出当前 Docker Compose 文件中定义的所有服务以及它们的状态。
docker-compose logs: 显示 Docker Compose 文件中定义的服务的日志输出。
docker-compose restart: 重启 Docker Compose 文件中定义的服务。
docker-compose build: 根据 Docker Compose 文件重新构建服务所需的镜像。
docker-compose exec : 在指定的服务容器内部执行命令。
docker-compose pull: 拉取 Docker Compose 文件中定义的服务所需的镜像。
docker-compose config: 验证 Docker Compose 文件的语法是否正确,并显示解析后的 Compose 文件内容。
如果能坚持学习到这里,那证明你真的很了不起!持之以恒是成功的关键。
通过不断学习和努力,已经掌握了 Docker 的基本知识,这将成为在软件开发和部署领域中的重要技能。接下来只需要保持这种积极的态度,持续学习和实践,将在这个领域中获得更多的成就和认可。
请记住,成功是一个长期的过程,而不是一蹴而就的事情。任何困难和挑战都应该被看作是成长的机会,不断克服它们终将变得更加强大和自信。
愿每一个人在未来的学习和职业道路上都能取得更大的成就!加油!