背景:由于本人需要在内网信创环境 ctyunos 中部署 docker 项目,安装的依赖需要提前知道有哪些及什么版本不会冲突,因此在 win11 x86 的 docker 中复现 ctyunos 2.0.1 aarch64 架构的环境。但进一步安装内置 docker、docker-compose、docker-ce 和 docker-cli 时出现各种问题,因此总结了一篇可直接复现的教程以供参考。
目录
- [1. 【可跳过】部署 ctyunos 镜像](#1. 【可跳过】部署 ctyunos 镜像)
-
- [1.1. win11 安装 docker desktop](#1.1. win11 安装 docker desktop)
- [1.2. 下载并安装 ctyunos 2.0.1 镜像](#1.2. 下载并安装 ctyunos 2.0.1 镜像)
- [2. 【关键】启动容器前配置](#2. 【关键】启动容器前配置)
-
- [2.1. 异构架构适配](#2.1. 异构架构适配)
- [2.2. docker desktop 设置](#2.2. docker desktop 设置)
-
- [2.2.1. 开启服务端口](#2.2.1. 开启服务端口)
- [2.2.2. registry-mirrors 下载源配置](#2.2.2. registry-mirrors 下载源配置)
- [2.3. ctyunos 启动命令](#2.3. ctyunos 启动命令)
- [3. 配置并下载 docker 相关依赖](#3. 配置并下载 docker 相关依赖)
-
- [3.1. yum 源配置](#3.1. yum 源配置)
- [3.2. 安装 docker](#3.2. 安装 docker)
- [3.3. 安装 docker-compose](#3.3. 安装 docker-compose)
- [3.4. 安装 docker-ce](#3.4. 安装 docker-ce)
- [3.5. 安装 docker-cli](#3.5. 安装 docker-cli)
- [3.6. 运行 docker 测试](#3.6. 运行 docker 测试)
1. 【可跳过】部署 ctyunos 镜像
本节是部署ctyunos的前置操作,已布置或熟悉的可以跳过。
1.1. win11 安装 docker desktop
- 网上很多相关教程,找到适合的即可。如可参考 Windows 安装 Docker 保姆级图文教程。
1.2. 下载并安装 ctyunos 2.0.1 镜像
- ctyunos 2.0.1 的镜像下载地址:ctyunos-2.0.1 docker_img(注:该镜像仅包含最基础的系统文件,后续下载其他工具可参考章节 3.1 调整 yum 源进行下载)
- 下载后 load 导入镜像。不熟练的可参考docker 镜像的导出、导入。
2. 【关键】启动容器前配置
本节是能否在 ctyunos 容器中继续使用 docker 的关键配置,一定要完成!!!
2.1. 异构架构适配
由于本人主机是 x86 架构,但要模拟的 ctyunos 是 aarch64 架构的(区别可参考 CPU 架构说明),因此需要做异构容器的适配。
若本身宿主机和容器是一个架构的可以跳过此步。
- 具体是安装 buildx 插件,运行模拟容器,构建跨系统编译运行环境,详细步骤参见:在 x86 电脑上获取 docker aarch64
2.2. docker desktop 设置
2.2.1. 开启服务端口
推测:windows 的 docker 架构不支持在容器内部运行 docker 守护进程,强制安装运行会报错。
办法:本文是采用逻辑嵌套关系,但物理平行(都存 windows)。即将宿主机通过网络暴露被容器访问到,让 ctyunos 容器使用宿主机的 docker 守护进程。
注意:开启 tcp 2375 有一定漏洞风险,尽量测试完后关闭。
- 具体是在 Setting -> General 勾选 Expose daemon on tcp://localhost:2375 without TLS

2.2.2. registry-mirrors 下载源配置
鉴于 2.2.1 小节通过借用 windows 主机的 docker 守护进程,因此需要好好配置 docker desktop 的 daemon.json 文件,特别是资源下载的镜像地址。
- 具体是在 Setting -> Docker Engine 中配置。

- 网上有很多镜像资源,比如可参考LLM 国内镜像资源。
- 另外,也可以科学上网实现下载无忧,但需要配置代理,可参考:wsl2 和 docker desktop 代理。
2.3. ctyunos 启动命令
powershell
docker run --privileged --platform=linux/arm64 --name ctyunos -d ctyunos2:2.0.1 /sbin/init
--privileged是用于容器内部最大权限的赋能,以防一些核心功能下载和使用异常。--platform=linux/arm64是必填项,目的告诉容器以异构方式运行,否则启动异常。--name是给镜像启动的容器起的名称。-d是默认以后台模式运行容器。强烈建议使用,因为测试工作量大,若容器关闭且未导出则会初始化为最原始模式,还需要重新安装所需工具和配置。/sbin/init是启动后执行的命令,初始化系统。也可以替换成其他的。- 另外,若以防后续容器删除后还能保留数据,则需要挂载本地文件路径,如
-v D:/Docker/ctyunos:/home是将 windows 的 D 盘文件夹挂载到 ctyunos 的 home 文件夹。
powershell
docker exec --privileged -it ctyunos /bin/bash
- 进入容器内部进行操作。
3. 配置并下载 docker 相关依赖
下述配置和安装顺序尽量不要调整!!!
3.1. yum 源配置
powershell
cd /etc/yum.repos.d/
mv ctyunos.repo ctyunos.repo.bak
cat > /etc/yum.repos.d/ctyunos.repo << EOF
[everything]
name=ctyunos-everything
baseurl=https://mirrors.ctyun.cn/ctyunos/ctyunos-2.0.1/everything/\$basearch/
enabled=1
gpgcheck=0
[update]
name=ctyunos-update
baseurl=https://mirrors.ctyun.cn/ctyunos/ctyunos-2.0.1/update/\$basearch/
enabled=1
gpgcheck=0
[extras]
name=ctyunos-extras
baseurl=https://mirrors.ctyun.cn/ctyunos/ctyunos-2.0.1/extras/\$basearch/
gpgcheck=0
enabled=1
priority=10
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/\$basearch/stable
https://mirrors.nju.edu.cn/docker-ce/linux/centos/7/\$basearch/stable
https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/stable
enabled=1
gpgcheck=0
EOF
yum makecache
- ctyunos 的基础 yum 源必须有,包括 everything、update 和 extras。防止出现不适配的问题,尽量用自带的:CTyunOS 镜像源配置文档。
- docker-ce 相关的需要额外配置下载源 docker-ce-stable。具体可参考:电信 ctyunos 安装 docker-ce。
- 其他若 ctyunos 的基础 yum 源没有,则可参考:
- Centos 7 的 yum 源(aarch64 的:centos 7-aarch64 如何替换yum源)
- OpenEuler 22.03 LTS 的 yum 源(天翼云自研国产操作系统 CTyunOS 配置 yum 源仓库)
3.2. 安装 docker
powershell
yum install -y docker

- 该部分仅使用了 ctyunos 基础 yum 源。
3.3. 安装 docker-compose
powershell
yum install -y docker-compose

- 该部分仅使用了 ctyunos 基础 yum 源。
3.4. 安装 docker-ce
参考使用了电信 ctyunos 安装 docker-ce 中的版本 24.0.6-1,其他版本没做测试。
powershell
yum install -y docker-ce-3:24.0.6-1.el7

- 该部分涉及 docker-ce 的 yum 源,注意配置 3.1 小节。
3.5. 安装 docker-cli
参考使用了电信 ctyunos 安装 docker-ce 中的版本 24.0.6-1,其他版本没做测试。
powershell
yum install -y docker-ce-cli-1:24.0.6-1.el7

- 该部分涉及 docker-ce 的 yum 源,注意配置 3.1 小节。
3.6. 运行 docker 测试
- 可以配置上下文创建关联 win11 的守护进程环境:
powershell
docker context create win11-host --docker host=tcp://host.docker.internal:2375
docker context use win11-host
# 可以用 docker info 命令查看是否用到了宿主机的 registry-mirrors
- 查看 docker 版本:
powershell
docker -v
# Docker version 24.0.6, build ed223bc
- 下载镜像测试:能在 windows 上看到拉取的镜像(逻辑嵌套,物理平行)。
powershell
# 如果提示 api 版本低或高,可以设置临时变量解决:export DOCKER_API_VERSION=1.44
docker pull hello-world
# Using default tag: latest
# latest: Pulling from library/hello-world
# 17eec7bbc9d7: Pull complete
# Digest: sha256:f7931603f70e13dbd844253370742c4fc4202d290c80442b2e68706d8f33ce26
# Status: Downloaded newer image for hello-world:latest
# docker.io/library/hello-world:latest

- 创建容器并执行:
powershell
docker run hello-world
# Hello from Docker!
# This message shows that your installation appears to be working correctly.
#
# To generate this message, Docker took the following steps:
# 1. The Docker client contacted the Docker daemon.
# 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
# (amd64)
# 3. The Docker daemon created a new container from that image which runs the
# executable that produces the output you are currently reading.
# 4. The Docker daemon streamed that output to the Docker client, which sent it
# to your terminal.
#
# To try something more ambitious, you can run an Ubuntu container with:
# $ docker run -it ubuntu bash
#
# Share images, automate workflows, and more with a free Docker ID:
# https://hub.docker.com/
#
# For more examples and ideas, visit:
# https://docs.docker.com/get-started/
