admin管理员组文章数量:1516870
1. 环境准备与系统调优
在麒麟系统上折腾Docker,第一步不是急着敲安装命令,而是要把系统环境给理顺了。我见过太多人一上来就
yum install docker
,结果不是报依赖错误,就是后面跑容器的时候各种权限问题、端口映射失败。麒麟系统作为一款优秀的国产操作系统,其底层基于Linux内核,但在软件源、内核模块以及一些系统服务的配置上,有自己的特点。直接照搬Ubuntu或者CentOS的Docker安装教程,大概率会踩坑。
所以,咱们先花点时间,把地基打牢。首先,你需要确认你的麒麟系统版本。打开终端,输入
cat /etc/os-release
或者
uname -a
。我常用的麒麟系统版本是V10,对应的是类似CentOS 8的软件生态。这个信息很重要,因为它决定了我们后续配置软件源时的路径。如果你是桌面版,通常图形界面里也有关于系统的详细信息。知道版本号后,我们才能“对症下药”,找到最匹配的软件仓库。
接下来,是一个
强烈建议
但容易被忽略的操作:更新系统。我知道,很多人觉得系统刚装好,或者用着挺稳定,不想更新,怕出问题。但在部署Docker这件事上,一个过旧的内核可能会导致容器运行时需要的某些特性(比如OverlayFS文件系统、cgroup v2等)不支持或表现异常。执行
sudo yum update -y
或者
sudo dnf update -y
(取决于你的系统版本使用的包管理器)。这个过程可能会花点时间,去喝杯茶,让它自己跑完。更新完成后,
务必重启一次系统
,让新的内核生效。你可以用
uname -r
命令对比一下重启前后的内核版本号,确认已经更新。
最后,检查一下基础依赖。虽然Docker安装脚本通常会处理,但提前装好能避免一些网络问题导致的安装中断。运行
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
。这几个工具分别是管理Yum仓库的、提供设备映射持久化存储支持的,以及逻辑卷管理工具,都是Docker存储驱动(比如devicemapper)可能用到的后台组件。确保它们安装无误,我们的准备工作就算完成了八成。
1.1 清理旧版本与冲突软件
如果你之前在这台麒麟机器上尝试安装过Docker,或者系统预装了一些旧的、不兼容的容器运行时,那么彻底清理就是安装前最重要的一步。残留的旧版本文件和新版本混在一起,会引发各种灵异问题,比如服务启动失败、命令找不到等等。
怎么清理?分几步走。首先,停止任何可能正在运行的Docker相关服务:
sudo systemctl stop docker
和
sudo systemctl stop containerd
。然后,使用包管理器卸载已安装的Docker软件包。命令是
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
。这条命令比较长,它旨在覆盖各种可能的Docker包名,确保卸载干净。
光用yum卸载还不够,因为有些配置文件、镜像、容器数据会保留在硬盘上。我们需要手动删除这些残留目录。执行以下命令:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
/var/lib/docker
是Docker默认的工作目录,里面存放了所有的镜像、容器、卷和网络配置数据。如果你之前有重要的数据在里面,请先备份。
/var/lib/containerd
是更底层的容器运行时数据。删除它们,相当于给Docker来了个“格式化”安装。
最后,检查一下是否还有docker相关的二进制文件残留在系统路径下,比如
/usr/local/bin/
或者
/usr/bin/
。可以用
which docker
和
which containerd
看看,如果有输出,就手动
rm
掉。做完这一切,再执行
docker version
应该会提示命令未找到,这就说明环境干净了,可以开始全新的安装。
2. 配置专属软件源与安装Docker
环境干净了,接下来就是“做饭”的环节。在麒麟系统上安装软件,配置一个速度快又稳定的软件源是关键。默认的源可能没有Docker官方的最新包,或者下载速度慢如蜗牛。这里我推荐使用国内镜像源,比如阿里云或清华大学开源软件镜像站,它们对麒麟系统(CentOS系)的支持很好。
首先,创建一个Docker CE的Yum源配置文件。执行
sudo vim /etc/yum.repos.d/docker-ce.repo
。如果这个文件已经存在(可能来自之前的操作),直接清空覆盖。然后把下面的配置内容贴进去。这里我以阿里云镜像源为例,它的同步速度很快:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=
enabled=1
gpgcheck=1
gpgkey=
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=
enabled=0
gpgcheck=1
gpgkey=
注意:配置文件里的
$releasever和$basearch是变量,Yum会自动替换成你的系统版本(如8)和架构(如x86_64)。重点检查baseurl的路径是否正确。对于麒麟V10,$releasever通常对应“8”是没问题的。
保存退出后,更新一下Yum的缓存,让系统识别这个新源:
sudo yum makecache fast
。没有报错的话,就可以查询可用的Docker版本了。运行
yum list docker-ce --showduplicates | sort -r
,这个命令会列出所有可用的Docker CE版本,并从高到低排序。你会看到一长串列表,从最新的实验版到较旧的稳定版。
2.1 选择与安装特定版本
面对这么多版本,装哪个?我的建议是,
除非有特殊兼容性要求,否则安装最新的稳定版
。Docker发展很快,新版本往往修复了很多旧版本的Bug,提升了性能和安全性。在写这篇文章的时候,最新的稳定版是26.x系列。你可以直接安装指定版本,比如
sudo yum install docker-ce-26.1.4 docker-ce-cli-26.1.4 containerd.io docker-buildx-plugin docker-compose-plugin -y
。
这条命令安装了四个核心组件:
- docker-ce : Docker引擎本体,负责创建和运行容器。
-
docker-ce-cli
: 命令行工具,我们平时敲的
docker命令就是它。 - containerd.io : 工业级标准的容器运行时,Docker引擎实际上是通过它来管理容器生命周期的,更底层、更专业。
-
docker-buildx-plugin 和 docker-compose-plugin
: 这是两个非常实用的插件。
buildx支持多平台镜像构建(比如在AMD64机器上构建ARM64的镜像),compose则是用来通过YAML文件管理多容器应用。把它们一起装上,以后用起来会方便很多。
安装过程会自动处理依赖。如果一切顺利,你会看到“Complete!”的提示。安装完成后,先别急着启动。Docker默认的服务管理是通过systemd,我们需要确认服务单元文件已经就位。执行
ls /usr/lib/systemd/system/docker.service
,看看这个文件是否存在。它定义了Docker服务的启动、停止、重启等行为。
3. 深度配置与镜像加速
软件装好了,相当于汽车发动机有了。但要想开得稳、开得快,还得做一番调校。Docker的配置主要在两个地方:服务启动参数和守护进程配置文件。
首先,我们配置Docker守护进程。创建或编辑
/etc/docker/daemon.json
这个文件。这个文件是Docker引擎的核心配置文件,以JSON格式书写。如果文件不存在,直接创建;如果存在,可以备份后修改。我把我自己常用的配置分享给你:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"data-root": "/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"",
"",
"",
""
],
"live-restore": true,
"storage-driver": "overlay2"
}
我来逐条解释一下这些配置项的作用:
- log-driver 和 log-opts : 设置容器日志的驱动为json-file,并限制单个日志文件最大100MB,最多保留3个文件。这能防止某个容器疯狂写日志把你的磁盘塞满。
-
data-root
: 这是
重磅
配置。它指定了Docker的工作目录。默认是
/var/lib/docker,但通常/var分区空间不大。我强烈建议你把它改到一个空间充足的分区,比如/data/docker。修改前要确保目标目录存在且Docker进程有读写权限。 注意:修改这个路径后,原有的镜像和容器就找不到了,相当于全新安装,请在安装后首次启动前修改。 - exec-opts : 设置cgroup驱动为systemd。对于使用systemd作为初始化系统的麒麟系统,这能提高系统稳定性和资源管理的兼容性。
- registry-mirrors : 镜像加速器列表 ,这是国内使用Docker的必备配置!直接从Docker Hub拉镜像速度很慢,配置了国内镜像站后,速度会有质的飞跃。上面我列了几个常用的,你可以选一个延迟最低的。通常USTC(中科大)和阿里云的镜像速度都不错。
- live-restore : 设置为true后,当Docker守护进程重启时,运行中的容器不会停止。这在维护时非常有用。
-
storage-driver
: 存储驱动。对于较新的内核,
overlay2是性能最好、最推荐的选择。
3.1 启动服务与权限管理
配置保存好后,就可以启动Docker服务了。因为修改了配置文件,我们需要先重新加载systemd的配置:
sudo systemctl daemon-reload
。然后启动Docker:
sudo systemctl start docker
。如果想让Docker在系统启动时自动运行,还要设置开机自启:
sudo systemctl enable docker
。
现在,检查一下服务状态:
sudo systemctl status docker
。你应该看到绿色的“active (running)”字样,表示服务正在愉快地运行。如果有错误(比如红色的failed),通常是因为配置文件
daemon.json
的JSON格式有误(多逗号、少引号),或者
data-root
指向的路径权限不对。可以用
sudo journalctl -u docker.service
查看详细的日志来排错。
服务跑起来了,但还有个烦人的问题:每次执行
docker
命令都要加
sudo
。这很不方便。解决方法是将当前用户加入到
docker
用户组。执行
sudo usermod -aG docker $USER
。这里的
$USER
会自动替换成你的用户名。
重要:执行完这条命令后,你需要完全退出当前终端会话,然后重新登录,这个组权限才会生效。
重新登录后,运行
docker ps
,如果不再需要sudo也能列出容器(即使是空的),说明权限配置成功了。
4. 实战验证与网络配置
理论说了一堆,是骡子是马得拉出来溜溜。我们通过一个完整的实战例子,来验证Docker是否真的在麒麟系统上完美工作了。同时,也会解决一个非常常见的问题:容器端口映射到宿主机后,外部无法访问。
我们用一个轻量级且实用的镜像来测试:Nginx。在终端输入
docker pull nginx:alpine
。这里我特意选了
alpine
标签,它是基于Alpine Linux的镜像,体积非常小,下载快,适合测试。拉取镜像的过程,就是检验你配置的镜像加速器是否生效的最好时机。如果速度飞快,几秒钟就下完了,那说明加速器配置成功;如果很慢,可能需要换一个镜像源地址。
镜像拉取成功后,启动一个容器:
docker run -d --name my-nginx -p 8080:80 nginx:alpine
。这条命令做了几件事:
-d
让容器在后台运行;
--name
给容器起个名字叫
my-nginx
;
-p 8080:80
是关键,它将容器内部的80端口映射到宿主机的8080端口。
现在,打开你麒麟系统上的浏览器,访问
。你应该能看到Nginx的欢迎页面。如果是在服务器上,没有图形界面,可以用
curl
命令测试,它会返回HTML代码。看到欢迎信息,恭喜你,最基础的Docker功能完全正常!
4.1 解决防火墙与端口访问问题
但是,很多人在自己机器上测试成功了,从局域网另一台电脑却访问不了这个8080端口。问题大概率出在防火墙。麒麟系统默认的防火墙工具可能是firewalld或者iptables。我们需要放行这个端口。
如果系统使用firewalld
(可以通过
systemctl status firewalld
查看):
-
添加端口到公共区域:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent。--permanent表示永久生效。 -
重载防火墙规则:
sudo firewall-cmd --reload。 -
验证端口是否开放:
sudo firewall-cmd --zone=public --list-ports,看看8080/tcp在不在列表里。
如果系统使用iptables (较旧的版本或最小化安装):
-
添加一条规则:
sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT。 -
保存规则(否则重启失效):对于CentOS 7+/麒麟V10,通常可以用
sudo service iptables save(如果安装了iptables-services包),或者更通用的方法是安装iptables-persistent之类的工具。一个简单粗暴的临时方法是把规则写到启动脚本里,但生产环境建议系统化配置。
除了防火墙,还有一个更深层的原因:
Docker会操作iptables规则
。当你做端口映射时,Docker自动在iptables的NAT表和FILTER表里添加了规则。有时候,你自己手动配置的防火墙规则可能会和Docker添加的规则冲突,或者优先级不对,导致流量被拦截。一个排查思路是,先暂时关闭防火墙(
sudo systemctl stop firewalld
)测试一下,如果外部能访问了,那就确定是防火墙的问题,再按上述方法精细配置。
最后,验证一下容器的运行状态和日志。
docker ps
可以看到容器正在运行。
docker logs my-nginx
可以查看这个Nginx容器的访问日志,当你从浏览器访问时,这里应该会出现对应的访问记录。通过这一整套“拉镜像 -> 启动容器 -> 宿主机访问 -> 外部网络访问 -> 查日志”的流程,你的Docker部署才算经过了完整验证。
5. 生产环境进阶考量与维护
把Docker在麒麟系统上跑起来,对于个人学习或开发测试,可能已经足够了。但如果要上生产环境,或者作为团队内部持续集成/部署的平台,我们还得考虑得更周全一些。这里分享几个我踩过坑之后总结的进阶要点。
首先是
存储规划
。我们之前通过
data-root
修改了Docker的工作目录。在生产环境,这个目录所在的磁盘,我强烈建议使用SSD,并且做好容量监控。Docker镜像、容器日志、构建缓存都会占用大量空间。你可以定期使用
docker system prune -a
命令来清理不再使用的镜像、容器、网络和构建缓存(
注意:这个命令会清理所有未被使用的资源,执行前请确认
)。更好的做法是配置日志轮转(我们在
daemon.json
里已经做了),并考虑将容器的应用数据通过“卷(Volume)”挂载到宿主机特定的、更大的存储分区,而不是放在容器内部。
其次是
资源限制
。默认情况下,一个容器可以耗尽宿主机的所有CPU和内存,这非常危险。我们需要通过Cgroups来限制容器的资源使用。在
docker run
的时候,可以使用
--cpus
、
--memory
、
--memory-swap
等参数。例如:
docker run -d --name my-app --cpus="1.5" --memory="512m" --memory-swap="1g" my-image:tag
。这限制了该容器最多使用1.5个CPU核心、512MB物理内存,并且内存+交换分区总计不超过1GB。对于长期运行的服务,在Docker Compose文件里定义这些限制会更方便管理。
5.1 安全加固与备份策略
安全无小事。默认安装的Docker有一些地方需要加固。第一,确保
docker
用户组里只有可信的用户。因为加入这个组就相当于获得了root权限。定期检查
/etc/group
文件。第二,考虑启用Docker的内容信任(Docker Content Trust, DCT)来只拉取经过签名的镜像,但这在内部环境可能比较繁琐。一个更实际的步骤是,定期扫描镜像中的安全漏洞。可以使用
docker scan
命令(需要登录Docker Hub),或者集成开源的镜像扫描工具如Trivy、Clair到你的CI/CD流程中。
备份
是另一个关键。你需要备份什么?主要是两样:1.
自定义的镜像
:如果你构建了自己的业务镜像,需要将其推送到私有的镜像仓库(如Harbor)或Docker Hub的私有仓库。2.
命名卷(Named Volume)中的数据
:对于有状态服务(如数据库),其数据如果存储在Docker管理的命名卷中,你需要找到这些卷在宿主机上的实际路径(通常在
/var/lib/docker/volumes/
下,如果你改了
data-root
,则在对应路径下),然后使用常规的备份工具(如rsync, tar)进行备份。对于绑定挂载(Bind Mount)到宿主机特定目录的数据,直接备份那个目录即可。
最后,聊聊
监控
。
docker stats
命令可以实时查看容器的CPU、内存、网络IO使用情况,适合临时排查。但对于生产环境,你需要一个更系统的方案。可以将Docker守护进程的指标(通过
--metrics-addr
参数开启)暴露给Prometheus,再结合Grafana做可视化。同时,容器内的应用日志也应该被统一收集,可以使用Fluentd、Filebeat等日志驱动,将日志发送到ELK(Elasticsearch, Logstash, Kibana)或Loki等日志中心。这样,当你的麒麟服务器上跑了十几个甚至几十个容器时,你才能清晰地掌握它们的健康状况和性能表现,真正做到心中有数,运维不慌。
版权声明:本文标题:麒麟系统:打造高效Docker化工作流的终极秘籍 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1772305083a3273355.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论