Docker Compose介绍、实践

53 阅读5分钟

云原生 从Docker、Jenkins、Kubernetes从入门到精通系列
Docker实战系列

1. Docker Compose 介绍

Docker Compose 快速入门(从零开始快速编写一个入门的DockerCompose实战)

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Compose 是一个定义和运行多容器应用程序的工具。

Compose 简化了整个应用程序堆栈的控制,让我们能够轻松地在一个简单易懂的 YAML 配置文件中管理服务、网络和卷。然后,只需使用一个命令即可从配置文件中创建和启动所有服务。

Compose 适用于所有环境;生产、准备、开发、测试以及 CI 工作流。它还具有用于管理应用程序整个生命周期的命令:

  • 启动、停止和重建服务
  • 查看正在运行的服务的状态
  • 流式输出正在运行的服务的日志
  • 在服务上运行一次性命令

2. 常用命令

启动命令(-d 表示后台启动) docker-compose up -d

停止服务 docker-compose down

列出所有运行容器 docker-compose ps

查看服务器日志 docker-compose logs

构建或者重新构建服务 docker-compose build

启动服务 docker-compose start

停止已运行的服务 docker-compose stop

重启服务 docker-compose restart

3. 安装与使用

Mac 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose。(Windos桌面版也包括了Compose应用程序)

3.1 下载
//下载最新版本
https://github.com/docker/compose/releases
3.2 授权
mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
开发环境可以授予最高权限
chmod 777 /usr/local/bin/docker-compose

Linux授权相关知识点

3.3 检查安装情况以及版本
docker-compose -v

docker-compose --version

docker-compose version
3.4 卸载

如果是二进制包方式安装的,删除二进制文件即可。

rm -rf /usr/local/bin/docker-compose

reboot 

4. Docker Compose 实践

Docker Compose 使用 YAML 文件来定义多服务的应用。 Docker Compose 默认使用文件名 docker-compose.yml。当然,也可以使用 -f 参数指定具体文件。

Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes

  • version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。
  • services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中。
  • networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型。
  • volumes 用于指引 Docker 来创建新的卷。

Compose中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

5. Docker Compose 文件编写示例与解释

编写一个redis、eureka的配置文件:

version: '3'
services:
  mysql:
    build:
      context: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: admin
    restart: always
    container_name: mysql
    volumes:
    - /data/edu-bom/mysql/test:/var/lib/mysql
    image: mysql/mysql:5.7
    ports:
      - 3306:3306
    networks:
      net:
  eureka:
    build:
      context: ./edu-eureka-boot
    restart: always
    ports:
      - 8761:8761
    container_name: edu-eureka-boot
    hostname: edu-eureka-boot
    image: edu/edu-eureka-boot:1.0
    depends_on:
      - mysql
    networks:
      net:
networks:
    net:
volumes:
    vol:

解释:

mysql部分解释

  • mysql 是服务的名称。
  • build 下的 context: ./mysql 指定了 Dockerfile 的构建上下文目录。
  • environment 部分设置了环境变量,其中 MYSQL_ROOT_PASSWORD 设置了 MySQL 的 root 用户密码为 admin
  • restart: always 指定容器退出时总是自动重启。
  • container_name: mysql 指定容器的名称为 mysql
  • volumes 部分将宿主机的 /data/edu-bom/mysql/test 目录挂载到容器内的 /var/lib/mysql 目录,用于持久化 MySQL 数据。
  • image: mysql/mysql:5.7 指定使用 Docker Hub 上的 mysql/mysql:5.7 镜像。
  • ports 部分将容器的 3306 端口映射到宿主机的 3306 端口,允许外部访问 MySQL 服务。
  • networks 部分将该服务连接到定义的 net 网络。

eureka部分解释

  • eureka 是服务的名称。
  • build 下的 context: ./edu-eureka-boot 指定了 Dockerfile 的构建上下文目录。
  • restart: always 指定容器退出时总是自动重启。
  • ports 部分将容器的 8761 端口映射到宿主机的 8761 端口,允许外部访问 Eureka 服务。
  • container_name: edu-eureka-boot 指定容器的名称为 edu-eureka-boot
  • hostname: edu-eureka-boot 指定容器的主机名为 edu-eureka-boot
  • image: edu/edu-eureka-boot:1.0 指定使用 edu/edu-eureka-boot:1.0 镜像。
  • depends_on 部分指定该服务依赖于 mysql 服务,即在启动 eureka 服务之前会先启动 mysql 服务。
  • networks 部分将该服务连接到定义的 net 网络。

Networks 和 Volumes 部分解释:

  • networks 部分定义了一个名为 net 的自定义网络,用于连接两个服务。
  • volumes 部分定义了一个名为 vol 的卷,但在当前配置文件中没有使用到。