47、Windows Server 2022 上的 Docker 与容器配置及镜像管理

Windows Server 2022 上的 Docker 与容器配置及镜像管理

1. Windows Server 2022 上的 Docker 容器配置

1.1 设置容器重启策略

在使用 Docker 时,可以为容器设置重启策略。以 coreiis 容器为例,可指定其运行模式,如使用 -d 使其在后台运行, -i 保持连接即使未附加, -t 创建远程终端会话。Docker 有四种重启策略,如下表所示:
| 标志名称 | 描述 |
| — | — |
| no | 强制使用 Docker 的默认行为,即不自动重启容器。 |
| on - failure | 适用于错误处理。如果容器因问题退出,将自动重启。 |
| unless - stopped | 除非手动停止容器,否则容器因任何原因退出时都会自动重启。 |
| always | 使用时需谨慎。即使管理员手动停止容器,它也会自动重启。 |

1.2 限制容器资源

1.2.1 限制内存

创建容器时,可使用 --memory 标志指定容器允许使用的内存量。例如,将 coreiis 容器的内存限制为 512MB,命令如下:

docker run -it --memory 512m coreiis
1.2.2 限制 CPU

CPU 限制与内存限制类似,使用 --cpus 标志。若要确保容器只能使用 1 个 CPU 和 512MB 内存,命令如下:

docker run -it --cpus 1 --memory=512m coreiis

1.3 配置 Docker 守护进程

Docker 守护进程的配置文件为 daemon.json ,通过修改该文件可进行大量自定义设置。不过,在 Windows Server 操作系统上, daemon.json 文件并非支持所有可用的配置选项。以下是 daemon.json 文件中可用的部分配置选项:
| 参数 | 描述 |
| — | — |
| authorization - plugins | 允许通过名称或规范文件的位置指定额外的授权源。 |
| dns | 允许为所有容器指定特定的 DNS 服务器。 |
| dns - opts | 允许设置与 DNS 服务器一起使用的选项。 |
| dns - search | 设置所有容器的 DNS 搜索域。 |
| exec - opts | 允许指定运行时执行选项。 |
| storage - driver | 允许选择要使用的存储驱动程序。Windows Server 容器主机支持 windowsfilter (用于 Windows 容器)或 lcow (用于在 Windows 主机上运行的 Linux 容器)。 |
| storage - opts | 允许为所选的存储驱动程序设置特定选项。 windowsfilter 有一个与大小相关的配置项, lcow 有更多可用选项。 |
| labels | 用一组新标签替换守护进程的标签。 |
| log - driver | 容器日志的默认驱动程序。 |
| mtu | 允许指定容器网络将使用的最大传输单元(MTU)。 |
| pidfile | 允许设置守护进程的 pid 文件的路径。 |
| data - root | 告诉 Docker 要存储容器及其镜像的位置。若未使用该参数,默认位置为 c:\ProgramData\docker 。 |
| cluster - store | 指向容器可用于获取证书以支持集群中传输层安全(TLS)通信的系统和端口。使用 cluster - store - opt 标志可指定 .pem 文件在文件系统中的位置。 |
| cluster - advertise | 指定守护进程应使用的 IP 地址和端口号,以向集群宣传自己。 |
| debug | 如果设置为 true ,将守护进程切换到调试模式。仅在积极排查问题时使用。 |
| hosts | 允许设置 Docker 守护进程要连接的系统的 IP 地址和端口号。 |
| log - level | 允许更改守护进程的日志级别。有效值为 debug info warn error fatal 。 |
| tlsverify | 使用 TLS 验证远程连接。 |
| tlscacert | 告诉守护进程可以信任哪些证书颁发机构的证书。 |
| tlscert | 指定 TLS 证书文件的位置。 |
| tlskey | 指定 TLS 密钥文件的位置。 |
| group | 允许更改用于连接的组。默认组为 docker 。 |
| default - ulimits | 设置每个容器的默认 ulimit。如果在构建容器时未指定 ulimit,将使用此参数指定的设置。ulimit 设置任何时候允许打开的文件数量。Docker 容器中的默认值为 1024 个打开文件。 |
| bridge | 将容器附加到网络桥接器。 |
| fixed - cidr | 设置容器的 IPv4 子网。 |
| raw - logs | 确保日志具有完整的时间戳,且无美国国家标准协会(ANSI)颜色。 |
| registry - mirrors | 允许选择要使用的 Docker 注册表镜像。 |
| insecure - registries | 允许与被认为不安全的注册表进行通信。这通常是因为它们仅监听 HTTP 且不支持 TLS,或者使用了不受信任的证书。 |

1.4 创建简单的 daemon.json 文件

以下是创建简单 daemon.json 文件的步骤:
1. 指定 Docker 接受传入通信的端口,示例中不关心连接来源,只关注端口:

"hosts": ["tcp://0.0.0.0:2375"]
  1. 更改容器和镜像的存储位置,避免存储在系统驱动器上,注意文件位置需要两个斜杠:
"data - root": "D:\\DockerStuff"
  1. 将上述内容组合到 JSON 文件中:
{
    "hosts": ["tcp://0.0.0.0:2375"],
    "data - root": "D:\\DockerStuff"
}

2. 容器镜像管理

2.1 对镜像进行更改并保存

2.1.1 创建容器

若要修改容器,首先需要创建它。假设已安装 Docker 并打开 PowerShell 窗口,创建容器的步骤如下:
1. 在 PowerShell 提示符下,运行 docker images 命令。
2. 找到要使用的容器镜像,例如 mcr.microsoft.com/windows/servercore:ltsc2022
3. 输入以下命令创建容器并建立会话:

docker run -dit mcr.microsoft.com/windows/servercore:ltsc2022
  1. 按回车键。
  2. 当 PowerShell 提示符返回时,输入 docker ps 并按回车键。
  3. 记录分配给容器的名称,例如 crazy_chaplygin
2.1.2 连接到容器并进行更改

使用 docker exec 命令连接到容器的 cmd.exe ,命令如下:

docker exec -it <containername> powershell.exe

例如,连接到名为 crazy_chaplygin 的容器:

docker exec -it crazy_chaplygin powershell.exe

连接成功后,可运行 hostname 命令验证。若要在容器中安装 Internet Information Services (IIS),可运行以下 PowerShell 命令:

Install - WindowsFeature Web - Server

安装完成后,输入 exit 并按回车键退出容器。

2.1.3 保存容器更改

由于在 Windows 中不能对运行中的容器进行提交操作,因此需要先停止容器:

docker stop <containername>

然后使用 docker commit 命令保存更改,命令格式如下:

docker commit <containername> <reponame>:<imagename>

2.2 推送镜像到 Docker Hub

2.2.1 登录不同注册表

若要登录不同的注册表,可在 docker login 命令中指定注册表地址:

docker login some.registry.com:8000

输入用户名和密码后即可连接。

2.2.2 重命名镜像

若需要重命名镜像以适合上传到仓库,可使用 docker image tag 命令。例如,将 mcr.microsoft.com/windows/nanoserver:ltsc2022 镜像上传到自己的仓库:

docker image tag mcr.microsoft.com/windows/nanoserver:ltsc2022 <dockerid>/server2022:ltsc2022
2.2.3 推送镜像

登录成功后,可使用 docker push 命令将容器镜像推送到仓库:

docker push <dockerid>/reponame:imagename

2.3 从 Docker Hub 拉取镜像

2.3.1 从公共仓库拉取

从公共仓库拉取镜像非常简单,例如拉取带有 IIS 的 Windows Server Core 容器镜像:

docker pull mcr.microsoft.com/windows/servercore/iis
2.3.2 从私有仓库拉取

从私有仓库拉取镜像的命令与公共仓库相同,但需要先使用 docker login 命令登录。若未指定注册表,默认连接到 Docker Hub,登录后即可像从公共仓库拉取一样进行操作。

通过以上步骤,你可以在 Windows Server 2022 上配置 Docker 容器,对容器镜像进行管理,包括创建、修改、保存、推送和拉取等操作。

2.4 镜像版本控制

在容器镜像管理中,镜像版本控制是一个重要的环节。合理的版本控制可以帮助我们更好地管理和维护镜像,确保每次部署使用的都是正确的版本。虽然文中未详细提及版本控制的具体操作,但在实际应用中,我们可以通过为镜像添加标签来实现版本控制。

例如,我们可以为不同版本的镜像添加不同的标签,如 server2022:ltsc2022-v1 server2022:ltsc2022-v2 等。当我们需要使用特定版本的镜像时,只需指定相应的标签即可。

2.5 公共仓库与私有仓库对比

在使用 Docker Hub 时,我们会接触到公共仓库和私有仓库,它们各有特点,适用于不同的场景。以下是它们的对比:
| 仓库类型 | 登录要求 | 使用场景 |
| — | — | — |
| 公共仓库 | 拉取镜像无需登录 | 适合公开分享的镜像,如常见的操作系统镜像、开源软件镜像等 |
| 私有仓库 | 拉取和推送镜像都需要登录 | 适合企业内部使用的镜像,保护敏感信息和知识产权 |

2.6 操作流程总结

为了更清晰地展示容器镜像管理的操作流程,我们可以使用 mermaid 格式的流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(创建容器):::process
    B --> C(连接到容器并进行更改):::process
    C --> D{是否保存更改?}:::decision
    D -- 是 --> E(停止容器):::process
    E --> F(保存更改):::process
    F --> G{是否推送到 Docker Hub?}:::decision
    G -- 是 --> H(登录 Docker Hub):::process
    H --> I(重命名镜像):::process
    I --> J(推送镜像):::process
    D -- 否 --> K(不保存更改):::process
    G -- 否 --> L(不推送):::process
    K --> M([结束]):::startend
    J --> M
    L --> M

这个流程图展示了从创建容器到最终结束的整个过程,包括是否保存更改、是否推送到 Docker Hub 等决策点,帮助我们更直观地理解操作流程。

3. 总结与建议

3.1 核心要点回顾

  • 在 Windows Server 2022 上配置 Docker 容器时,我们可以设置容器的重启策略、限制容器资源,并通过 daemon.json 文件对 Docker 守护进程进行自定义配置。
  • 容器镜像管理包括创建容器、连接到容器进行更改、保存更改、推送镜像到 Docker Hub 以及从 Docker Hub 拉取镜像等操作。
  • 公共仓库和私有仓库在登录要求和使用场景上有所不同,我们可以根据实际需求选择合适的仓库。

3.2 操作建议

  • 在配置 daemon.json 文件时,要注意不同参数的作用和适用场景,避免因错误配置导致 Docker 服务异常。
  • 在进行镜像操作时,如重命名和推送镜像,要确保镜像名称和标签的规范性,方便后续管理和使用。
  • 对于企业用户,建议使用私有仓库来存储敏感的容器镜像,同时要注意定期备份镜像,以防数据丢失。

3.3 未来展望

随着容器技术的不断发展,Docker 的功能和性能也会不断提升。未来,我们可以期待更便捷的容器配置和管理方式,以及更强大的镜像版本控制和安全机制。同时,与其他技术的集成也将更加紧密,为企业的数字化转型提供更有力的支持。

通过本文的介绍,相信你对 Windows Server 2022 上的 Docker 容器配置和容器镜像管理有了更深入的了解。希望你能在实际应用中灵活运用这些知识,提高工作效率和容器管理水平。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值