Docker 配置
大约 5 分钟
三. Docker CE 配置
daemon.json
文件是 Docker 守护进程的全局配置文件,允许你自定义 Docker 守护进程的行为。以下是一些常见的 daemon.json
配置项,这些配置项可以用来调整 Docker 的行为,包括但不限于网络、存储、日志记录、安全等方面。其中常规配置项有:
参数 | 说明 |
---|---|
log-devel | 设置日志记录级别 |
log-driver | 设置容器日志的驱动程序 |
log-opts | 设置日志驱动程序提供额外的选项 |
data-root | 指定Docker存储容器和镜像的根目录 |
storage-driver | 存储驱动程序,用于控制 Docker 如何在宿主机文件系统上存储镜像和容器的数据 |
storage-opts | 为存储驱动提供额外的配置选项,以数组形式列出 |
insecure-registries | 允许 Docker 从不安全的私有仓库中拉取镜像 |
registry-mirrors | 配置 Docker 镜像的镜像加速地址 |
max-concurrent-downloads | 限制同时下载的镜像数量 |
max-concurrent-uploads | 限制同时上传的镜像数量 |
default-ulimit | 定义容器的默认 ulimits 设置 |
default-runtime | 指定Docker的默认容器运行时,默认为"runc"。 |
exec-opts | 为 docker exec 命令提供额外选项 |
live-restore | 在Docker守护进程重启时保持容器运行 |
日志配置
参数 | 可选值 |
---|---|
log-devel | debug ,info ,warn ,error ,fatal |
log-driver | json-file ,syslog ,journald ,... |
不同的 log-driver
类型,log-opts
的值会有所不同
json-file
json-file
格式支持的 log-opts
选项
值 | 说明 |
---|---|
max-size | 日志文件的最大大小(例如,100m 表示最大 100MB) |
max-file | 设置保量的日志文件数量 |
compress | 是否压缩日志文件(布尔值) |
labels | 将容器的标签包含在日志条目中 |
env | 将容器的环境变量包含在日志条目中 |
syslog
syslog
格式支持的 log-opts
选项
值 | 说明 |
---|---|
tag | 为 syslog 日志条目设置的标签前缀 |
syslog-address | syslog 服务器的地址(例如,udp://192.168.1.100:514) |
syslog-facility | syslog 设施字段的值(例如,local0) |
案例
json-file
设置日志驱动程序为 json-file
:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"compress": true
}
}
"max-size"
:定义每个日志文件的最大大小为 10MB。当一个日志文件达到这个大小时,Docker 会关闭当前日志文件并创建一个新的日志文件。"max-file"
:设置 Docker 守护进程保留的日志文件数量上限为 3。当达到此限制时,最旧的日志文件将被删除,以确保不会无限增长日志文件的数量。"compress"
:设置是否在日志文件达到max-size
并被滚动时进行压缩。如果设置为true
,日志文件将在滚动后被压缩,这有助于节省磁盘空间。
syslog
设置日志驱动程序为 syslog
:
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "udp://192.168.1.100:514",
"syslog-facility": "daemon",
"tag": "docker-{{.Name}}-{{.ID}}"
}
}
"syslog-address"
:定义 syslog 服务器的地址和端口。在这个例子中,日志数据将通过 UDP 协议发送到192.168.1.100
的 514 端口。你也可以使用 TCP 协议,只需将udp
替换为tcp
。"syslog-facility"
:设置 syslog 设施字段的值,这对于确定日志消息的类别很重要。daemon
是一个常见的设施字段,用于表示守护进程或后台进程的日志。"tag"
:定义 syslog 日志条目的标签前缀。在这个例子中,日志条目的标签将包含容器的名字和 ID。{{.Name}}
和{{.ID}}
是模板语法,分别代表容器的名称和 ID。
存储设置
不同的 storage-driver
类型,storage-opts
的值会有所不同
overlay2
值 | 说明 |
---|---|
"overlay2.metadatafs.size" | 元数据文件系统的大小 |
"overlay2.override_kernel_check" | 控制Docker是否检查 Linux 内核的版本以确保其与 overlay2 存储驱动兼容。 当设置为 true 时,Docker将忽略内核版本检查 |
"overlay2.size" | overlay2 存储驱动程序的大小 |
aufs
值 | 说明 |
---|---|
"dm.basesize" | 基础层(base layer)的大小 |
"size" | 数据目录的总大小 |
案例
overlay2
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.metadatafs.size=1G",
"overlay2.override_kernel_check=true",
"overlay2.size=100GB"
]
}
overlay2.metadatafs.size=1G
将元数据文件系统的大小为 1GB。这可以防止元数据文件系统填满而导致的问题overlay2.size=100GB
将overlay2 存储驱动程序的大小设置为100GB
override_kernel_check=true
忽略内核兼容性检查。 这意味着即使当前使用的内核版本在 overlay2 存储驱动上可能存在问题,Docker 也会继续工作。这样做可能会导致潜在的兼容性问题,因此建议谨慎使用此选项
aufs
{
"storage-driver": "aufs",
"storage-opts": [
"dm.basesize=10G",
"size=20G"
]
}
dm.basesize
设置基础层的大小为 10GBsize
设置数据目录的总大小为 20GB
镜像加速配置
设置 Docker
镜像加速器地址,用于加快下载镜像的速度。
{
"registry-mirrors": ["https://yourmirror.com"]
}
网络配置
设置容器网桥的 IP 地址范围。
{
"bip": "172.30.0.1/24",
"fixed-cidr": "172.30.0.0/16"
}
网络代理配置
值 | 说明 |
---|---|
"httpProxy" | 指定 HTTP 请求的代理服务器地址和端口。 |
"httpsProxy" | 指定 HTTPS 请求的代理服务器地址和端口。 |
"noProxy" | 列表定义了不需要通过代理直接访问的主机或域名,可以是逗号分隔的列表。 |
案例
17.07+ 版本
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:8080",
"httpsProxy": "http://proxy.example.com:8080",
"noProxy": "localhost,127.0.0.1,your.internal.domain"
}
}
"default"
定义了一个名为 "default" 的代理配置"httpProxy"
,"httpsProxy"
分别指定了 HTTP 和 HTTPS 请求的代理服务器地址和端口"noProxy"
列表定义了不需要通过代理直接访问的主机或域名,可以是逗号分隔的列表
低版本
$ mkdir -p /etc/systemd/system/docker.service.d
$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080" "HTTPS_PROXY=http://proxy.example.com:8080"
临时命令
在Docker构建或拉取镜像之前,你可以通过设置环境变量来指定HTTP和HTTPS代理。这可以在Docker命令行中直接完成,或者在你的shell配置文件中(如.bashrc、.bash_profile、.zshrc等)设置,以便每次启动shell时都自动应用这些设置。
export http_proxy="http://proxy.example.com:8080 "
export https_proxy="http://proxy.example.com:8080 "
export no_proxy="localhost,127.0.0.1,your.internal.domain"
ps: 作者亲测,没生效。
docker-compose
如果你在使用Docker Compose,可以在docker-compose.yml文件中为服务设置环境变量,从而间接地为服务容器设置代理。
version: '3'
services:
myapp:
image: myapp:latest
environment:
- http_proxy=http://proxy.example.com:8080
- https_proxy=http://proxy.example.com:8080
- no_proxy=localhost,127.0.0.1,your.internal.domain