在K8S出现之前,市场上有很多个容器编排工具。docker-compose就是其中之一,但是docker-compose只支持单机容器编排。

docker-compose是Docker官方开源的又一个项目,主要负责对Docker容器集群进行快速编排。

在docker-compose中有两个重要的概念:

  • service:一个应用的容器,实际上可以包含若干个运行相同镜像的容器。
  • project:由一组相关联的应用容器组成的一个完整的业务单元。

由此,docker-compose恰好满足用户通过一个命令,启动整个业务单元中所有的容器的这样一个功能。

而且,docker-compose是通过Python编写的,是想上调用了Docker服务提供的API,来对容器进行管理。因此,只要所操作的平台支持Docker,就可以利用docker-compose来进行管理。

1、安装Docker-compose

安装docker-compose非常的简单,从GitHub上面直接下载下来就能用。

  1. 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. sudo chmod +x /usr/local/bin/docker-compose
  • 增加docker-compose的命令行补全
    curl -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    

    2、docker-compose的使用

    docker-compose管理容器是通过配置清单的方式进行管理。配置清单的名称必须如下:docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml中选择一个。

[root@kubernetes harbor]# cat docker-compose.yaml
# 指定docker-compose配置清单的版本
version: "3"

services:
  mydjango:     # 自己具体应用
    image: django:v24


[root@kubernetes harbor]# docker-compose up -d

image:指定镜像

build:构建镜像

根据指定路径的dockerfile构建镜像并启动。

# 指定docker-compose配置清单的版本
version: "3"
services:
  mydjango:
    build: ./



# 指定docker-compose配置清单的版本
version: "3"
services:
  mydjango:
    build:
      context: ./
      dockerfile: docker-file

command:指定容器启动的默认命令

# 指定docker-compose配置清单的版本
version: "3"
services:
  mydjango:
    build:
      context: ./
      dockerfile: docker-file
    command: python manage.py runserver 0.0.0.0:80

container_name:指定容器名称

# 指定docker-compose配置清单的版本
version: "3"
services:
  mydjango:
    build:
      context: ./
      dockerfile: docker-file
    command: python manage.py runserver 0.0.0.0:80
    container_name: test

depens_on:解决容器启动顺序

django + Nginx时,Nginx通常必须在Django容器之后启动。

version: "3"
services:
  mydjango:
    build:
      context: ./
      dockerfile: docker-file
    command: python manage.py runserver 0.0.0.0:80
    container_name: django

  mynginx:
    image: nginx:v3
    depends_on:
      - mydjango

port:指定容器端口

version: "3"
services:
  mydjango:
    build:
      context: ./
      dockerfile: docker-file
    container_name: django

  mynginx:
    image: nginx:v3
    ports:
      - "8090:80"
    depends_on:
      - mydjango

volumes:挂载目录

version: "3"
services:
  mydjango:
    build:
      context: ./
      dockerfile: docker-file
    container_name: django

  mynginx:
    image: nginx:v3
    ports:
      - "8090:80"
    volumes:
      - /opt:/opt
    depends_on:
      - mydjango

3、docker-compose常用命令

关于docker-compose操作容器的命令。

up:创建容器并启动

[root@kubernetes django]# docker-compose up -d

down:停止容器

[root@kubernetes django]# docker-compose down

ps:容器列表

[root@kubernetes django]# docker-compose ps
      Name                    Command               State                       Ports                    
---------------------------------------------------------------------------------------------------------
django             uwsgi --ini myweb.ini            Up      8000/tcp                                     
django_mynginx_1   /docker-entrypoint.sh /bin ...   Up      443/tcp, 0.0.0.0:8090->80/tcp,:::8090->80/tcp

exec:进入容器

[root@kubernetes django]# docker-compose exec mynginx bash

restart:重启容器

[root@kubernetes django]# docker-compose restart

rm:删除容器

[root@kubernetes django]# docker-compose stop mydjango
Stopping django ... done

[root@kubernetes django]# docker-compose rm -f mydjango
Going to remove django
Removing django ... done

top:查看容器内部的进程

[root@kubernetes django]# docker-compose top mynginx

4、docker的可视化平台

version: "3"
services:
  portainer:
    image: portainer/portainer-ce:2.11.1
    volumes:
      - /opt/portainer_data:/data
      - /var/run/docker.sock:/var/run/docker.sock
    container_name: portainer
    ports:
      - 8000:8000
      - 9443:9443

[root@kubernetes linux]# docker-compose up -d