环境信息

容器镜像

序号

服务

原镜像

现镜像

备注

01

数据库MySQL

mysql:8.0.21

arm64v8/mysql:8.0.29

02

对象存储MinIO

minio/minio:RELEASE.2021-01-30T00-20-58Z

minio/minio:RELEASE.2020-11-25T22-36-25Z-arm64

03

Redis

redis:6.2.1

arm64v8/redis:7.2.4-alpine

04

Nginx

nginx:1.19.8

arm64v8/nginx:1.19.8-alpine

05

OpenJDK

openjdk:8u181-jdk-alpine

arm64v8/openjdk:8u181-alpine

构建特殊镜像

Dockerfile ,修改基础镜像为Arm版本

FROM arm64v8/openjdk:8u181-alpine

RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main" > /etc/apk/repositories && echo "http://mirrors.aliyun.com/alpine/v3.8/community" >> /etc/apk/repositories
RUN apk update
RUN apk add yasm && apk add ffmpeg && apk add curl
  • 执行构建

# docker build -t arm64v8/openjdk:8u181-alpine-ffmpeg-curl .
[+] Building 28.8s (8/8) FINISHED                                                                                                                             docker:default
 => [internal] load build definition from Dockerfile                                                                                                                    0.0s
 => => transferring dockerfile: 301B                                                                                                                                    0.0s
 => [internal] load metadata for docker.io/arm64v8/openjdk:8u181-alpine                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                       0.0s
 => => transferring context: 2B                                                                                                                                         0.0s
 => [1/4] FROM docker.io/arm64v8/openjdk:8u181-alpine                                                                                                                   0.0s
 => [2/4] RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main" > /etc/apk/repositories && echo "http://mirrors.aliyun.com/alpine/v3.8/community" >> /etc/apk/reposito  0.4s
 => [3/4] RUN apk update                                                                                                                                                2.1s
 => [4/4] RUN apk add yasm && apk add ffmpeg && apk add curl                                                                                                           25.9s
 => exporting to image                                                                                                                                                  0.3s
 => => exporting layers                                                                                                                                                 0.3s
 => => writing image sha256:804f144aa80e2f8cd31241998806ca12e3977d033b4ba969d29093371118c4d4                                                                            0.0s
 => => naming to docker.io/arm64v8/openjdk:8u181-alpine-ffmpeg-curl

查看系统信息

[root@DC1-06-002 ~]# hostnamectl
   Static hostname: DC1-06-002
         Icon name: computer-server
           Chassis: server
        Machine ID: afd797ca9de64084a9b6c92f3ded6789
           Boot ID: 5203826879d74982a51d192ee4576b9f
  Operating System: Kylin Linux Advanced Server V10 (Lance)
            Kernel: Linux 4.19.90-52.15.v2207.ky10.aarch64
      Architecture: arm64

离线安装 docker

下载 docker包

wget https://download.docker.com/linux/static/stable/aarch64/docker-26.1.3.tgz
# 2024年05月27日 当前时间最新的版本

解压安装

tar -xvf docker-26.1.3.tgz

cp docker/* /usr/bin/

docker.service 文件

vi /usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

重新加载和启动服务

systemctl daemon-reload
systemctl restart docker

查看服务情况

[root@DC1-06-002 ~]# docker info
Client:
 Version:    26.1.3
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 26.1.3
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 926c9586fe4a6236699318391cd44976a98e31f1
 runc version: v1.1.12-0-g51d5e94
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 4.19.90-52.15.v2207.ky10.aarch64
 Operating System: Kylin Linux Advanced Server V10 (Lance)
 OSType: linux
 Architecture: aarch64
 CPUs: 128
 Total Memory: 254GiB
 Name: DC1-06-002
 ID: c5a385e4-be0a-403a-9931-8c9e4409b70b
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
 Product License: Community Engine
#### 安装 docker-ce
>切记这里不要直接yum install docker-ce,会报错的
```bash
# yum install docker-ce docker-ce-cli containerd.io
[root@DC1-06-002 yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io
Last metadata expiration check: 0:03:29 ago on 2024年05月16日 星期四 05时48分22秒.
Error:
 Problem 1: cannot install the best candidate for the job
  - nothing provides container-selinux >= 2:2.74 needed by docker-ce-3:26.1.2-1.el7.aarch64
 Problem 2: cannot install the best candidate for the job
  - nothing provides container-selinux >= 2:2.74 needed by containerd.io-1.6.31-3.1.el7.aarch64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

通过制定安装版本,有测试以下两个版本可以安装成功,可以根据自己情况选择 yum install docker-ce-18.06.3.ce-3.el7yum install docker-ce-3:19.03.15-3.el8yum install docker-ce-3:26.1.2-1.el8

```bash

yum install docker-ce-18.06.3.ce-3.el7 
# 中间可能会弹出交互,直接y确认
[root@DC1-06-002 yum.repos.d]# yum install docker-ce-18.06.3.ce-3.el7
Last metadata expiration check: 0:04:09 ago on 2024年05月16日 星期四 05时48分22秒.
Dependencies resolved.
=============================================================================================================================================================================
 Package                                   Architecture                    Version                                            Repository                                Size
=============================================================================================================================================================================
Installing:
 docker-ce                                 aarch64                         18.06.3.ce-3.el7                                   docker-ce-stable                          31 M
Installing dependencies:
 container-selinux                         noarch                          2:2.73-3.gitd7a3f33.oe1                            OS                                        37 k
 libcgroup                                 aarch64                         0.41-23.oe1                                        OS                                        94 k

Transaction Summary
=============================================================================================================================================================================
Install  3 Packages

Total download size: 31 M
Installed size: 141 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): libcgroup-0.41-23.oe1.aarch64.rpm                                                                                                     756 kB/s |  94 kB     00:00
(2/3): container-selinux-2.73-3.gitd7a3f33.oe1.noarch.rpm                                                                                     66 kB/s |  37 kB     00:00
(3/3): docker-ce-18.06.3.ce-3.el7.aarch64.rpm                                                                                                 14 MB/s |  31 MB     00:02
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                         14 MB/s |  31 MB     00:02
警告:/var/cache/dnf/docker-ce-stable-b401a908f39b682f/packages/docker-ce-18.06.3.ce-3.el7.aarch64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
Docker CE Stable - aarch64                                                                                                                    16 kB/s | 1.6 kB     00:00
Importing GPG key 0x621E9F35:
 Userid     : "Docker Release (CE rpm) <docker@docker.com>"
 Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
 From       : https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                     1/1
  Running scriptlet: libcgroup-0.41-23.oe1.aarch64                                                                                                                       1/3
  Installing       : libcgroup-0.41-23.oe1.aarch64                                                                                                                       1/3
  Running scriptlet: libcgroup-0.41-23.oe1.aarch64                                                                                                                       1/3
  Installing       : container-selinux-2:2.73-3.gitd7a3f33.oe1.noarch                                                                                                    2/3
  Running scriptlet: container-selinux-2:2.73-3.gitd7a3f33.oe1.noarch                                                                                                    2/3
Deprecated, use selabel_lookup

  Running scriptlet: docker-ce-18.06.3.ce-3.el7.aarch64                                                                                                                  3/3
  Installing       : docker-ce-18.06.3.ce-3.el7.aarch64                                                                                                                  3/3
  Running scriptlet: docker-ce-18.06.3.ce-3.el7.aarch64                                                                                                                  3/3
  Verifying        : docker-ce-18.06.3.ce-3.el7.aarch64                                                                                                                  1/3
  Verifying        : container-selinux-2:2.73-3.gitd7a3f33.oe1.noarch                                                                                                    2/3
  Verifying        : libcgroup-0.41-23.oe1.aarch64                                                                                                                       3/3

Installed:
  docker-ce-18.06.3.ce-3.el7.aarch64                    container-selinux-2:2.73-3.gitd7a3f33.oe1.noarch                    libcgroup-0.41-23.oe1.aarch64

Complete!

配置docker启动

systemctl enable docker && systemctl start docker

配置 docker 加速

创建配置目录
mkdir /etc/docker
添加配置文件

/etc/docker/daemon.json

{
  "registry-mirrors": ["https://ccr.ccs.tencentyun.com/","https://docker.mirrors.ustc.edu.cn/"],
  "insecure-registries":["docker.rockylinux.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
     "max-size": "100m",
     "max-file": "10"
  },
  "storage-driver": "overlay2",
  "live-restore": true,
  "default-shm-size": "128M",
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 10,
  "debug": false
}
重启服务
systemctl restart docker

docker 服务状态查看

# 查看docker版本信息
[root@DC1-06-002 local]# docker version
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:24:54 2019
 OS/Arch:           linux/arm64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.3-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       d7080c1
  Built:            Wed Feb 20 02:28:12 2019
  OS/Arch:          linux/arm64
  Experimental:     false

docker-compose 安装

yum -y install python3-devel libffi-devel openssl-devel
pip3 install docker-compose

独立文件方式安装 下载docker-Compose,可以根据情况下载相应的版本,这里选择当前日期(2024年05月16日)最新版本v2.27.0

下载文件
curl -L https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-Linux-aarch64 -o /usr/local/bin/docker-compose

添加执行权限
chmod +x /usr/local/bin/docker-compose
创建软链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose 执行状态

docker-compose -v

Docker Compose version v2.27.0

导出镜像

docker save -o arm64v8-mysql-8.0.29.tar.gz arm64v8/mysql:8.0.29

docker save -o arm64v8-redis-7.2.4-alpine.tar.gz arm64v8/redis:7.2.4-alpine

docker save -o minio-RELEASE.2020-11-25T22-36-25Z-arm64.tar.gz minio/minio:RELEASE.2020-11-25T22-36-25Z-arm64

docker save -o arm64v8-openjdk-8u181-alpine.tar.gz arm64v8/openjdk:8u181-alpine
docker save -o arm64v8-openjdk-8u181-alpine-ffmpeg-curl.tar.gz arm64v8/openjdk:8u181-alpine-ffmpeg-curl
docker save -o arm64v8-nginx-1.19.8-alpine.tar.gz arm64v8/nginx:1.19.8-alpine

报错处理

问题1:Redis ARM64-COW-BUG 警告导致Redis容器无法启动

原因

警告提示内核存在 bug,可能会在进行后台存储操作时导致数据损坏。解决这个问题的推荐方法是更新到最新稳定版本的内核。如果你已经在使用最新的稳定内核但问题仍然存在,可能需要检查是否有特定于你的硬件或特定内核版本的已知问题。

处理

有两种方式: - 升级内核:确保你的操作系统使用的是支持你硬件架构的最新稳定内核。 - 忽略警告:如果你确认当前环境的稳定性,并接受潜在的风险,可以在 Redis 的配置文件 (redis.conf) 中添加以下行来忽略这个特定警告:

ignore-warnings "ARM64-COW-BUG"

相关资料