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"]
- 更改容器和镜像的存储位置,避免存储在系统驱动器上,注意文件位置需要两个斜杠:
"data - root": "D:\\DockerStuff"
- 将上述内容组合到 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
- 按回车键。
-
当 PowerShell 提示符返回时,输入
docker ps并按回车键。 -
记录分配给容器的名称,例如
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 容器配置和容器镜像管理有了更深入的了解。希望你能在实际应用中灵活运用这些知识,提高工作效率和容器管理水平。
超级会员免费看
43

被折叠的 条评论
为什么被折叠?



