当前位置:   article > 正文

Docker-Compose简介_docker-compose 文件名

docker-compose 文件名


在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容器只运行一个进程,因此运行多个微服务就要运行多个容器。多个容器协同工作需要一个有效的工具来管理他们,定义这些容器如何相互关联,compose 应运而生。

compose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。
compose 使用 YAML 文件来定义多容器之间的关系。一个 docker-compose up 就可以把完整的应用跑起来。

本质上,compose 把 YAML 文件解析成 docker 命令的参数,然后调用相应的 docker 命令行接口,从而将应用以容器化的方式管理起来。它通过解析容器间的依赖关系顺序地启动容器。而容器间的依赖关系由 YAML 文件中的 links 标记指定。

1、什么是docker compose

compose、machine 和 swarm 是docker 原生提供的三大编排工具,简称docker三剑客。
Docker Compose能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理。多数的现代应用通过多个更小的微服务互相协同来组成一个完整可用的应用。比如一个简单的示例应用可能由如下 4 个微服务组成。

  • Web前端
  • 订单管理
  • 品类管理
  • 后台数据库

将以上服务组织在一起,就是一个可用的应用。
部署和管理繁多的服务是困难的。而这正是 Docker Compose 要解决的问题。Docker Compose 并不是通过脚本和各种冗长的 docker 命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署。应用部署成功后,还可以通过一系列简单的命令实现对其完整声明周期的管理。甚至,配置文件还可以置于版本控制系统中进行存储和管理。

2、docker-compose的背景

Docker Compose 的前身是 Fig。Fig 是一个由 Orchard 公司开发的强有力的工具,在当时是进行多容器管理的最佳方案。

Fig 是一个基于 Docker 的 Python工具,允许用户基于一个 YAML 文件定义多容器应用,从而可以使用fig 命令行工具进行应用的部署。

Fig 还可以对应用的全生命周期进行管理。内部实现上,Fig 会解析 YAML 文件,并通过 Docker API 进行应用的部署和管理。

在 2014 年,Docker 公司收购了 Orchard 公司,并将 Fig 更名为 Docker Compose。命令行工具也从 fig 更名为 docker-compose,并自此成为绑定在 Docker 引擎之上的外部工具。虽然它从未完全集成到 Docker 引擎中,但是仍然受到广泛关注并得到普遍使用。

直至今日,Docker Compose 仍然是一个需要在 Docker 主机上进行安装的外部 Python 工具。使用它时,首先编写定义多容器(多服务)应用的 YAML 文件,然后将其交由 docker-compose 命令处理,Docker Compose 就会基于 Docker 引擎 API 完成应用的部署。

3、yml配置文件

Docker Compose 使用 YAML 文件来定义多服务的应用。YAML 是 JSON 的一个子集,因此也可以使用JSON。

Docker Compose 默认使用文件名 docker-compose.yml。当然,也可以使用 -f 参数指定具体文件。

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

  • version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。
  • services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 david-mysql数据库服务以及一个名为david-eureka的微服务。Docker Compose 会将每个服务部署在各自的容器中。
  • networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建bridge网络。这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不同的网络类型。
  • volumes 用于指引 Docker 来创建新的卷。
version: '3.7' 
services: 
  david-mysql: 
    build: 
      context: ./mysql 
    environment: 
      MYSQL_ROOT_PASSWORD: admin 
    restart: always 
    container_name: david-mysql 
    volumes: 
    - /data/edu-bom/mysql/david:/var/lib/mysql 
    image: david/mysql:5.7 
    ports: 
      - 3306:3306 
    networks: 
      david-net: 
    david-eureka: 
      build: 
        context: ./edu-eureka-boot 
      restart: always 
      ports: 
        - 8761:8761 
      container_name: edu-eureka-boot 
      hostname: edu-eureka-boot 
      image: david/edu-eureka-boot:1.0 
      depends_on: 
        - david-mysql 
      networks: 
        david-net: 
networks:
  david-net: 
volumes: 
  david-vol:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

4、常用命令汇总

# 启动服务
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/180675
推荐阅读
相关标签
  

闽ICP备14008679号