在 win11 (x86) docker destop 部署 ctyunos 2.0.1 (aarch64) 环境做(伪)容器嵌套

背景:由于本人需要在内网信创环境 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

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 架构说明),因此需要做异构容器的适配。
若本身宿主机和容器是一个架构的可以跳过此步。

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 中配置。

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

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/
相关推荐
记得记得就1513 小时前
docker作业
运维·docker·容器
HaSaKing_7213 小时前
EMQX 多机集群部署完整实践(Docker + 社区版 5.8.8)
运维·docker·容器·emqx
❀͜͡傀儡师4 小时前
Docker部署WebDB数据库开发环境
docker·容器·数据库开发
南山nash4 小时前
企业级docker镜像仓库harbor安装与使用
运维·docker·容器·镜像仓库
m0_485614675 小时前
Linux--Docker网络管理
linux·docker·eureka
Knight_AL7 小时前
Docker 中的端口映射原理:为什么 Nginx 要 `listen 80`,而不是“随便写端口”
nginx·docker·容器
小波小波轩然大波7 小时前
docker总结
网络·docker·容器
qq_2153978977 小时前
内网穿透服务 frps
运维·docker·容器
hello_2508 小时前
排查K8s Pod Core Dump问题
linux·docker·kubernetes
可爱又迷人的反派角色“yang”9 小时前
docker(三)
linux·运维·网络·docker·容器·云计算