Docker系列-docker-compose简单介绍

695 阅读3分钟

Docker系列回顾

docker-compose的使用

什么是docker-compose

从前面几节大家可能看出来, Docker 使用在某些方面确实能够节省很多的麻烦, 但是,如果我们需要采用 Docker 基于多个容器来完成我们的项目部署的话, 使用 Docker 的命令,显得不那么方便

为了做到尽善尽美, Docker 为我们提供了 Compose

ComposeDocker 的官方开源项目, 负责实现对 Docker 容器集群的快速编排

我们可以通过编写 docker-compose.yml 来定义一组相关联的容器

如何开始 docker-compose 的使用: 安装

二进制安装

官方提供的安装地址会有一些问题, 这里给出我找到的急速下载地址: daocloud

下载docker

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` \
> /usr/local/bin/docker-compose

授权

chmod +x /usr/local/bin/docker-compose

pip3进行安装

使用pip3安装,必须先将python升级到python3

yum -y install python36

安装

pip3 install docker-compose

注: 此方法时间比较长

docker-compose 常用命令详解

docker-compose up -d

该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作, 通常情况下我们可以通过此命令直接启动一个项目

  • -d: 和 docker中一样, 意思就是在后台启动该项目

docker-compose start

启动已经存在的服务容器。

docker-compose stop

停止已经存在的服务容器。

docker-compose restart

重启项目中的服务。

docker-compose rm

删除项目中的服务

docker-compose ps

查看该项目下启动的服务

docker-compose.yml 文件模板

version: "3.7"

services:
  broker1:
    image: wurstmeister/kafka
    restart: always
    container_name: broker1
    privileged: true
    ports:
      - "9091:9091"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9091
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9091
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ADVERTISED_PORT: 9091
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
      KAFKA_MESSAGE_MAX_BYTE: 5242880
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_REPLICA_FETCH_MAX_BYTES: 5242880
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 3
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./broker1:/kafka/kafka\-logs\-broker1
    external_links:
      - zoo1
      - zoo2
      - zoo3
    networks:
      - zk-network
    extra_hosts:
      - "kafka:192.168.87.130"

  kafka-manager:
    image: sheepkiller/kafka-manager:latest
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    ports:
      - "29000:9000"
    links: # 连接本compose文件创建的container
      - broker1
      - broker2
      - broker3
    external_links: # 连接本compose文件以外的container
      - zoo1
      - zoo2
      - zoo3
    environment:
      ZK_HOSTS: zoo1:2181
      KAFKA_BROKERS: broker1:9092
      APPLICATION_SECRET: letmein
      KM_ARGS: -Djava.net.preferIPv4Stack=true
    networks:
      - zk-network

networks:
  zk-network:
    external: true
    name: zk-network

我们依据上面的代码来说明:

version: "3.7"

指定 docker-compose.yml 的语法版本, 建议采用最新版本

services:

项目依赖的服务集合

image:

服务用到的镜像

ports:

指定端口 相当于 docker 中的 -p

environment:

指定参数说明 相当于 docker 中的 -e

volumes:

挂载目录 相当于 docker 中的 -v

external_links:

连接到本文件以外的容器

networks:

指定网络 相当于 docker 中的 --network

extra_hosts:

指定额外的 host 名称映射信息 相当于 docker 中的 --add-host

额外模板

depends_on

解决容器的依赖、启动先后的问题, 但是不会等待其他服务都启动完成后才启动

如果还有其他不明白的地方, 可以参考官方文档

完结

这节其实很简单, 只是将 docker 中的命令行形式转换成更加方便的yml文件, 方便我们管理和维护

官方文档