docker-compose 安装

docker-compose 官方安装

  1. sudo yum update
  2. sudo yum install docker-compose-plugin
  3. # 习惯老版本的也可以安装 docker-compose
  4. sudo yum install docker-compose

建议阅读官方文档,新版都不是 docker-compose 了,变成 docker compose 命令了

快速上手

使用 docker-compose 就是为了在配置文件中去部署应用,其中网络可能会比较容易难理解。
直接找一个应用然后部署就明白了。 比如这个常用部署里面的任意一个应用

一开始里面的网络让我晕了。我们需要明确的有以下几点:

  • 容器之间通信不能使用 localhost ,因为 localhost 指向的是容器自己
  • 通过 docker-compose 启动容器的话,会默认创建一个网络
    默认值为:docker-compose.yml 当前所在文件夹 + 配置中指定的网络名称,如 目录_网络
  • 不同网络之间的容器不能直接通信(通过什么方式访问?笔者暂时不知道)
  • 相同网络直接访问是通过 容器名:端口

那么现在有如下的一个配置:

  1. |- es
  2. |- docker-compose.yml
  1. services:
  2. elasticsearch:
  3. image: docker.elastic.co/elasticsearch/elasticsearch:5.6.10
  4. container_name: elasticsearch # 容器名
  5. environment:
  6. - cluster.name=docker-cluster
  7. volumes:
  8. - esdata:/usr/share/elasticsearch/data
  9. - ./custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  10. ports:
  11. - 9200:9200
  12. - 9300:9300
  13. networks:
  14. - localnet # 参与的网络
  15. kibana:
  16. image: docker.elastic.co/kibana/kibana:5.6.10
  17. container_name: kibana # 容器名
  18. volumes:
  19. - ./kibana.yml:/usr/share/kibana/config/kibana.yml
  20. ports:
  21. - 5601:5601
  22. networks:
  23. - localnet
  24. volumes:
  25. esdata:
  26. driver: local
  27. networks: # 创建一个网络
  28. localnet:

在 es 目录下通过 docker-compose up 启动服务后,那么得出以下信息:

  • 创建一个 es_localnet 的网络
    如果配置文件中没有配置 networks,则会创建一个 es_default 的默认网络
  • kibana 配置文件中要指向这里的 elasticsearch 的话,需要写 http://elasticsearch:9200

网络

  1. # 查看网络
  2. docker network ls
  3. # 移除网络
  4. docker remove 网络名

docker-compose 命令

  1. # 前台启动一键更新服务; 需要在 docker-compose.yml 文件同级目录
  2. # 后面跟参数 -d, 则是后台
  3. docker-compose up
  4. # 指定 up 其中的一个服务, 比如 up rabbitmq
  5. # 使用场景:比如要暴露一个端口,可以 remove 之后,再使用 up xxx服务 进行端口的暴露
  6. # 至于如何保留数据,这个还需要再研究下,如果移除后,数据还在
  7. docker-compose up rabbitmq
  8. # 销毁容器,后面加参与 -v 会把网络和卷也销毁
  9. docker-compose down
  10. # 查看日志
  11. # 后面增加服务名则查看指定的服务日志
  12. # -f 参数:持续的输出日志
  13. # -t 参数:显示时间戳
  14. docker-compose logs

不同配置的容器通信

前面说过,一个 docker-compose.yml 如果不配置会创建默认的,反正是以目录来创建,也就是说不同配置的服务,加入的默认或则自定义的网络其实不在同一个,那么如何加入同一个已经存在的网络呢?

  1. networks:
  2. default:
  3. external:
  4. name: elastic_default

上述通过配置,默认加入的网络为 external 外部的,该网络在使用 docker-compose down -v 时,不会被删除,会直接跳过;

所以,在开发环境中,为了简单,还是使用同一份 docker-compose.xml 配置来部署测试环境的中间件,比较省事

文档/官方地址