5.1 docker-compose简介,安装

简介:

Docker Compose 是一个 Docker 官方提供的工具,用于定义和运行多个 Docker 容器的应用程序。它可以通过一个 YAML 文件来配置应用程序的服务,从而实现容器化应用程序的快速部署和管理。

使用 Docker Compose 可以轻松定义多个 Docker 容器,并指定各个容器之间的依赖关系和网络配置等。通过一个简单的命令行界面,可以轻松地启动、停止、重启和销毁整个应用程序。此外,Docker Compose 还支持通过命令行进行扩展和缩减服务规模,以应对不同的需求。

使用 Docker Compose 可以简化 Docker 应用程序的开发、测试和部署过程,提高开发人员和 DevOps 的工作效率,加速应用程序的交付和上线。

安装

1.输入以下命令以下载 Docker Compose 的安装脚本:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.安装 Docker Compose,文件添加执行权限:

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

3.验证 Docker Compose 是否安装成功:

docker-compose --version

如果安装成功,终端将显示 Docker Compose 的版本号。

5.2 docker-compose入门

Docker Compose 快速入门示例:

  1. 创建一个项目目录,并在该目录下创建一个名为 docker-compose.yml 的文件。
  2. 编辑 docker-compose.yml 文件,添加以下内容:
version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"

上述示例定义了一个名为 web 的服务,使用 Nginx 镜像,并将容器的 80 端口映射到宿主机的 80 端口。

  1. 在终端中进入项目目录,并运行以下命令启动容器:
docker-compose up

运行该命令后,Docker Compose 会根据 docker-compose.yml 文件中定义的配置启动容器。在本例中,将启动一个名为 web 的 Nginx 容器。使用浏览器访问 http://localhost,应该能够看到 Nginx 的欢迎页面。

docker-compose常用命令

  • docker-compose up: 启动容器,会根据 docker-compose.yml 文件中的配置创建和启动容器。
  • docker-compose up -d: 启动容器并在后台运行。
  • docker-compose down: 停止由up命令启动的容器并删除相关资源,包括容器、网络和卷等。
    --volumes 删除卷
  • docker-compose ps: 查看项目中的所有容器的状态。
  • docker-compose logs: 查看容器的日志输出。
  • docker-compose start: 启动已经创建的容器。
  • docker-compose stop: 停止正在运行的容器。
  • docker-compose restart: 重启已经创建的容器。
  • docker-compose build: 构建 Docker 镜像。
  • docker-compose pull: 从远程仓库拉取 Docker 镜像。
  • docker-compose exec 容器名 bash : 在指定的容器中执行命令。
  • docker-compose config: 检查 docker-compose.yml 文件的语法和格式是否正确。

5.2 docker-compose核心

docker-compose.yml介绍

Docker Compose文件由三个主要部分组成:

  • version:指定Docker Compose文件的版本号,用于指定Compose文件的语法版本和使用哪些Compose功能。
  • services:指定Docker容器的服务。每个服务都可以由多个子字段组成,包括容器的名称、构建方式、镜像名称、端口映射、环境变量等选项。
  • networks:指定Docker容器的网络。可以使用"bridge"、“host”、"none"等预定义网络,也可以创建自定义网络。

Docker Compose YAML文件常用字段:

  • version:指定Compose文件格式的版本号,目前支持的版本有2、2.1、3、3.1、3.2、3.3、3.4、3.5、3.6、3.7、3.8、3.9。不同的版本支持不同的特性和语法,因此在使用Docker Compose时应该根据实际情况选择合适的版本。
  • services:定义应用程序的各个服务,每个服务可以包含一个或多个容器。在services中定义的服务将会在一个共同的Docker网络中运行,并且可以通过服务名来互相访问。
  • image:指定使用哪个Docker镜像。如果没有指定image字段,则需要通过build字段来指定使用哪个Dockerfile构建镜像。
  • build:指定使用Dockerfile构建镜像,可以指定Dockerfile的路径和构建上下文。构建上下文默认为当前目录。
  • container_name:指定容器的名称。如果没有指定该字段,则Compose将自动生成一个唯一的名称。
  • ports:指定容器与主机之间映射的端口号。可以使用"主机端口:容器端口"的格式来指定映射关系,也可以只指定容器端口,此时Docker将自动分配一个主机端口。
  • volumes:指定容器与主机之间共享的目录或文件。可以使用"主机路径:容器路径"的格式来指定共享关系,也可以只指定容器路径,此时Docker将自动创建一个匿名卷。
  • environment:指定容器中的环境变量。可以使用"变量名=变量值"的格式来指定环境变量,也可以将环境变量定义为一个YAML映射。
  • depends_on:指定服务之间的依赖关系,如一个服务需要等待另一个服务启动后再启动。在Compose文件中指定depends_on字段不会等待服务完全可用,因此在启动服务后最好使用Docker内置的健康检查机制来检查服务是否可用。
  • network-mode 设置容器的网络模式
  • networks:指定容器所在的网络。可以使用已存在的网络或者定义新的网络。如果没有指定网络,Compose将自动创建一个默认的网络。
  • restart:指定容器退出后的重启策略。可以使用"no"、“always”、"on-failure"或者"unless-stopped"四种策略之一。默认情况下,Docker Compose会使用"no"策略。
  • command:覆盖容器默认的启动命令。可以使用命令行字符串或者一个YAML列表来指定命令和参数。
  • logging:配置容器的日志记录选项。可以指定日志的驱动程序、驱动程序的配置和日志记录

如下示例:

version: "3.9"  # 指定Compose文件的版本

services:  # 定义服务

  db:  # 定义db服务
    image: mysql:5.7  # 使用MySQL 5.7的镜像
    volumes:  # 挂载数据卷
      - db_data:/var/lib/mysql  # 把db_data数据卷挂载到MySQL的数据目录
    restart: always  # 定义重启策略,出现错误会自动重启
    environment:  # 设置环境变量
      MYSQL_ROOT_PASSWORD: example  # 设置MySQL的root密码
      MYSQL_DATABASE: exampledb  # 创建exampledb数据库
      MYSQL_USER: exampleuser  # 创建exampleuser用户
      MYSQL_PASSWORD: examplepassword  # 给exampleuser用户设置密码
      
  web:  # 定义web服务
   #build: .  # 使用当前目录下的Dockerfile构建镜像
    build:
     context: ./web  # 使用 ./web 目录下的 Dockerfile
     dockerfile: Dockerfile.prod  # 使用 Dockerfile.prod 作为 Dockerfile
    command: python manage.py runserver 0.0.0.0:8000  # 运行Django的开发服务器
    volumes:  # 挂载数据卷
      - .:/code  # 把当前目录挂载到容器的/code目录
    ports:  # 暴露端口
      - "8000:8000"  # 把容器的8000端口映射到主机的8000端口
    depends_on:  # 定义服务依赖
      - db  # web服务依赖于db服务
    networks:
     - default# 将 web服务添加到名为 default的网络中

volumes:  # 定义数据卷
  db_data:  # 定义db_data数据卷

networks:  # 定义网络
  default:  # 定义默认网络
    driver: bridge  # 使用桥接模式作为网络驱动