【11.0】Docker之docker-compose

发布时间 2023-08-29 16:02:47作者: Chimengmeng

【一】引入

  • 使用了docker 面临一个比较大的问题,如果一个Django项目,使用MySQL、Redis。
  • 不要一次性把所有服务器放到一个容器中,每个服务器一个容器
  • 批量管理多个容器,比较难以操作,于是就有了docker-compose

【二】用途

  • 批量管理,操作docker容器

【三】docker-compose

  • docker-compose是一个能一次性定义和管理多个Docker容器的工具,单机容器编排【定义和管理】

【四】多机容器编排

  • docker swarm是Docker官方提供的多机容器编排工具

  • Kubernetes(也简称为K8s)是一个使用Go语言编写的开源容器编排平台

【五】docker Compose 概念

  • Compose 中定义和启动的每一个容器都相当于一个服务(service)
  • Compose中能定义和启动多个服务,且他们之间通常具有协同关系

【六】管理方式

  • 使用YAML文件来配置应用程序的服务。
  • 在这个配置文件中,您可以定义每个容器的镜像、端口映射、环境变量、卷挂载等信息。
  • 通过运行单个命令 docker-compose up,您可以创建并启动配置文件中定义的所有服务。

【七】安装docker-compose

  • 安装docker-compose可以通过官方提供的安装脚本进行操作。

【1】下载docker-compose的安装脚本

  • 运行以下下命令
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

【2】授予docker-compose可执行权限

sudo chmod +x /usr/local/bin/docker-compose

【3】验证安装是否成功

docker-compose --version

【4】您会看到类似以下的输出,表示docker-compose已成功安装

docker-compose version 1.29.2, build unknown

现在,您已经成功安装了docker-compose。

【八】常用命令

  • docker-compose是一个用于定义和运行多个Docker容器的工具,它通过一个配置文件来管理各个服务之间的依赖关系、网络设置以及其他参数。
  • 下面是一些常用的docker-compose命令,以帮助您更好地使用和管理容器:

【1】启动容器

docker-compose up
  • 该命令会在当前目录下查找docker-compose.yml文件,并启动所定义的所有服务。

【2】启动容器(后台模式)

docker-compose up -d
  • 使用该命令启动容器,并将其放在后台运行。

【3】停止运行中的容器

docker-compose stop
  • 该命令用于停止当前正在运行的所有容器,但并不会删除这些容器。

【4】停止并删除容器

docker-compose down
  • 该命令会停止并删除当前正在运行的所有容器。

【5】构建或重新构建服务

docker-compose build
  • 使用该命令可以构建或重新构建定义在docker-compose.yml中的服务的容器镜像。

【6】查看服务日志

docker-compose logs
  • 该命令会显示当前正在运行的所有服务的日志输出。

【7】查看运行中的容器列表

docker-compose ps
  • 该命令会列出当前正在运行的所有容器的相关信息。

【8】执行单个命令

docker-compose run <service_name> <command>
  • 使用该命令可以在指定的服务容器中执行单个命令。

【案例演示】

  • 假设您正在开发一个Django项目,并且该项目依赖于MySQL数据库和Redis缓存。
    • 为了简化部署过程,并且避免将所有服务器放在一个容器中,您可以使用docker-compose来管理这些服务。
  • 首先,创建一个新的项目目录,并在其中创建一个docker-compose.yml文件。
    • 然后,按照以下示例填写docker-compose.yml文件:
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8000:8000
    depends_on:
      - db
      - redis
  db:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=myapp
  redis:
    image: redis:latest
  • 在这个示例中,我们定义了三个服务:web、db和redis。

    • web服务表示Django应用程序,通过使用Dockerfile来构建容器镜像,该Dockerfile位于当前目录下。

    • 我们还将容器的8000端口映射到主机的8000端口,并指定了该服务依赖于db和redis。

    • db服务使用了mysql镜像,并设置了相关的环境变量,包括root用户的密码和项目数据库的名称。

    • redis服务使用了redis镜像。

  • 现在,您可以在项目目录中运行以下命令,启动这些服务:

docker-compose up
  • docker-compose将会自动下载所需的镜像并创建并启动相应的容器。

  • 通过使用docker-compose,您可以轻松地管理多个容器,并且它们之间会自动建立连接和协同工作。这样,您可以更加高效地进行开发、测试和部署。