在 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/
相关推荐
a***59261 小时前
docker离线安装及部署各类中间件(x86系统架构)
docker·中间件·系统架构
程序辕日记2 小时前
Linux环境docker离线安装教程
linux·docker
可可苏饼干2 小时前
容器与 Docker
运维·笔记·学习·docker·容器
107102 小时前
Docker学习笔记
笔记·学习·docker
洛可可白2 小时前
Ubuntu 上安装 Docker
linux·ubuntu·docker
赴前尘2 小时前
docker 配置ipv6地址
java·docker·容器
热爱跑步的恒川3 小时前
OpenEuler上Docker Compose部署PostgreSQL数据库
数据库·docker·postgresql