macOS M1芯片DockerDeskTop安装CentOS胎教级教程

一、环境

1.1 系统信息

操作系统:MacOS Monterey 12.2.1

芯片:Apple M1 Pro

1.2 软件信息

软件:Docker DeskTop 4.6.0、Final Shell 3.9.2.2

1.3 镜像信息

IMAGE:centos

TAG:latest

CentOS: CentOS Linux release 8.4.2105

二、安装

2.1 拉取镜像

1
docker pull centos

image-20220323182245183

2.2 创建容器

1
docker run -dp 5002:22 --name centos8 --privileged=true  centos /usr/sbin/init

image-20220323182345478

2.2.1 命令详解

run:表示运行容器

-dp: -d和-p的缩写,表示后台运行、表示宿主机端口与Docker容器端口映射

–name:为容器指定一个名称

–privileged:赋予特权,给予容器内的root拥有真正的root权限。

centos:启动的镜像

/usr/sbin/init:解决容器内systemctl命令无权限使用的问题

2.3 进入容器

格式:docker exec -it 容器名 bash

1
2
3
4
#进入容器
docker exec -it centos8 bash
#查询centos版本
cat /etc/redhat-release

image-20220323182641159

2.4 修改yum源

1
2
3
4
5
6
#进入目录
cd /etc/yum.repos.d
#修改配置文件CentOS-Linux-BaseOS.repo
vi CentOS-Linux-BaseOS.repo
#修改配置文件CentOS-Linux-AppStream.repo
vi CentOS-Linux-AppStream.repo
2.4.1修改后的CentOS-Linux-BaseOS.repo文件
1
2
3
4
5
6
7
8
[baseos]
name=CentOS Linux $releasever - BaseOS
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
baseurl=https://vault.centos.org/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2.4.2 修改后的CentOS-Linux-BaseOS.repo文件
1
2
3
4
5
6
7
8
[appstream]
name=CentOS Linux $releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
baseurl=https://vault.centos.org/centos/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

2.5 系统初始化

由于docker中是一个纯净版本,我需要给他安装必要的软件。(当然不止这些,需要用到的时候再装也行)

1
yum install openssh-server vim passwd initscripts -y

image-20220324093010356

2.6 启动ssh服务

1
2
3
4
#启动sshd
systemctl start sshd
#查看sshd进程
ps -ef | grep sshd

image-20220324093336060

2.7 设置虚拟机root用户密码

设置系统root用户密码,输入两次密码设置成功

1
passwd root

image-20220324093716897

2.8 ssh连接测试

2.8.1 通过宿主机shh连接
1
ssh root@localhost -p 5002

此时可以通过宿主机ssh来访问这台虚拟机:ssh root@localhost -p 5002 这里-p就是指定的5002端口去ssh容器中的ss端口。此时做到了ssh到这台容器虚拟机里面。

image-20220324094106165

2.8.2 通过finalshell连接

image-20220324094343767

image-20220324094516073

三、制作镜像

由于基础镜像的centos镜像是纯净版的,需要在基础镜像之上在安装对应的软件。因此如果我们已经安装了一些软件则可以将这个安装的工具的镜像在打包成一个镜像,后续就可以使用这个“基础镜像”来拉起容器,这个时候这个容器里面就可以有个有这些工具了。因此可以用docker命令对这个容器进行镜像制作。使用到的命令:

3.1 基于centos容器制作镜像

格式:docker commit -m “镜像描述” -a “制作者” 容器名 镜像名

1
docker commit -m "test make dockerimage" -a"mike" centos8 centos8:v1

image-20220324095728609

3.2 创建容器

基于创建的centos8:v1的镜像

1
docker run -dp 5003:22 --name centos8v1 --privileged=true  centos8:v1 /usr/sbin/init

image-20220324100118947

3.3 测试ssh连接

1
ssh root@localhost -p 5003

image-20220324100330446

四、问题汇总

4.1 无法使用ifconfig

问题描述:使用ifconfig命令,提示-bash: ifconfig: command not found

问题原因:centos镜像是纯净版的,很多软件没有安装。

解决方案:安装net-tools

1
yum install net-tools -y

image-20220324102244830

4.1.1 测试ifconfig

测试结果:

image-20220324102413249

4.2 无法使用firewalld

问题描述:使用firewalld命令,提示-bash: firewalld: command not found

问题原因:centos镜像是纯净版的,很多软件没有安装。

解决方案:安装firewalld

1
yum install firewalld -y
4.2.1 测试firewalld
1
2
3
4
#查询是否安装
rpm -qa | grep firewalld
#查询防火墙状态
systemctl status firewalld.service

image-20220324152434390

4.3 无法使用wget

问题描述:使用wget命令,提示-bash: wget: command not found

问题原因:centos镜像是纯净版的,很多软件没有安装。

解决方案:安装 wget

1
yum install wget -y
4.3.1 测试wget
1
2
#查询是否安装
rpm -qa | grep wget

image-20220324164608704

4.4 centos中文乱码问题

问题描述:shell脚本中的中文注释乱码

问题原因:centos镜像是纯净版的,很多软件没有安装。

解决方案:安装glibc-langpack-zh中文语言包

1
yum install glibc-langpack-zh -y