docker详解介绍+基础操作 (三)优化配置

发布于:2024-10-12 ⋅ 阅读:(9) ⋅ 点赞:(0)

1.docker 存储引擎

Overlay: 一种Union FS文件系统,Linux 内核3.18后支持

Overlay2:Overlay的升级版,docker的默认存储引擎,需要磁盘分区支持d-type功能,因此需要系统磁盘的额外支持。

关于 d-type 传送门 docker详解介绍+基础操作 (二)-CSDN博客

由于centos8及ubuntu1604版本均支持,其他引擎就不展开说明了

2.docker优化配置

注:新建容器有效,优化前的容器不生效

1)docker优化

优化 Docker 的配置文件(通常是 `/etc/docker/daemon.json`)可以显著提高 Docker 的性能和安全性。以下是一些详细的配置选项和解释,帮助你根据具体需求进行优化。

 ①. 存储驱动优化

 选择合适的存储驱动

Docker 使用存储驱动来管理容器的文件系统。选择合适的存储驱动可以提高性能。

 overlay2:这是默认的存储驱动,适用于大多数情况。它提供了良好的性能和较低的磁盘使用率。

{
    "storage-driver": "overlay2"
  }

devicemapper:适用于某些特定的存储设备,但性能可能不如 overlay2。

  {
    "storage-driver": "devicemapper"
  }

配置存储选项

对于 `overlay2`,可以配置一些高级选项,例如 `size` 和 `mountopt`。
 

{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.size=10G",
    "overlay2.mountopt=nodev"
  ]
}

overlay2.size:设置每个容器的文件系统大小限制。
overlay2.mountopt:设置挂载选项,例如 nodev可以禁用设备文件的挂载。

②. 日志驱动和日志大小限制

限制容器的日志大小可以防止日志文件占用过多磁盘空间。

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

log-driver:指定日志驱动,默认是 `json-file`。
max-size:设置每个日志文件的最大大小。
max-file:设置日志文件的最大数量。

③. DNS 配置

优化 DNS 配置可以提高容器的网络性能。

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "dns-opts": ["ndots:2", "timeout:2", "attempts:2"]
}

dns:指定 DNS 服务器地址。
dns-opts:设置 DNS 查询选项,例如 `ndots`、`timeout` 和 `attempts`。

 ④. 网络配置

优化网络配置可以提高容器的网络性能和安全性。
 

{
  "iptables": true,
  "ip-forward": true,
  "ip-masq": true,
  "userland-proxy": false,
  "bridge": "docker0",
  "fixed-cidr": "172.17.0.0/16",
  "mtu": 1500
}

iptables:启用或禁用 `iptables` 规则。
ip-forward:启用 IP 转发。
ip-masq:启用 NAT 转发。
userland-proxy:禁用用户态代理,使用内核态代理。
bridge:指定默认的网桥接口。
fixed-cidr:指定固定的 CIDR 范围。
mtu:设置最大传输单元(MTU)。

⑤. 安全配置

启用安全选项可以提高容器的安全性。

{
  "security-opt": [
    "apparmor=unconfined",
    "seccomp=unconfined"
  ],
  "cgroup-parent": "/docker-cgroups"
}

apparmor:配置 AppArmor 安全策略。
seccomp:配置 Seccomp 安全策略。
cgroup-parent:指定 cgroup 的父目录。

⑥. 资源限制

限制 Docker 守护进程的资源使用可以防止其占用过多系统资源。
 

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 65536
    }
  },
  "live-restore": true
}

default-ulimits:设置默认的资源限制。
live-restore:启用实时恢复,以便在 Docker 守护进程重启时保持容器运行。

⑦. 实验性功能

启用实验性功能可以尝试新的特性和改进,但需要注意这些功能可能不稳定。
 

{
  "experimental": true
}

⑧. 镜像加速

使用镜像加速器可以加快镜像的下载速度。

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

registry-mirrors:指定镜像加速器的 URL。

 ⑨. 高级配置

数据根目录

指定 Docker 数据的根目录,可以提高磁盘性能。
 

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

data-root:指定 Docker 数据的根目录。

代理配置

配置 HTTP 和 HTTPS 代理,以便 Docker 守护进程可以通过代理访问互联网。

{
  "http-proxy": "http://proxy.example.com:8080",
  "https-proxy": "https://proxy.example.com:8080",
  "no-proxy": "localhost,127.0.0.1,.example.com"
}

http-proxy:HTTP 代理的 URL。
https-proxy:HTTPS 代理的 URL。
no-proxy:不需要通过代理访问的主机列表。

保存配置文件后,重启 Docker 服务以使更改生效。

sudo systemctl daemon-reload && systemctl restart docker

⑩开启远程连接

开启 Docker 的远程连接功能可以让你从其他机器上通过 API 或 CLI 管理 Docker 守护进程。以下是如何配置 Docker 以允许远程连接的详细步骤。

1. 修改 Docker 配置文件

Docker 的配置文件通常是 `/etc/docker/daemon.json`。你需要在这个文件中添加或修改 `hosts` 配置项,以允许远程连接。

1.1 打开配置文件

使用你喜欢的文本编辑器打开 `/etc/docker/daemon.json` 文件:

sudo vim /etc/docker/daemon.json

 1.2 添加或修改 hosts 配置

在 daemon.json 文件中添加或修改 hosts 配置项,以允许远程连接。例如,如果你想允许所有 IP 地址通过 TCP 连接到 Docker 守护进程,可以使用以下配置:
 

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

unix:///var/run/docker.sock:本地 Unix 套接字,用于本地连接。
-tcp://0.0.0.0:2375:允许所有 IP 地址通过 TCP 端口 2375 连接到 Docker 守护进程。

如果你只想允许特定的 IP 地址连接,可以使用以下配置:
 

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://192.168.1.100:2375"]
}

这里 192.168.1.100 是你希望允许连接的 IP 地址。

2. 重启 Docker 服务

保存配置文件后,重启 Docker 服务以使更改生效:

sudo systemctl daemon-reload && systemctl restart docker

 3. 配置防火墙

确保防火墙允许 TCP 端口 2375 的流量。你可以使用 ufw(Uncomplicated Firewall)或其他防火墙工具来配置。

 3.1 使用 ufw

如果你使用ufw,可以运行以下命令允许端口 2375:
 

sudo ufw allow 2375/tcp

 3.2 使用 iptables

如果你使用 iptables,可以运行以下命令允许端口 2375:
 

sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT
sudo service iptables save

4. 验证远程连接

从另一台机器上,使用 docker CLI 连接到远程 Docker 守护进程。例如,假设远程 Docker 守护进程的 IP 地址是 192.168.1.100,你可以运行以下命令:
 

docker -H tcp://192.168.1.100:2375 version

如果连接成功,你应该会看到 Docker 守护进程的版本信息。

5. 安全性考虑

开启远程连接会增加安全风险,因此建议采取以下措施:

使用 TLS 加密:配置 TLS 以加密通信,防止中间人攻击。
限制访问:只允许信任的 IP 地址访问 Docker 守护进程。
使用防火墙:配置防火墙规则,仅允许特定 IP 地址访问端口 2375。
使用认证:配置 Docker 守护进程使用认证机制,例如 HTTP 基本认证或 OAuth。

5.1 配置 TLS

1. 生成 TLS 证书和密钥:

   你可以使用 openssl`生成自签名证书和密钥:

   openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca-key.pem -x509 -days 365 -out ca.pem
   openssl req -newkey rsa:4096 -nodes -sha256 -keyout server-key.pem -out server.csr
   openssl x509 -req -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 365
   openssl req -newkey rsa:4096 -nodes -sha256 -keyout client-key.pem -out client.csr
   openssl x509 -req -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 365

2. 配置 Docker 守护进程:

   在 /etc/docker/daemon.json 文件中添加 TLS 相关配置:

{
     "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
     "tls": true,
     "tlscacert": "/path/to/ca.pem",
     "tlscert": "/path/to/server-cert.pem",
     "tlskey": "/path/to/server-key.pem",
     "tlsverify": true
   }

3. 重启 Docker 服务:

sudo systemctl daemon-reload && systemctl restart docker

4. 从客户端连接:

   从客户端机器上,使用 TLS 连接到 Docker 守护进程:
 

 docker -H tcp://192.168.1.100:2375 --tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem version