Docker 实用配置技巧

简介

Docker Daemon 有很多配置非常有用,必要时可以修改。配置文件的路径是:/etc/docker/daemon.json

不存在就创建,修改后需要重启 docker 服务生效。

修改镜像源

官方镜像源 Docker Hub 在国内非常难以使用,可以替换为国内公有云的镜像源,或者自建的镜像源。

{
  "registry-mirrors": ["https://you_name.mirror.aliyuncs.com"]
}

修改 Docker 存储路径

因为 Docker 存储目录可能非常大,我们有时候需要移到其他磁盘上。可以修改配置生效。

{
  "data-root": "/mnt/docker-data"
}

还有一个办法就是将目录移动到其他磁盘后,创建一个软链接。

mv /var/lib/docker /mnt/docker-data
ln -s /mnt/docker-data /var/lib/docker

日志配置

Docker 的日志输出也可以配置,就是 docker logs 看到的。同时也避免日志文件过大,占用过多磁盘空间。

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

而 json 日志文件存放在 /var/lib/docker/containers/<container_id>/<container_id>_json.log。

ulimit 设置

部分容器运行对 ulimit 有要求,如 Elasticsearch,我们可以在运行时指定。

docker run -d --ulimit nofile=20480:40960 nproc=1024:2048 <image>

也可以进行全局配置。

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 64000,
      "Soft": 64000
    }
  }
}

容器存活

一般情况下,Docker Daemon 不稳定或重启时,所有的容器进程都会停止。我们可以开启 live-restore 功能,这样即使 Docker Daemon 挂掉,容器的进程也不会被杀死。对于我们需要经常升级版本、更改配置等原因重启 Docker,但是不想要重启所有容器的时候非常有用。

{
  "live-restore": true
}

需要注意的是,个别大版本更新或者修改了 Daemon 的 bridge IP,graph driver 等配置,Docker Daemon 重启后会无法恢复对容器的控制,容器进程将会失去 Docker 的管理,需要手动干预。

CGroups 配置

CGroups 是 Control Groups 的缩写,是 Docker 用来限制容器资源使用的组件,如 CPU,内存的限制等。在用容器编排的时候非常有用,如 Kubernetes 中使用 Docker。Docker 默认的 cgroups 驱动是 cgroupfs,而对于有 systemd 的系统来说,systemd 和 cgroups 有更紧密的连接且针对单个进程控制。Kubernetes 也推荐使用 systemd 作为 cgroups 驱动,不然可以看到类似如下的警告:

[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

修改 cgroups 驱动配置。

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

网络代理

网络代理适用于不能直接访问外网下载镜像,或者镜像服务器在特殊的内网,不能直接访问的情况。

下面是使用 systemd 下的配置,首先创建配置目录。

mkdir -p /etc/systemd/system/docker.service.d

创建配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf,加入如下内容,类似于 Linux 的代理设置,这里也是配置 HTTP_PROXY 环境变量。

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

当然可以更灵活,用 HTTP_PROXY 配置 HTTP 代理,HTTPS_PROXY 配置 HTTPS 代理,NO_PROXY 配置不用代理。

[Service]
Environment="HTTP_PROXY=http://proxy-addr:proxy-port" "HTTPS_PROXY=http://proxy-addr:proxy-port" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

然后,需要重新载入配置和重启服务。

sudo systemctl daemon-reload
sudo systemctl restart docker

可以通过如下命令查看是否配置成功。

systemctl show --property=Environment docker

仓库认证

对于自建或者私有仓库,可能需要登陆认证。也就是在拉取镜像前用 docker login 命令登陆。可以在配置文件 ~/.docker/config.json 中配置免登陆令牌,避免反复认证。

{
        "auths": {
                "your-domain.docker.com": {
                        "auth": "TOKEN"
                }
        }
}
  • 33
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值