docker-compose

它在单机定义、运行多个容器,帮助我们轻松管理容器。

使用docker-compose的三个步骤

  1. 编写DockerFile文件
  2. 编写docker-compose.yml文件,文件内部包含一些服务元数据
  3. 使用docker-compose up 命令启动所有容器。

    安装docker compose

    Mac 和 Windows 在安装docker的时候已经安装了docker compose。
    linux 环境需要安装docker compose。

  4. 下载docker compose,因为国外地址下载速度较慢,建议去网上找一个国内镜像地址

    1. sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  5. 我们给软件增加可执行权限

    sudo chmod +x /usr/local/bin/docker-compose
    
  6. 来看看是否安装成功

    docker-compose --version
    docker-compose version 1.23.2, build 1110ad01
    

    官方示例太清楚了,不想写笔记了。体验教程:https://docs.docker.com/compose/gettingstarted/

    docker compose优点

    以前每个容器都需要我们运行 docker run 命令去启动,但现在通过docker compose编写docker-compose.yml文件,就可以通过docker-compose命令一键启动所有容器。

    常用命令

    启动服务

    在文件目录内执行:

    docker-compose -f docker-compose.yml up -d
    

    如果文件名为 docker-compose.yml ,可省略名称:

    docker-compose up -d
    

    查看服务

    ```shell docker-compose ps

    Name                      Command               State                    Ports
    

composetest_redis_1 docker-entrypoint.sh redis … Up 6379/tcp composetest_web_1 flask run Up 0.0.0.0:5000->5000/tcp,:::5000->5000/tcp

<a name="JfTzV"></a>
### 终止服务
```powershell
docker-compose down

重新构建

docker-compose up --build

docker-compose.yml 规则

我们可以简单把它的规则简化为三层。

version: "3.9" # 第一层
services: 
    web1: # 第二层,服务配置
  web2: 
  redis1:
# 第三层是一些网络,数据卷和全局配置
version: "3.9"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

参考地址: https://docs.docker.com/compose/compose-file/compose-file-v3/#service-configuration-reference

启动顺序

要启动一个springboot,通常先启动db和redis,再启动springboot项目。那么在docker-compose是如何支持启动顺序的呢 ?
我们需要 depends_on 命令:

version: "3.9"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

水平扩展

docker-compose 可水平扩展多个服务。
比如,启动 3 个 web 服务,共享一个 redis 服务:
1:首先启动服务

docker-compose up -d
Creating network "flask-compsose_default" with the default driver
Creating flask-compsose_redis_1 ... done
Creating flask-compsose_web_1   ... done
Creating flask-compsose_lb_1    ... done

2: 水平扩展web服务

docker-compose up --scale web=3

web: 容器服务名称。扩展到3个服务。

flask-compsose_redis_1 is up-to-date
Starting flask-compsose_web_1 ... done
Creating flask-compsose_web_2 ... done
Creating flask-compsose_web_3 ... done
flask-compsose_lb_1 is up-to-date

结果

docker-compose ps
         Name                       Command               State                    Ports                 
---------------------------------------------------------------------------------------------------------
flask-compsose_lb_1      /sbin/tini -- dockercloud- ...   Up      1936/tcp, 443/tcp, 0.0.0.0:8080->80/tcp
flask-compsose_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp                               
flask-compsose_web_1     python app.py                    Up      80/tcp                                 
flask-compsose_web_2     python app.py                    Up      80/tcp                                 
flask-compsose_web_3     python app.py                    Up      80/tcp