Docker系列回顾
- Docker系列-Docker入门介绍
- Docker系列-Docker 命令详解(一)
- Docker系列-网络配置,实战:Nginx负载Tomcat
- Docker系列- 自定义Docker镜像: Dockerfile
docker-compose的使用
什么是docker-compose
从前面几节大家可能看出来, Docker 使用在某些方面确实能够节省很多的麻烦, 但是,如果我们需要采用 Docker 基于多个容器来完成我们的项目部署的话, 使用 Docker 的命令,显得不那么方便
为了做到尽善尽美, Docker 为我们提供了 Compose:
Compose 是 Docker 的官方开源项目, 负责实现对 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文件, 方便我们管理和维护