苹果M1上安装Centos8及Docker

Arm版本的Docker安装,主要步骤:

1.下载Centos镜像; 2.安装Parallels Desktop 17以上的版本;3.更换Centos源;4.解决冲突;5.安装Docker+Docker-compose;6.更换Docker源

下载Centos镜像

推荐无界面安装:

下载Parallels

两种方案:

  • 使用macwk下载 + pd runner
  • 正版购买(按年付 + 25%的折扣的优惠码),买断不适合macOS喜欢更新的小伙伴;

下载后,安装激活,并新建:

image-20220829233311280

选择下载的iso路径,开始安装。

安装Centos

这里注意全程是命令行界面操作,需要设置的有:

  • 安装位置确认;->输入5 -> 回车->再按提示c回车->一路按照提示;
  • root用户密码;->输入8->回车->按照提示输入密码123456->弱密码yes->回车
  • 创建用户;
  • (可选)设置网络;

image-20220829230822902

当上面的设置好了之后,按b,即可以开始安装了。

配置网络:

/etc/sysconfig/network-scripts目录下存放着网卡的配置文件,文件名称是ifcfg- 网卡名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a498f9b8-ffce-ace8-16fe-f4106a97f5bf
DEVICE=ens33
# 这里修改一下
ONBOOT=yes

如果使用dhcp自动获取ip,只需将ONBOOT=no修改为ONBOOT=yes即可。

如果是静态IP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #将dhcp修改为stati表示使用静态ip
DEFROUTE=yes
IPADDR=192.168.0.10 #设置IP地址
NETMASK=255.255.255.0 #设置子网掩码
GATEWAY=192.168.0.1 #设置网关
DNS1=114.114.114.114 #设置dns
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a498f9b8-ffce-ace8-16fe-f4106a97f5bf
DEVICE=ens33
#将no改为yes
ONBOOT=yes

使用 nmcli c reload重启一下。

更换Centos源

基本思路:

  • 删除所有官方源;
  • 下载阿里源;

操作步骤:

1
2
3
4
5
6
7
8
9
10
11
cd /etc/yum.repos.d/

mkdir -p ../backup

mv ./Centos-Linux-* ../backup

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo

yum makecache

yum -y update

解决冲突

Problem 1: problem with installed package podman

错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@localhost ~]# sudo yum install docker-ce docker-ce-cli containerd.io
Failed to set locale, defaulting to C.UTF-8
Docker CE Stable - aarch64 669 B/s | 3.5 kB 00:05
Error:
Problem 1: problem with installed package podman-3.3.1-9.module_el8.5.0+988+b1f0b741.aarch64
- package podman-3.3.1-9.module_el8.5.0+988+b1f0b741.aarch64 requires runc >= 1.0.0-57, but none of the providers can be installed
- package containerd.io-1.6.8-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.6.8-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- cannot install the best candidate for the job
- package runc-1.0.0-66.rc10.module_el8.5.0+1004+c00a74f5.aarch64 is filtered out by modular filtering
- package runc-1.0.0-72.rc92.module_el8.5.0+1006+8d0e68a2.aarch64 is filtered out by modular filtering
Problem 2: problem with installed package buildah-1.22.3-2.module_el8.5.0+911+f19012f9.aarch64
- package buildah-1.22.3-2.module_el8.5.0+911+f19012f9.aarch64 requires runc >= 1.0.0-26, but none of the providers can be installed
- package docker-ce-3:20.10.17-3.el8.aarch64 requires containerd.io >= 1.4.1, but none of the providers can be installed
- package containerd.io-1.4.10-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.10-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.11-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.11-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.12-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.12-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.13-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.13-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.3-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.3-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.3-3.2.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.3-3.2.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.4-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.4-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.6-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.6-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.8-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.8-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.9-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.4.9-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.5.10-3.1.el8.aarch64 conflicts with runc provided by

解决办法:

1
2
3
4
5
6
yum erase podman buildah

# or
dnf remove podman buildah

dnf clean all && dnf check && dnf check-update

Problem 2: problem with installed package buildah

解决办法(同上):

1
2
3
4
5
6
7
yum erase buildah

# or
dnf remove buildah


dnf clean all && dnf check && dnf check-update

Problem: problem with installed package containers-common

错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:01:24 ago on Mon Aug 29 09:35:22 2022.
Error:
Problem: problem with installed package containers-common-2:1-2.module_el8.5.0+890+6b136101.noarch
- package containers-common-2:1-2.module_el8.5.0+890+6b136101.noarch requires runc, but none of the providers can be installed
- package containerd.io-1.6.8-3.1.el8.aarch64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- package containerd.io-1.6.8-3.1.el8.aarch64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.aarch64
- cannot install the best candidate for the job
- package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.aarch64 is filtered out by modular filtering
- package runc-1.0.0-66.rc10.module_el8.5.0+1004+c00a74f5.aarch64 is filtered out by modular filtering
- package runc-1.0.0-72.rc92.module_el8.5.0+1006+8d0e68a2.aarch64 is filtered out by modular filtering
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

解决办法:

1
2
3
dnf remove -y containers-common-2:1-2.module_el8.5.0+890+6b136101

dnf clean all && dnf check && dnf check-update

安装Docker+Docker-compose

推荐使用daocloud加速源

1
2
3
4
5
6
# 安装docker
curl -sSL https://get.daocloud.io/docker | sh

# 安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.10.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

更换Docker源

两种方法:

  • 一键配置
  • 手动配置

一键配置:

1
2
# daocloud
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

手动配置:

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

上面的命令,其实就是在文件 /etc/docker/daemon.json 中写入如下内容:

1
2
3
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

然后,把docker服务重启了一下。