简介:Compose是用于定义和运行多容器Docker应用程序的工具,通过Compose,使用yml文件来配置应用程序所需要的所有服务,对多服务应用进行统一部署。
0. 容器内问题排查命令
先进入容器:docker exec -it container-id sh/bash;
A. 测试网络是否互通:ping ip;
B. 测试容器端口是否开通:nc -zv ip port;
1、安装与卸载
A. 下载docker-compose工具;
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
B. 设置docker-compose可执行文件权限:chmod +x /usr/local/bin/docker-compose;
C. 测试是否安装成功:docker-compose --version;
D. 卸载:rm /usr/local/bin/docker-compose。
2、三个步骤
A. 使用Dockerfile定义应用程序的环境,为每个服务构建需要的镜像;
B. 使用docker-compose.yml定义构成应用程序的服务,他们在隔离环境中一起运行;
C. 执行docker-compose up命令来启动并运行整个应用程序;
D. 停止或重启服务:docker-compose stop/restart。
3、docker-compose.yml配置文件
# 版本
version: '3'
# Network配置
networks:
# network名
my-net:
# 此网络是在compose之外建立的,docker-compose up不会创建它
external: true
my-host:
external: true
# 与主机共享host网路
name: host
# 全局挂载卷
volumes:
fdfs-data-1:
# 服务
services:
# 服务名
web:
# 镜像名:仓库/标签:版本
image: ruhuanxingyun.com:8701/fastdfs-nginx:latest
# 服务发布模式
deloy:
# global:每个集群每个服务实例启动一个容器,replicated:指定集群中实例的副本数量
mode: global
# 限制服务部署节点
placement:
constraints:
# docker node update --label-add role=标签名称 主机名
- node.labels.rabbitmq == true
restart_poicy:
# 容器启动后默认执行命令
command: tracker
# 端口信息(宿主机端口:容器内部端口)
ports:
# TCP端口映射
- "22122:22122"
# UDP端口映射
- "22123:22123/udp"
# 指定使用的虚拟网络
networks:
- my-net
cap_add:
- ALL
# 设置docker容器linux参数
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=1
# 设置最大打开文件数
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
# 挂载目录(宿主机目录:容器内部目录)
volumes:
- /etc/localtime:/etc/localtime
- /data/fastdfs:/etc/fdfs
# 环境变量
environment:
TRACKER_SERVER: fdfs-tracker:22122
GROUP_NAME: group
ports设置规则多样:
4. 重用配置
& <<:*的用法后续补充
B. 服务编排要想按照指定启动顺序的话,docker提供的depends_on或links,只能保证服务依赖也相应启动,但是无法保证启动成功后,再启动其他服务,目前比较好的就是wait-for-it.sh脚本实现;
5. 服务远程调试参数
-Xdebug -Xrunjdwp:transport=dt_socket,address=28080,suspend=n,server=y
6. 重启策略(restart_policy):restart_policy判断依据是进程退出(Container process exited)或内存溢出(killed by out of memory);
A. 参数condition的三种状态
none:要容器退出就重启容器;
on-failure:在容器非正常退出时(退出状态非0),才会重启容器;
any:默认策略,在容器退出时不重启容器;
B. docker容器的退出状态码
0:表示容器正常退出,例如 stop 容器;
非0:表示容器退出异常(退出状态码采用 chroot 标准),例如执行 docker run 失败后的容器退出;
125:Docker 守护进程本身有错误;
126:容器启动后,要执行的默认命令无法调用;
127:容器启动后,要执行的默认命令不存在;
其他状态码:容器启动后在容器内部执行命令,该命令退出时的返回状态码,就作为容器的退出状态码;
查看容器状态码: