Docker 安装、镜像管理与 Dockerfile 构建实战(openEuler 版)

本文主要是一篇偏重实操的实践教程,重点在于带着大家完成 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 必须设置为 staticONBOOT 必须为 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

注意:若有容器正在使用该镜像,需先停止并删除容器后才能删除镜像。

rmiremove 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 镜像。

相关推荐
芥子沫2 小时前
提示词管理工具推荐prompt-manage,Docker一键部署和使用指南
docker·容器·prompt·提示词
2501_915921432 小时前
在 Linux 上通过命令行上架 iOS APP,Fastlane + AppUploader(开心上架)
android·linux·运维·ios·小程序·uni-app·iphone
珠海西格2 小时前
红区之困:分布式光伏爆发背后的“逆流危机”
大数据·运维·服务器·数据库·人工智能·分布式
TeamDev2 小时前
使用 Docker 部署 DotNetBrowser 应用程序
运维·ui·docker·容器·桌面应用·dotnet·dotnetbrowser
什么时候才能变强2 小时前
如何设计一个自动化压测平台:从需求到落地的完整思考
运维·自动化
xiaogai_gai2 小时前
跨境电商ERP系统自动化集成方案
运维·自动化
赛博云推-Twitter热门霸屏工具2 小时前
2026年Twitter自动化营销新趋势:用赛博云推实现热门霸屏与精准获客
运维·自动化·twitter
翘着二郎腿的程序猿2 小时前
自动化 CI/CD 从 0 到 1:Jenkins 本地化部署全指南
运维·jenkins
ErizJ2 小时前
面试 | Docker K8S
docker·面试·kubernetes