什么是docker-compose.yml文件?

9 docker docker-compose

我找不到什么是docker-compose文件的真实定义

这样说是否正确?:

docker-compose文件是一个YAML文件,允许我们同时部署多个docker容器。

我想更好地解释什么是docker-compose文件

Gab*_*x0r 11

docker-compose.yml 是 docker-compose 的配置文件。

它允许同时部署、组合和配置多个 docker-container。Docker 的“规则”是将每个进程都外包给自己的 Docker 容器。

例如一个简单的 web docker-compose。你需要一个服务器、一个数据库和 PHP。所以你可以用Apache2、PHP和MySQL设置三个docker-container。

docker-compose 的优点是配置简单。您不必在 bash 中写入一大堆参数。您可以在 docker-compose.yml 中预定义它。

db:
    image: mysql
    ports:
        - "3306:3306"
    environment:
        MYSQL_DATABASE: example_db
        MYSQL_USER: root
        MYSQL_PASSWORD: rootpw
php:
    image: php
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./SRC:/var/www/
    links:
        - db
Run Code Online (Sandbox Code Playgroud)

正如你在我的例子中看到的那样。我设置了端口、外部数据卷以及到另一个 docker 容器的链接。它速度快,可重复,而且不难理解。


Jan*_*lli 8

Docker-compose是一个工具,可让您同时部署和管理多个容器。
docke-compose.yml文件包含有关如何执行此操作的说明。
在此文件中,您指示Docker-compose例如:

  • 从何处Dockerfile构建特定图像
  • 您要公开哪些端口
  • 如何链接容器
  • 您要绑定到主机的端口
  • 等等...

Docker-compose读取该文件并执行命令。在构建和运行单个Docker容器时
使用它代替所有可选参数

例:

version: '2'
services:
  nginx:
      build: ./nginx
      links:
          - django:django
          - angular:angular
      ports:
          - "80:80"
          - "8000:8000"
          - "443:443"
      networks:
       - my_net
  django:
      build: ./django
      expose:
          - "8000"
      networks:
       - my_net
  angular:
      build: ./angular2
      links:
          - django:django
      expose:
          - "80"
      networks:
        - my_net
networks:
  my_net:
    external:
      name: my_net
Run Code Online (Sandbox Code Playgroud)

此示例指示Docker-compose执行以下操作:

  • nginx从路径构建./nginx
  • 链接Angulardjango容器(因此它们在docker网络中的IP由名称解析)
  • 绑定端口804438000到主机
  • 将其添加到网络my_net
    (因此,所有3个容器都在同一网络中,因此可以相互访问)

然后对djangoAngular容器进行类似的操作。
如果仅使用docker命令,则将类似于:

docker build --name nginx .
docker run --link django:django angular:angular --expose 80 443 8000 --net my_net nginx
Run Code Online (Sandbox Code Playgroud)

因此,虽然您可能不想为每个图像/容器键入所有这些选项和命令,但是您可以编写docker-compose.yml文件,并以人类可读的格式编写所有这些指令。
(可以通过Ansible实现相同的功能