AlmaLinux9 安装 Docker
注意:在 AlmaLinux 9 中推荐的包管理工具是 dnf,其实和 yum 类似,但是更为强大。
第一章:AlmaLinux9 安装 Docker
1.1 查看操作系统版本和内核版本
- 查看操作系统版本:
- 查看内核版本:
1.2 确保系统是最新的(可选)
- 命令:
1.3 关闭防火墙(可选)
- 查看防火墙状态:
- 关闭防火墙:
1.4 查看并卸载 Podman 和 Buildah(可选)
- 查看 Podman 和 Buildah:
- 卸载 Podman 和 Buildah:
1.5 卸载旧版本的 Docker
- 命令:
dnf -y remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.6 设置 Docker 镜像仓库
- 默认情况下,Docker 在 AlmaLinux 9 中的基础存储库中不可用,所以需要将 Docker CE 存储库添加到 Alima Linux 9 系统中:
1.7 查看 Docker 版本
- 命令:
1.8 安装 Docker
- 安装指定版本的 Docker :
dnf -y install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin --allowerasing
- 本次将安装最新版本的 Docker :
1.9 启动 Docker
- 命令:
- 组合命令:
1.10 查看 Docker 的版本
- 命令:
1.11 阿里云加速
- 命令:
tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://du3ia00u.mirror.aliyuncs.com",
"https://docker.lixd.xyz"
],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"},
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"storage-driver": "overlay2"
}
EOF
1.12 Docker 卸载
- 命令:
第二章:构建多平台的镜像
2.1 什么是多平台的镜像?
- 首先,我们去 DockerHub 中查看 nginx 的镜像:
- 我们可以在
OS/ARCH
看到各个平台(CPU 不同,对应系统的指令集可能有所不同),那么我们能够一次编译镜像实现多个平台自动选择部署,答案是可以的,并且最新版本的 Docker 已经集成进去了。
- 如上图所示,使用
docker buildx
命令就可以将镜像编译为多平台镜像了。
其实,为什么要这么做?我们知道苹果的 Mac Book Pro 已经采用 M1 (ARM)系列的 CPU,而不再是 Intel 系列的 CPU 了;换言之,如果拉取的镜像不支持 arm 架构,那么在苹果系统上是无法运行的,最好的方式就是构建多平台(CPU)的镜像,当拉取镜像的时候自动选择对应架构的镜像运行。
- 到目前为止,有如下几种方式来构建多平台镜像:
- ① 在目前硬件上直接编译,例如:我们可以在 x86 和 arm 架构的硬件上都安装 Docker ,这样直接通过 docker build 命令即可编译不同版本的镜像,但是这种方式太费硬件了,实际情况是我们可能没有那么多架构的硬件。
- ② 在内核中使用 QEMU 仿真程序,其实 QEMU 就相当于模拟器,可以帮助我们模拟多种 CPU 架构的操作系统,但是模拟操作系统太消耗资源了,QEMU 还支持通过
binfmt_misc
在 Linux 内核中注册一个二进制转换处理程序,并在程序运行中动态翻译二进制文件,根据需要将系统调用从目标 CPU 架构转换为当前系统的 CPU 架构,最终的效果看起来就像在本地运行目标 CPU 架构的二进制文件。 - ③ 使用 Dockerfile 中的阶段交叉编译到不同的体系结构。
- ……
2.2 在内核中使用 QEMU 仿真程序构建多平台镜像
2.2.1 启用 binfmt_misc
- 前提条件:Linux 内核必须 >= 4.8 ,并且 binfmt-support 必须 >= 2.1.7 。
- 如果使用的是 Linux ,需要手动启动
binfmt_misc
,对于大多数 Linux 发行版都很容易启动;但是,我们可以直接运行一个特权容器,容器中已经写好了设置脚本:
- 验证是 binfmt_misc 否开启:
- 验证是否开启了相应的处理器:
2.2.2 从默认的构建器切换到多平台构建器
- Docker 默认会使用不支持多 CPU 架构的构建器,可以通过如下的命令查看默认的构建器:
- 上面显示的是默认的内置驱动程序,该程序直接使用内置到 Docker 引擎中的 BuildKit 服务器组件,也称为
Docker 驱动程序
。 - 我们需要基于 Docker 驱动程序创建一个新的构建器,以便支持更复杂的功能,如:多平台构建等。
- 切换到新的构建器:
当然,我们也可以通过命令完成以上的工作:
docker buildx create --name mybuilder --driver docker-container --bootstrap --use
,创建一个新的构建器并使用单个命令切换到这个新创建的构建器。
- 检查新的构建器:
- 查看是否注册成功:
2.2.3 新建 Dockerfile 文件
- 要想构建多种系统架构的镜像,还需要一个支持的 Dockerfile 文件,这里面多架构镜像最主要的就是基础镜像和安装的软件都需要支持多架构。
- 需要说明的是 alpine 支持以下 7 种架构,因为我们制作的镜像也支持以下 7 种架构:
- 更友好的架构名称如下:
- ARM 的系统架构还有如下的简称:
arm64, armv8l, arm64v8, aarch64
arm, arm32, arm32v7, armv7, armv7l, armhf
arm32v6, armv6, armv6l, arm32v5, armv5, armv5l, armel, aarch32
- Intel 的系统架构有如下的简称:
2.3.4 本地构建镜像并推送到远程 Docker Hub 上
- 登录 Docker Hub :略。
- 其中,
$REGISTRY
是 Docker 仓库的地址,$DOCKER_PASSWORD_VAR
是 Docker 仓库的密码,而$DOCKER_USER_VAR
是 Docker 仓库的用户名。- 如果登录的是 Docker Hub ,
$REGISTRY
是可以省略的。
- 本地构建镜像并推送到远程 Docker Hub 上:
docker buildx build --platform \
linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/386,linux/ppc64le,linux/s390x \
-t aurorxa/alpine-multi-platform . --push
注意:
aurorxa/alpine-multi-platform
因为我推送镜像是到 Docker Hub 中,如果你也推送到自己的仓库,这边需要修改。
- 去 Docker Hub 查看:
- 如果想将构建好的镜像保存在本地,可以使用 type 参数指定为 docker ,但是必须分别为不同的 CPU 架构构建不同的镜像,不能合成一个镜像,例如:
docker buildx build --platform \
linux/amd64 \
-t aurorxa/alpine-multi-platform-amd64 -o type=docker .
docker buildx build --platform \
linux/arm/v6 \
-t aurorxa/alpine-multi-platform-arm-v6 -o type=docker .
docker buildx build --platform \
linux/arm64/v8 \
-t aurorxa/alpine-multi-platform-arm64-v8 -o type=docker .
注意:镜像名称需要不一样,不然会产生覆盖现象。
- 查看多平台镜像:
- 其实,底层也是通过一个容器来帮助我们来生成对应平台的镜像的。
更新: 2024-07-01 02:07:54
原文: https://www.yuque.com/fairy-era/yg511q/nyn6tnbv0uuun0gn