首页 > 其他分享 >docker详解介绍+基础操作 (三)

docker详解介绍+基础操作 (三)

时间:2024-10-09 22:46:35浏览次数:3  
标签:配置 介绍 pem 详解 proxy 2375 docker Docker

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

标签:配置,介绍,pem,详解,proxy,2375,docker,Docker
From: https://blog.csdn.net/m0_66705547/article/details/142781152

相关文章

  • USB协议详解第12讲(USB传输-初探)
    1.USB传输、事务、包的关系USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"。OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当于这次传输过程中的5个事务,当然每件事肯定有......
  • 进入容器:掌控Docker的世界
    进入容器:掌控Docker的世界在这个快速发展的技术时代,你是否曾被Docker的庞大生态所吸引?那么,有没有想过在这个容器化的世界里,如何快速高效地“进入”这些隐藏在虚拟墙后的容器呢?容器就如同魔法箱,装载着应用与服务,而你,通过探索这些容器,能够更好地管理、排除故障甚至优化性能。......
  • PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(四)
    无论100个表还是30个表,在使用PasteForm模式的时候,管理端的页面是一样的,大概4个页面,利用不同操作模式下的不同dto数据模型,通过后端修改对应的dto可以做到控制前端的UI,在没有特别特殊的需求下可以做到快速的实现CRUD!免去版本兼容问题,免去前后端不一致的问题,免去样式不一的问题!基......
  • Jvisualvm介绍;使用Jvisualvm:运行jvisualvm.exe;安装gc插件;查看gc
    一,Jvisualvm介绍jvisualvm是用来查看硬件使用情况的工具,多数会用它来看内存的使用情况VisualVM是Netbeans的profile子项目,已在JDK6.0update7中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对......
  • HTTP协议介绍&各个版本功能差异对比
    http协议简介        HTTP全称超文本传输协议(HyperTextTransferProtocol),是一种广泛用于互联网中浏览器与服务器之间的应用层传输协议。简单来说,浏览器向服务器发送HTTP请求,服务器向浏览器返回HTTP响应,两者之间通过这种方式进行“交流”,来使得我们的浏览器可以......
  • USB协议详解第11讲(USB描述符-总结)
    描述符回顾总结1.其实所有的描述符都是USB设备用来描述自己属性及用途的,所以必须在设备端实现对应的描述符,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备、设备需要的总线资源、和设备的通讯方式等等。2.每一个USB设备只有一个设备描述符,主要......
  • redis介绍与安装
    Redis简介Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key-value缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供l......
  • 【答疑解惑】图文深入详解undo和redo的区别及其底层逻辑
    题记:最近有些人问我,undo和redo到底是什么关系,他们中不乏已经入行3-4年的同学,今天咱们就来深入探讨下到底什么是undo和redo,他们分别做什么,底层逻辑原理是什么等等。1.undo1.1undo的存储结构Undo段(UndoSegment):–Undo信息存储在数据库的undo段中,这些段是特殊的数据库对......
  • MT1311-MT1320 码题集 (c 语言详解)
    MT1311·组数c语言实现代码#include<stdio.h>intmain(){intcount=0;//用来记录个数//遍历所有可能的三位数//外层循环:遍历第一位范围是1~9确保第一位不能为0for(inti=1;i<=9;i++){//中层循环:遍历第二位范围是0......
  • docker+Hexo踩坑记
    起因前段时间博客园差点寄了,在高中时曾经用Hexo+GithubPages搭建过博客,但因为各种原因停止服务了,现在打算做个docker镜像作为hexo的服务端,这样以后更换服务器就可以很方便的部署了。前期最开始的想法是在镜像里塞hexo,每次更新文章的时候去容器里更新,整一套流程全部都在容器里,......