赞
踩
当某个容器有多个依赖容器的时候适合使用docker-compose.
比如:微服务架构下的service A依赖 service B和service C;当你需要启动service A的时候就要先启动B和C,一共要启动三次,当你用docker-compose编排了这三个service之后,你只需要一个命令就可以按照你设置的顺序和参数启动,关闭也是一样。
又比如一个应用的前端容器和后端容器,它们两个适合组织到一个docker-compose里面。
docker-compose只是一个为了解决特定问题的工具,并不是所有出现docker的地方都适合用docker-compose。
如下场景:
公司开发的多个应用分别使用了mysql,pgsql,redis,MQ四个基础的组件。这个时候需要维护mysql,就要把使用它的service停掉,但是不代表要把所有的service都停掉,也更不应该将pgsql,redis,MQ三个基础的组件同时停掉,因为这个时候它们之间并没有依赖关系,在逻辑和物理上它们是相互独立的存在,在这种场景下就不适合将基础组件之间或者将基础组件和service之间关联起来,如果硬要将它们编排到一起的话就很麻烦也不灵活。
总结:不可独立提供服务,需要依赖另外的容器才组成完整服务的容器可以用docker-compose将它们编排组织到一起。
提示:以下是本篇文章正文内容,下面案例可供参考
Docker Compose version v2.2.3
Docker Compose 是一个在 Docker 上运行多容器应用程序的工具,使用Compose 文件格式定义。Compose文件用于定义组成应用程序的一个或多个容器的配置方式。拥有 Compose 文件后,您可以使用单个命令创建和启动应用程序:docker compose up.
关于更新和向后兼容性
Docker Compose V2 是 Docker Compose 的主要版本升级版本。它已经用 Golang 从头开始完全重写(V1 是用 Python 编写的)。Compose V2 的安装说明与 V1 不同。V2 不再是独立的二进制文件,必须调整安装脚本。有些命令是不同的。 为了从旧版 docker-compose 1.xx顺利过渡,请考虑安装compose-switch以将docker-compose …命令转换为 Compose V2 的docker
compose … . 还要检查 V2 的–compatibility标志。
此表显示了哪些 Compose 文件版本支持特定的 Docker 版本。
组件 | 版本 |
---|---|
docker | 18.09.6, build 481bc77156 |
docker compose | v2.2.3 |
elastic stock | 7.6.2 |
下载页面
https://github.com/docker/compose/releases/tag/v2.2.3
授权可执行权限
chmod +x docker-compose-linux-x86_64
查看版本
$> docker-compose-linux-x86_64 -v
Docker Compose version v2.2.3
放到系统执行目录
mv ./docker-compose-linux-x86_64 /usr/bin/.
根据自身需要去改名,比如改为docker-compose
代码如下(示例):
docker-compose.yml
version: '3.6' # 根据上面的compose与docker版本对照表,我们可以选择 3.6,3.7这里我们使用3.6 services: elasticsearch2: image: "docker.elastic.co/elasticsearch/elasticsearch:7.6.2" container_name: es_server_test ports: - 9200:9200 - 9300:9300 hostname: elasticsearchhhh environment: - discovery.type=single-node build: args: args1: 'nothing' mem_limit: 1524m # 这个参数设置了容器可以使用的内存,等同于 docker run 的 -m 参数 volumes: - /root/elkcompose/elasticsearch/plugins:/usr/share/elasticsearch/plugins - /root/elkcompose/elasticsearch/data:/usr/share/elasticsearch/data deploy: labels: description: "This Test container" resources: limits: cpus: '2' memory: 1524M reservations: cpus: '1' memory: 800M logstash_server_test: image: "elastic/logstash:7.6.2" container_name: logstash_server_test ports: - 5044:5044 - 9600:9600 depends_on: - elasticsearch266 mem_limit: 400m kibana_server_test: image: "elastic/kibana:7.6.2" container_name: kibana_server_test ports: - 5601:5601 depends_on: - elasticsearch2 # depends_on 设置依赖关系:以依赖性顺序启动服务,被依赖项先于当前容器启动 links: - elasticsearch2:es # 将容器链接到本容器网络内可访问,并定义个hostname,可通过hostname来访问被链接的容器 mem_limit: 1024m environment: #设置访问elasticsearch的地址 - "ELASTICSEARCH_HOSTS=http://es:9200"
需要到docker-compose.yml文件同目录运行docker-compose up
或者docker-compose up -d
来启动,关闭命令是docker-compose down
,同样也需要到docker-compose.yml同目录下执行。
查看日志的命令是docker-compose logs
查看运行的容器docker-compose ps
在这个配置下logstash是跑不起来的,为了做一个错误的实例,但是不影响es和kibana的运行。
资源不足,大多数是因为内存不够
我看一些网上的博客在kibana段是这么配置的,这是不对的,kibana里面没有这样的环境变量匹配。。
environment:
#设置访问elasticsearch的地址
- elasticsearch.hosts=http://es:9200
正确的
links:
- elasticsearch2:es
environment:
#设置访问elasticsearch的地址
- "ELASTICSEARCH_HOSTS=http://es:9200"
先用links给es配个hostname,或者你直接使用es配置段的services key也可以。
es_server_test | ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
es_server_test | Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
es_server_test | at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
es_server_test | at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
es_server_test | at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
$> pwd
/root/elkcompose/elasticsearch
$> chmod -R 777 elasticsearch
以上就是要讲的内容,本文通过ELK介绍了docker-compose的使用,建议在有docker基础的情况下学习compose。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。