docker-compose 安装
sudo yum updatesudo yum install docker-compose-plugin# 习惯老版本的也可以安装 docker-composesudo yum install docker-compose
建议阅读官方文档,新版都不是 docker-compose 了,变成 docker compose 命令了
快速上手
使用 docker-compose 就是为了在配置文件中去部署应用,其中网络可能会比较容易难理解。
直接找一个应用然后部署就明白了。 比如这个常用部署里面的任意一个应用
一开始里面的网络让我晕了。我们需要明确的有以下几点:
- 容器之间通信不能使用 localhost ,因为 localhost 指向的是容器自己
- 通过 docker-compose 启动容器的话,会默认创建一个网络
默认值为:docker-compose.yml当前所在文件夹 + 配置中指定的网络名称,如目录_网络 - 不同网络之间的容器不能直接通信(通过什么方式访问?笔者暂时不知道)
- 相同网络直接访问是通过
容器名:端口
那么现在有如下的一个配置:
|- es|- docker-compose.yml
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:5.6.10container_name: elasticsearch # 容器名environment:- cluster.name=docker-clustervolumes:- esdata:/usr/share/elasticsearch/data- ./custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.ymlports:- 9200:9200- 9300:9300networks:- localnet # 参与的网络kibana:image: docker.elastic.co/kibana/kibana:5.6.10container_name: kibana # 容器名volumes:- ./kibana.yml:/usr/share/kibana/config/kibana.ymlports:- 5601:5601networks:- localnetvolumes:esdata:driver: localnetworks: # 创建一个网络localnet:
在 es 目录下通过 docker-compose up 启动服务后,那么得出以下信息:
- 创建一个
es_localnet的网络
如果配置文件中没有配置 networks,则会创建一个es_default的默认网络 - kibana 配置文件中要指向这里的 elasticsearch 的话,需要写
http://elasticsearch:9200
网络
# 查看网络docker network ls# 移除网络docker remove 网络名
docker-compose 命令
# 前台启动一键更新服务; 需要在 docker-compose.yml 文件同级目录# 后面跟参数 -d, 则是后台docker-compose up# 指定 up 其中的一个服务, 比如 up rabbitmq# 使用场景:比如要暴露一个端口,可以 remove 之后,再使用 up xxx服务 进行端口的暴露# 至于如何保留数据,这个还需要再研究下,如果移除后,数据还在docker-compose up rabbitmq# 销毁容器,后面加参与 -v 会把网络和卷也销毁docker-compose down# 查看日志# 后面增加服务名则查看指定的服务日志# -f 参数:持续的输出日志# -t 参数:显示时间戳docker-compose logs
不同配置的容器通信
前面说过,一个 docker-compose.yml 如果不配置会创建默认的,反正是以目录来创建,也就是说不同配置的服务,加入的默认或则自定义的网络其实不在同一个,那么如何加入同一个已经存在的网络呢?
networks:default:external:name: elastic_default
上述通过配置,默认加入的网络为 external 外部的,该网络在使用 docker-compose down -v 时,不会被删除,会直接跳过;
所以,在开发环境中,为了简单,还是使用同一份 docker-compose.xml 配置来部署测试环境的中间件,比较省事
文档/官方地址
- compose-file :docker-compose-file.yaml 编写规范
