Docker为我们提供了虚拟化的快捷方法,但是随着微服务大行其道的时候,一个一个去编辑Dockerfile有点太麻烦了,docker-compose就应运而生了。docker-compose提供了多个微服务编排的能力,并提供了运行时环境配置,同时启动、停止的方法,十分的方便。
-
docker-compose的安装:
离线安装:地址https://github.com/docker/compose/releases/,下载相应系统版本,移动到/usr/local/bin/
或使用curl工具,
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
增加运行权限:
chmod +x /usr/local/bin/docker-compose
使用pip安装:
apt-get isstall epel-release
apt-get install python-pip
pip install docker-compose
2.docker-compose文档格式与docker的版本对应关系
Compose file format compatibility matrix
Compose file format | Docker Engine |
---|---|
1 | 1.9.0+ |
2.0 | 1.10.0+ |
2.1 | 1.12.0+ |
2.2, 3.0, 3.1, 3.2 | 1.13.0+ |
2.3, 3.3, 3.4, 3.5 | 17.06.0+ |
2.4 | 17.12.0+ |
3.6 | 18.02.0+ |
3.7 | 18.06.0+ |
3.docker-compose常用的命令
docker-compose命令常用选项:
--verbose:输出更多的调试信息
--version:查看compose的版本
-f --file FILE:使用特定的compose模板文件,默认为docker-compose.yml。
-p --project-name NAME 指定项目名称,默认使用目录名称。
常用命令:
build:构建或重建服务
ps:查看已经启动的服务状态
kill:停止某个服务、杀掉容器
logs:可以查看某个服务的log、显示容器的输出内容
port:打印绑定的public port(开放端口)
pull:拉取服务镜像
up:启动yml定义的所有服务
stop:停止yml中定义的所有服务
start:启动被停止的yml中的所有服务
kill:强行停止yml中定义的所有服务
rm:删除yml中定义的所有服务
restart:重启yml中定义的所有服务
scale:设置服务的容器数目
run:运行一个一次性命令
4.docker-compose.yml常用的配置:
docker-compose中YAML常用的字段:
字段 | 描述 |
build dockerfile context | 指定dockerfile文件名 构建镜像上下文路径 |
image | 指定镜像 |
command | 执行命令,覆盖默认命令 |
container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络,引用顶级networks下条目 |
ports | 暴漏端口,与-p相同,但端口不能低于60 |
volumes | 挂载宿主机路径或命名卷在顶级volumes定义卷名称 |
restart | 重启策略,默认no,always|on-failurel|unless-stopped |
hostname | 容器主机名 |
5.docker-compose.yml文件的具体写法(如ELK6.5.4)
version: '3.7'
services:
logstash:
image: logstash:6.5.4
container_name: logstash
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
volumes:
- ./config/pipeline/:/usr/share/logstash/pipeline/
- ./config/logstash/:/usr/share/logstash/config/
ports:
- "5044:5044"
- "9600:9600"
links:
- elasticsearch
elasticsearch:
image: elasticsearch:6.5.4
ports:
- "9200:9200"
- "9300:9300"
container_name: elasticsearch
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.type=single-node"
volumes:
- ./esdata:/usr/share/elasticsearch/data
kibana:
image: kibana:6.5.4
container_name: kibana
links:
- elasticsearch
ports:
- "5601:5601"