自建容器服务
自建容器服务

实际更换到docker compose后可以向后兼容docker,且方便调整配置。目前个人使用已经完全换用docker compose。
使用时新增
docker-compose.yml文件即可,必要时可增加.env文件。
Docker 基本配置
为方便docker国内使用,对docker做一些基本配置。
示例配置:/etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
],
"default-address-pools" : [
{
"base": "172.21.0.0/14",
"size": 27
},
{
"base": "172.25.0.0/13",
"size": 27
}
],
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental": true,
"ip6tables": true
}| 参数 | 解释 | 备注 |
|---|---|---|
registry-mirrors |
Docker 镜像加速代理地址 | |
default-address-pools |
配置容器可以使用的 IP 地址池,定义compose默认划分使用的子网掩码。 | 默认情况下,compose使用16位掩码划分地址,快速消耗私网地址。(先后消耗完B类、C类私网地址) 当与内网地址冲突时,直接会引发路由混乱(Docker底层使用iptables)。出现网络出错,容器无法使用的现象! 多compose时务必配置该参数! |
log-driver |
Docker 日志驱动程序 | json-file 使用 JSON 格式的文件存储日志 |
log-opts.max-size |
单个日志文件的最大大小 | 超过该大小则进行轮转 |
log-opts.max-file |
保留的日志文件数量 | 超过该数量则删除最旧的日志 |
ipv6 |
是否启用 IPv6 支持。 | |
fixed-cidr-v6 |
Docker IPv6 子网的固定 CIDR,定义容器使用的 IPv6 地址范围。 | 启用IPv6后,根据实际情况配置 |
experimental |
是否启用 Docker 实验性特性。 | 根据需求谨慎启用,会涉及到重要特性功能 |
ip6tables |
是否使用 ip6tables 进行 IPv6 的防火墙配置。 | 若启用IPv6,建议开启 |
Docker网络逻辑
该部分默认已有基本的IPv4知识(
CIDR)。
🚨 注意:Docker 根据部署需求将占用私网网段直至耗尽,无论该网段是否被用于外部网络通信,这极可能造成潜在的网络路由故障。
Docker 网络默认地址池
本地网络(dockerd --default-address-pool)及 Swarm 全局网络的默认配置如下:
| 类型 (Type) |
默认地址池 (Default Pool) |
默认子网大小 (Default Size) |
地址范围 | 可分配的子网个数 |
|---|---|---|---|---|
| global (Swarm) |
10.0.0.0/8 | /24 | 10.0.0.0 - 10.255.255.255 | 65536 |
| local | 172.17.0.0/12 | /16 | 172.16.0.0 - 172.31.255.255 | 16 |
| local* | 192.168.0.0/16 | /20 | 192.168.0.0 - 192.168.255.255 | 16 |
🚨注意:
local网络首先从172.17.0.0/12中分配,一旦172.17.0.0/12被用尽,则会从192.168.0.0/16中分配。
Docker 网络默认bridge网络
使用Docker默认配置时,docker-compose仅能创建31个自定义bridge网络。
Docker Compose 31个默认 IPv4 网段分配
{
"default-address-pools": [
// 阶段一:从 172.17.0.0/12 池分配的 15 个 /16 子网
{
"base": "172.18.0.0/16",
"size": 16
}, <-- docker0 (已预留)
{
"base": "172.19.0.0/16",
"size": 16
}, <-- docker_gwbridge (南北向流量,建议预留)
{
"base": "172.20.0.0/16",
"size": 16
}, <-- ucp-bridge ( MKE(Mesos Kubernetes Executor) 组件容器,建议预留)
{
"base": "172.21.0.0/16",
"size": 16
},
{
"base": "172.22.0.0/16",
"size": 16
},
{
"base": "172.23.0.0/16",
"size": 16
},
{
"base": "172.24.0.0/16",
"size": 16
},
{
"base": "172.25.0.0/16",
"size": 16
},
{
"base": "172.26.0.0/16",
"size": 16
},
{
"base": "172.27.0.0/16",
"size": 16
},
{
"base": "172.28.0.0/16",
"size": 16
},
{
"base": "172.29.0.0/16",
"size": 16
},
{
"base": "172.30.0.0/16",
"size": 16
},
{
"base": "172.31.0.0/16",
"size": 16
},
{
"base": "172.32.0.0/16",
"size": 16
},
// 阶段二:从 192.168.0.0/16 池分配的 16 个 /20 子网
{
"base": "192.168.0.0/20",
"size": 20
},
{
"base": "192.168.16.0/20",
"size": 20
},
{
"base": "192.168.32.0/20",
"size": 20
},
{
"base": "192.168.48.0/20",
"size": 20
},
{
"base": "192.168.64.0/20",
"size": 20
},
{
"base": "192.168.80.0/20",
"size": 20
},
{
"base": "192.168.96.0/20",
"size": 20
},
{
"base": "192.168.112.0/20",
"size": 20
},
{
"base": "192.168.128.0/20",
"size": 20
},
{
"base": "192.168.144.0/20",
"size": 20
},
{
"base": "192.168.160.0/20",
"size": 20
},
{
"base": "192.168.176.0/20",
"size": 20
},
{
"base": "192.168.192.0/20",
"size": 20
},
{
"base": "192.168.208.0/20",
"size": 20
},
{
"base": "192.168.224.0/20",
"size": 20
},
{
"base": "192.168.240.0/20",
"size": 20
}
]
}当创建第 32 个bridge网络时,将报错:
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network 调整default-address-pools配置项可解决问题。
参考:The definitive guide to docker’s default-address-pools option
容器手册
自建容器服务
http://blog.zhens.site/docker-selfhost/