本文主要是一篇偏重实操的实践教程,重点在于带着大家完成 Docker 的安装与基础镜像操作,帮助读者先把整个流程跑通。由于文章更侧重操作演示,因此对部分命令和代码的原理说明没有展开得特别细致。
如果你在这次安装过程中对某些步骤、命令含义或配置细节还有不太理解的地方,也不用担心。我会在下一篇博客《Docker 安装踩坑记录:结合 K8s 环境准备深入理解每一步为什么要这样做》中针对这些内容进行更加详细的讲解,尤其会更照顾新手和零基础读者,帮助大家把"为什么这样做"和"每一行命令的作用"真正弄明白。
1 实验环境说明
| 项目 | 配置 |
|---|---|
| 操作系统 | openEuler 24.03 LTS |
| 内核版本 | 6.6.0-28.0.0.34.oe2403.x86_64 |
| 系统架构 | x86_64 |
| 虚拟化平台 | VMware Workstation |
| 网卡名称 | ens33 |
| Docker 版本 | 20.10.9 (CE) |
查看系统信息:
bash
uname -r # 查看内核发行版本
uname -a # 查看完整系统信息
r 是 kernel release,表示"内核发行版本号"。
a 是 all,表示"显示所有可用信息"。
2 系统初始化与网络配置
2.1 配置静态 IP 地址
编辑网卡配置文件:
bash
vim /etc/sysconfig/network-scripts/ifcfg-ens33
文件内容如下(根据实际网络环境修改 IP、网关、DNS):
ini
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens33
UUID=5427c03c-4eca-4c7d-b66d-736b1b5c4c60
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.100
PREFIX=24
GATEWAY=192.168.116.2
DNS1=114.114.114.114
注意:
BOOTPROTO必须设置为static,ONBOOT必须为yes,否则网络不会在开机时自动生效。
重载网络配置并激活:
bash
nmcli con reload
nmcli con up ens33
验证 IP 是否生效:
bash
ip addr show ens33
2.2 修改主机名
bash
hostnamectl set-hostname master
3 系统安全配置(防火墙 / Swap / SELinux)
部署 Docker 及 Kubernetes 集群前,需关闭防火墙、Swap 和 SELinux,以避免对容器网络和资源调度产生干扰。
3.1 关闭防火墙
bash
systemctl stop firewalld # 立即停止
systemctl disable firewalld # 禁止开机自启
systemctl status firewalld # 验证状态,应显示 inactive (dead)
3.2 关闭 Swap
bash
# 临时关闭
swapoff -a
# 永久关闭(注释 /etc/fstab 中的 swap 行,重启后生效)
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
验证 Swap 是否关闭:
bash
free -h
注意:Swap 行的 total 应为 0B。
3.3 关闭 SELinux
bash
# 临时关闭(切换为 Permissive 模式)
setenforce 0
# 永久关闭(修改配置文件,重启后生效)
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
验证 SELinux 状态:
bash
getenforce
注意:临时关闭后返回
Permissive,永久关闭并重启后返回Disabled。
4 Docker 安装与启动
4.1 添加 Docker YUM 仓库
创建仓库配置文件,使用阿里云镜像源:
bash
vim /etc/yum.repos.d/docker-ce.repo
写入以下内容:
ini
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
4.2 安装依赖工具
bash
dnf install -y dnf-utils
DNF 包管理器安装 dnf-utils 工具包,-y 表示全程自动确认,无需手动输入 yes。
4.3 更新缓存并安装 Docker
bash
# 刷新本地软件包缓存
dnf makecache
# 安装指定版本的 Docker CE 及其相关组件
dnf install -y docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io
安装的三个组件:
| 组件 | 作用 |
|---|---|
docker-ce |
Docker 守护进程(引擎本体) |
docker-ce-cli |
Docker 命令行客户端 |
containerd.io |
底层容器运行时 |
4.4 启动 Docker 并设置开机自启
bash
systemctl enable docker && systemctl restart docker
enable 是设置开机自启,restart 是立即重启服务,&& 是把两条命令串联起来,前一条成功才执行后一条。
4.5 验证安装
bash
docker version # 查看客户端和服务端版本
docker info # 查看 Docker 运行环境详情
提示:
docker version输出中若 Server 部分正常显示版本号,表示 Docker 安装成功且 daemon 运行正常。
5 Docker 镜像加速器配置
Docker Hub 在国内访问受限,需配置国内镜像加速地址。
5.1 创建配置文件
bash
mkdir -p /etc/docker
vim /etc/docker/daemon.json
写入以下内容:
json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://4191b026bcf646a7b2be600018054f3b.mirror.swr.myhuaweicloud.com",
"https://docker.1ms.run",
"https://doublezonline.cloud",
"https://dislabaiot.xyz",
"https://docker.fxxk.dedyn.io",
"https://dockerpull.org",
"https://docker.unsee.tech",
"https://hub.rat.dev",
"https://docker.1panel.live",
"https://docker.nastool.de",
"https://docker.zhai.cm",
"https://docker.5z5f.com",
"https://a.ussh.net",
"https://docker.udayun.com",
"https://hub.geekery.cn"
]
}
注意:
daemon.json必须是合法的 JSON 格式,不允许注释、多余逗号或省略号,否则 Docker 无法启动。可用python3 -m json.tool /etc/docker/daemon.json验证格式是否正确。
5.2 重启 Docker 使配置生效
bash
# daemon-reload 是重新加载 systemd 的配置文件
systemctl daemon-reload
# restart docker 是重启 Docker 服务进程
systemctl restart docker
5.3 验证加速器是否生效
bash
docker info | grep -A 5 "Registry Mirrors"
输出中应包含所配置的镜像地址。
6 Docker 镜像基本操作
6.1 拉取镜像
bash
docker pull hello-world # 拉取测试镜像,验证 Docker 环境
docker pull centos:7 # 拉取指定版本镜像
docker pull centos # 不指定标签时默认拉取 latest
6.2 查看本地镜像
bash
docker images
6.3 导出镜像
将镜像打包为 tar 文件,用于离线迁移:
bash
docker save -o centos_image.tar centos:latest
6.4 导入镜像
从 tar 文件加载镜像:
bash
docker load -i centos_image.tar
6.5 重命名镜像
为镜像添加新标签:
bash
docker tag <镜像ID> new_name:new_tag
6.6 删除镜像
bash
docker rmi centos:latest
注意:若有容器正在使用该镜像,需先停止并删除容器后才能删除镜像。
rmi是 remove image 的缩写,专门用于删除本地镜像。Docker 的命令设计有一套命名规律,rm是删除容器,rmi是删除镜像,多了一个i就代表 image。
7 Docker 容器操作与镜像提交
7.1 启动交互式容器
bash
docker run -it centos
-i 保持标准输入开启,-t 分配伪终端,两者配合进入容器内部的 shell。
7.2 修复容器内 CentOS 镜像源
CentOS 官方源已停止维护,需切换至归档地址 vault.centos.org:
bash
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
7.3 在容器内安装软件
bash
yum clean all
yum makecache
yum install -y vim
7.4 退出容器(不停止)
按 Ctrl+P,再按 Ctrl+Q,容器将在后台继续运行。
提示:直接输入
exit会停止容器进程。
7.5 查看所有容器
bash
docker ps -a
ps是 process status
7.6 提交容器为新镜像
将修改过的容器保存为新镜像(容器 ID 通过 docker ps -a 获取):
bash
docker commit <容器ID> centos/vim
验证新镜像:
bash
docker images
8 使用 Dockerfile 构建镜像
相比 docker commit,Dockerfile 方式构建过程透明、可复现,是生产环境的标准做法。
8.1 编写 Dockerfile
bash
vim Dockerfile
内容如下:
dockerfile
FROM centos
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum clean all
RUN yum makecache
RUN yum install vim -y
| 指令 | 作用 |
|---|---|
FROM |
指定基础镜像 |
RUN |
在构建过程中执行命令,每条生成一个镜像层 |
8.2 构建镜像
bash
docker build -t centos/vv .
-t 指定镜像名称,. 表示使用当前目录下的 Dockerfile。
8.3 验证构建结果
bash
docker images
构建成功后可在列表中看到 centos/vv 镜像。