负责管理容器的运行
示例下面的docker-compose.yaml只作为介绍之用
version: '2.2'
services:
elasticsearch: #服务名
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 #docker仓库中的镜像名:tag
container_name: elasticsearch7.2.0 #容器名
hostname: elasticsearch #主机名,容器是类Linux系统
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes: #挂载卷,左边主机:右边容器
- esdata:/usr/share/elasticsearch/data
restart: always # 重启策略
network_mode: host
ports: # 端口映射,左边主机:右边容器
- 9200:9200
- 9300:9300
expose: #声明暴露的端口,只是声明
- 9200
kibana:
image: docker.elastic.co/kibana/kibana:7.2.0
container_name: kibana7.2.0
hostname: kibana
environment:
- elasticsearch.hosts=http://elasticsearch:9200
depends_on: # !依赖服务,不是依赖容器
- elasticsearch
restart: always
ports:
- "5601:5601"
# 容器运行时执行命令 exec模式
command: ["bundle", "exec", "thin", "-p", "3000"]
logstash:
image: docker.elastic.co/logstash/logstash:7.2.0
container_name: logstash7.2.0
hostname: logstash
restart: always
external_links:
- elasticsearch:elasticsearch
depends_on:
- elasticsearch
ports:
- 9600:9600
- 5044:5044
#卷驱动,esdata是elasticsearch下的主机目录
volumes:
esdata:
driver: local
#网络模式网桥
networks:
elknet:
driver: bridge
获取环境变量
注意:
- 需要在docker-compose.yaml同级别目录下创建.env文件
- 创建Dockerfile文件
FROM alpine:3.14.6
RUN mkdir /vol
VOLUME /vol
- 构建镜像
sudo docker build -t test:1.0.0 .
- 创建.env文件
export DIR_BASE=/home/xcrj/test
- 添加到~/.bashrc配置文件末尾
export DIR_BASE=/home/xcrj/test
- 刷新~/.bashrc
source ~/.bashrc
- 创建docker-compose.yaml文件
version: '3'
services:
test1:
image: test:1.0.0
container_name: test1
hostname: test1
volumes:
- ${DIR_BASE}/vol:/vol
- 运行容器
sudo docker-compose -f docker-compose.yaml up -d
- 检查
找到Mounts,发现挂载成功
sudo docker inspect test1
network_mode
network_mode: bridge
- 自有IP;此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥
- 通过docker0网桥以及Iptables nat表配置与宿主机通信
network_mode: host
- 使用主机的IP
network_mode: none
- 关闭容器网络功能
network_mode: service_name
- 此服务只能与指定服务通信
todo
healthchecktest:健康测试
interval:间隔执行测试时间
retries:尝试次数
start_period:开始执行测试的等待时间,等待容器先启动
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
depends_on
表明服务之间的依赖关系
service_started
:依赖服务启动service_healthy
:依赖服务完成健康检查service_completed_successfully
:依赖服务完全运行成功
简单方式:等价于service_started
version: '2.2'
services:
kibana:
image: docker.elastic.co/kibana/kibana:7.2.0
container_name: kibana7.2.0
hostname: kibana
environment:
- elasticsearch.hosts=http://elasticsearch:9200
depends_on: # !依赖服务,不是依赖容器
- elasticsearch
restart: always
ports:
- "5601:5601"
# 容器运行时执行命令 exec模式
command: ["bundle", "exec", "thin", "-p", "3000"]
详细
services:
service0:
depends_on:
service1:
# service0依赖service1启动
condition: service_started
service2:
# service0依赖service2健康检查完成
condition: service_healthy
service3:
# service0依赖service2完全启动
condition: service_completed_successfully
restart
restart: “no”
- 不重启
restart: always
- 总是重启
restart: on-failure
- 发生错误时重启,exit-code非0
restart: unless-stopped
- 不管退出码
- 除非服务停止,否则重启
todo
command和entrypoint与Dockerfile中的CMD和ENTRYPOINT一样
- 在容器运行时执行
- command将覆盖Dockerfile中的CMD
- entrypoint将覆盖Dockerfile中的ENTRYPOINT
- 存在多个command只有最后1个生效
- 存在多个entrypoint只有最后1个生效
- 同时存在command和entrypoint,command拼接到entrypoint后面
# shell模式
command: bundle exec thin -p 3000
# exec模式
command: [ "bundle", "exec", "thin", "-p", "3000" ]
多command执行
command: /bin/bash -c "echo hi xcrj && echo hello world"
command: /bin/sh -c "echo hi xcrj && echo hello world"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)