Docker开篇

Docker开篇
[TOC]
云服务概述
云计算的定义:是分布式计算的一种,将各种资源(计算,网络,服务器,存储)整合到一个共享池中,按需分配给租户
云计算的特点
优点:可扩展性,超大规模,分布式,虚拟化,按需服务,高可用性,极其廉价
缺点:安全性不能够得到保障,还有就是网络,必须联网
云计算的分类:
- 依据==运营模式==分:
- **公有云:**企业、机构,将云服务==外包==给公共云的提供商
- **私有云:**通常企业、机构自己拥有
- **混合云:**包含私有云和公有云的混合应用
- 依据==服务模式==分:
- IaaS
- PaaS
- SaaS
服务模式

🔹 IaaS
- 基础设施即服务:
- 买来的毛坯房,可以自己装修水电、家电等等,俗称硬装

✅ 厂商提供服务器、存储、网络等“硬件底座”
包括 CPU、内存、等…其它基本的计算资源
- 你自装操作系统、部署中间件、运行环境、应用
==VMware 是典型的 IaaS 技术==
但严格来说,VMware 本身是虚拟化平台
我们可以租用这些硬件,节省了维护成本和办公场地
公司可以在任何时候利用这些硬件来运行其应用
用户不需要再采购价格昂贵的服务器和磁盘阵列了,所有的硬件都由==IaaS==提供
🔹 PaaS
- 平台即服务
- 买的精装修房,可以布置一些家电、墙上挂一些装饰等等,俗称软装

✅ 厂商连操作系统、中间件、运行环境都配好了
- 底层平台3/4帮你铺建好了
- 你只管写代码、部署应用、控制数据
- 开发更加便捷
🔹 SaaS
- 软件即服务
- 租的房子,直接拎包入住

✅ 打开APP就能用(如钉钉、企业微信),所有东西云厂商搞定
虚拟机 vs 容器
从操作系统上看:
-
虚拟机要模拟出一整套完整的操作系统
- 所以它很笨重,冗余步骤多,存在开机启动流程
-
容器只需要把它的==核心部分==给模拟出来就行
- 轻量,秒级启动
- 高效部署
从硬件上来看:
-
虚拟机要模拟出完整的硬件
-
容器不需要模拟硬件,更没有自己内核
- 直接运行在物理机内核上
- 不同容器之间共享一个物理机内核

从故障影响来看:
-
虚拟机的==中间件==和==运行环境==是错综复杂的揉合在一起的
- 某一点出错,可能所有的程序都跑不成了
-
容器只需要一个==docker引擎==,上面跑着各种容器
- 容器之间相互隔离,所以安全性极高
- 一个挂掉不影响其他容器
从资源效率来看:
-
虚拟机资源开销大,利用率低
- CPU,内存都是虚拟的
- 存在性能消耗
- CPU,内存都是虚拟的
-
容器直接使用宿主机的CPU和内存,服务器利用率更高
- 服务器性能可以被压榨到极致
从部署方式来看:
-
虚拟机需要手动部署
- 或者借助自动化脚本或工具进行部署
-
容器可以免去部署过程
- 直接基于镜像启动
从兼容性来看:
-
各种虚拟化产品互不兼容,虚拟机==迁移困难==
- 虚拟化整个硬件,包含完整的操作系统
-
容器==移植性强==
- 只打包应用及其依赖
进化之路

1.会有端口冲突问题2.资源环境,应用没有做到隔离3.利用率低4.部署繁琐5.跨平台迁移非常头疼===================================什么是Docker?1. docker是一个开源的容器引擎,基于go语言开发;2. 也是一个轻量级,可移植的容器,容器之间相互隔离,安全性高,秒级启动;3. 各个容器之间相互隔离,所以相互之间不会有接口,并且容器开销极其低
文档地址: https://docs.docker.com/manuals/核心组件

想要运行一个Docker服务,包括==五大组件==
🚢 ①Docker Client (客户端)
通俗解释:这是你和 Docker 打交道的“遥控器”
动作图解:当你敲下 docker run、docker build 或 docker pull 这些命令时
-
相当于你在这个“遥控器”上按下了按钮
-
你不需要知道后台怎么干活的,你只需要发号施令
⚙️ ②Docker Daemon (守护进程)
通俗解释:这是真正的“码头工头”
动作图解:客户端发来的命令(箭头指向),全都被它接收了
- 它负责在后台默默干活,比如去拉取镜像、创建容器、管理网络等
- 你平时看不见它,但它一直在运行
📦 ③Docker Image (镜像)
通俗解释:这是“软件安装包”
动作图解:它里面包含了程序运行需要的一切(代码、环境、库)
- 注意它是只读的
🏭 ④Docker Registry (镜像仓库)
通俗解释:这是“应用商店”
动作图解:当你本地没有需要的镜像时,Daemon 会去这里下载
- 这里存放着各种现成的镜像
- Docker 官方的公共仓库
- 第三方仓库(阿里云)
- 企业私有仓库
📦 ⑤Docker Container (容器)
通俗解释:这是真正“跑起来的程序”
动作图解:镜像是死的(静态文件),容器是活的(动态进程)
-
从
Images变成了Containers- 这意味着,Docker 给镜像加了一个“可写层”,让它真正运行了起来
-
你可以基于同一个镜像,启动好几个容器,它们互不干扰
工作原理

Docker 是一个 Client-Server(客户端-服务器)架构
- 发送指令:用户通过 Docker Client(如命令行终端)发出操作请求
- 通信传输:Client 通过 Socket 接口将指令发送给 Docker Daemon(服务端守护进程)
- Socket(一种通信管道/约定)
- 计算机之间进行通信的一种约定
- 执行操作:Docker Daemon 接收指令后,负责具体的容器管理工作(如创建、运行、停止容器等),并将结果返回给 Client
安装部署
版本选择?
- Docker CE(社区版):免费、开源,适合个人和中小团队开发/测试用
- 功能完整但无官方支持
- Docker EE(企业版):商业版,由 Docker 公司提供
- 适合企业生产环境,有安全、管理、支持保障
- 👆红帽下载Docker的官方文档
1️⃣下载yum仓库
我们直接用 Docker 官方源服务器下载核心组件时
- 如
download.docker.com- 网络阻断,会导致
docker-ce未能下载
- 网络阻断,会导致
我们可以更换为国内镜像源, 如阿里云
[root@Docker ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo'我这里操作系统是Rocky10'[root@Docker ~]# ll /etc/yum.repos.d/docker*-rw-r--r-- 1 root root 2081 Apr 16 17:31 /etc/yum.repos.d/docker-ce.repo[root@Docker ~]# dnf makecache[root@Docker ~]# dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin[root@Docker ~]# systemctl enable --now dockerCreated symlink '/etc/systemd/system/multi-user.target.wants/docker.service' → '/usr/lib/systemd/system/docker.service'.[root@Docker ~]# docker --versionDocker version 29.4.0, build 9d7ad9f[root@Docker ~]# systemctl is-active dockeractive2️⃣下载RPM包安装

Index of linux/rhel/10/x86_64/stable/Packages/
- 👆链接

[root@Client01 ~]# cd /server/tmp/[root@Client01 tmp]# lltotal 0
[root@Client01 tmp]# lscontainerd.io-2.2.3-1.el10.x86_64.rpm docker-ce-cli-29.4.0-1.el10.x86_64.rpmdocker-buildx-plugin-0.30.1-1.el10.x86_64.rpm docker-compose-plugin-5.1.0-1.el10.x86_64.rpmdocker-ce-29.4.0-1.el10.x86_64.rpm[root@Client01 tmp]# dnf -y install \ ./containerd.io-2.2.3-1.el10.x86_64.rpm \ ./docker-ce-29.4.0-1.el10.x86_64.rpm \ ./docker-ce-cli-29.4.0-1.el10.x86_64.rpm \ ./docker-buildx-plugin-0.30.1-1.el10.x86_64.rpm \ ./docker-compose-plugin-5.1.0-1.el10.x86_64.rpm[root@Client01 tmp]# docker --versionDocker version 29.4.0, build 9d7ad9f[root@Client01 tmp]# systemctl enable --now dockerCreated symlink '/etc/systemd/system/multi-user.target.wants/docker.service' → '/usr/lib/systemd/system/docker.service'.[root@Client01 tmp]# systemctl is-active dockeractive3️⃣二进制包安装
💡 这种方式“更通用”
-
无视系统差异:
- 不管你是 RHEL 10、CentOS 7 还是 Ubuntu,只要内核支持,解压即用
-
干净:
- 卸载时只需停止服务,删除
/usr/bin/下的文件和 service 文件即可
- 卸载时只需停止服务,删除
1)下载二进制包[root@Client02 ~]# export DOCKER_VERSION="29.1.4"# 设置版本号变量 (你也可以改成 27.1.1 或其他稳定版)[root@Client02 ~]# curl -fsSL \"https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz" \ -o docker-${DOCKER_VERSION}.tgz# 下载 Docker 二进制包[root@Client02 ~]# curl -fsSL \"https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64" \ -o docker-compose# 下载 Docker Compose 插件'下载到当前目录下 && 并 -o 改了名字(curl)'[root@Client02 ~]# chmod +x docker-compose# 赋予 Compose 执行权限"不是tar包,不保留x权限" --> 直接下载的二进制文件(默认644)
2)解压与安装[root@Client02 ~]# tar tf docker-${DOCKER_VERSION}.tgzdocker/docker/docker-initdocker/docker-proxydocker/dockerdocker/containerd-shim-runc-v2docker/runcdocker/ctrdocker/dockerddocker/containerd[root@Client02 ~]# tar -xvzf docker-${DOCKER_VERSION}.tgz[root@Client02 ~]# cp docker/* /usr/bin/'既然是全部复制过来了,那么解压出来的docker目录就什么都没有了'[root@Client02 ~]# cp docker-compose /usr/bin/# 将二进制文件(命令)都复制到系统 PATH 路径下# 这样我们就能在任何目录下直接使用 docker 命令了
3)配置系统服务[root@Client02 ~]# vim /etc/systemd/system/docker.service[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target
[Service]Type=notify# 核心:指定 dockerd 的路径ExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPIDTimeoutSec=0RestartSec=2Restart=alwaysStartLimitBurst=3StartLimitInterval=60sLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTasksMax=infinityDelegate=yesKillMode=processOOMScoreAdjust=-500
[Install]WantedBy=multi-user.target
4)启动与验证[root@Client02 ~]# systemctl daemon-reload# 重新加载 systemd 配置[root@Client02 ~]# systemctl enable --now dockerCreated symlink '/etc/systemd/system/multi-user.target.wants/docker.service' → '/etc/systemd/system/docker.service'.[root@Client02 ~]# docker --versionDocker version 24.0.9, build 2936816脚本安装
#!/bin/bash#================================# 作者: 久棹# 用途: 在 Linux 上自动安装/卸载 Docker 容器引擎(二进制方式)# 适用系统: CentOS 7/8/9, Ubuntu 18.04+, Debian 10+ 等 systemd 系统#================================
#================================# 第一部分: 定义变量# 把常用的路径、版本号、下载地址定义为变量,方便后续修改和维护#================================
# --- Docker 相关配置 ---# Docker 的版本号(要与 download 目录下的 tgz 文件名匹配)DOCKER_VERSION=29.1.4# Docker 压缩包的文件名DOCKER_FILENAME=docker-${DOCKER_VERSION}.tgz# Docker 二进制包在 docker.com 上的下载地址DOCKER_URL=https://download.docker.com/linux/static/stable/x86_64/${DOCKER_FILENAME}
# --- Docker Compose 相关配置 ---# Docker Compose 的版本号DOCKER_COMPOSE_VERSION=2.29.2# Docker Compose 在 GitHub 上的文件名(下载后的原始文件名)DOCKER_COMPOSE_FILENAME=docker-compose-linux-x86_64# Docker Compose 在 GitHub 上的下载地址# 注意: GitHub 在国内可能访问不稳定,需要确保网络通畅(最好提前下载)DOCKER_COMPOSE_URL=https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/${DOCKER_COMPOSE_FILENAME}
# --- 安装路径配置 ---# Docker 二进制文件解压后的安装目录# /usr/local 常用于"本地安装软件"的目录# 解压后二进制文件位于 /usr/local/docker/ 下DOCKER_BASEDIR=/usr/local# systemd 服务文件的存放路径(systemd 从这里读取服务配置)SYSTEMD_DIR=/usr/lib/systemd/system# Docker 配置文件目录DOCKER_CONFIG=/etc/docker
# --- 本地目录 ---# 预下载文件的存放目录DOWNLOAD=./download
# 加载操作系统的 ID 变量(如 centos、ubuntu),用于判断系统类型. /etc/os-releaseOS_VERSION=$ID
#================================# 第二部分: 工具函数#================================
#----------------------------------------------------# 函数名: prepare# 作用: 下载指定的文件(如果本地已经有了就跳过下载,节省时间)# 参数:# $1 - 要下载的文件名# $2 - 文件的下载地址(URL)# 使用示例: prepare "docker-26.1.4.tgz" "https://..."#----------------------------------------------------function prepare(){ if [ ! -f ${DOWNLOAD}/$1 ]; then echo "正在下载 $1 ..." wget -T 10 -t 3 "$2" -O ${DOWNLOAD}/$1
if [ $? -ne 0 ]; then rm -f ${DOWNLOAD}/$1 tput setaf 1 echo "错误: 无法下载 $1 ,请检查网络连接!" echo "下载地址: $2" tput sgr0 exit 100 fi echo "下载完成: $1" else echo "文件已存在,跳过下载: $1" fi}
#================================# 第三部分: 安装函数#================================
function InstallDocker(){ # --- 第 1 步: 检查是否以 root 用户运行 --- if [ "$(id -u)" -ne 0 ]; then tput setaf 1 echo "错误: 请使用 root 用户或 sudo 运行此脚本!" echo "用法: sudo bash $0 install" tput sgr0 exit 1 fi
echo "=========================================" echo " 开始安装 Docker v${DOCKER_VERSION}" echo "========================================="
# --- 第 2 步: 根据操作系统安装依赖(wget) --- if [ "$OS_VERSION" == "centos" ] || [ "$OS_VERSION" == "rhel" ]; then rpm -qa | grep -q wget || yum -y install wget echo "已安装 CentOS/RHEL 系统依赖" elif [ "$OS_VERSION" == "ubuntu" ] || [ "$OS_VERSION" == "debian" ]; then dpkg -l | grep -q wget || apt -y install wget echo "已安装 Ubuntu/Debian 系统依赖" fi
# --- 第 3 步: 下载 Docker 二进制包 --- prepare ${DOCKER_FILENAME} ${DOCKER_URL}
# --- 第 4 步: 下载 Docker Compose --- prepare ${DOCKER_COMPOSE_FILENAME} ${DOCKER_COMPOSE_URL}
# --- 第 5 步: 解压 Docker 到安装目录 --- # Docker 官方静态包解压后会生成 docker/ 目录 echo "正在解压 Docker 二进制包 ..." # 如果目录不存在就创建它 if [ ! -d ${DOCKER_BASEDIR}/docker ]; then install -d ${DOCKER_BASEDIR}/docker fi tar xf ${DOWNLOAD}/${DOCKER_FILENAME} -C ${DOCKER_BASEDIR} echo "Docker 二进制文件已安装到: ${DOCKER_BASEDIR}/docker/"
# --- 第 6 步: 安装 Docker Compose --- # Docker Compose 是一个独立的二进制文件,用于编排多容器应用 # 把它放到 docker 的 bin 目录下,统一管理 # 复制的同时改了名 cp ${DOWNLOAD}/${DOCKER_COMPOSE_FILENAME} ${DOCKER_BASEDIR}/docker/docker-compose chmod +x ${DOCKER_BASEDIR}/docker/docker-compose echo "Docker Compose 已安装到: ${DOCKER_BASEDIR}/docker/docker-compose"
# --- 第 7 步: 创建软链接到 /usr/bin/ --- # /usr/bin/ 在系统的 PATH 中,创建软链接后可以直接在终端使用命令 # -s: 创建符号链接(软链接) # -f: 如果链接已存在则覆盖 echo "正在创建软链接 ..." ln -sf ${DOCKER_BASEDIR}/docker/* /usr/bin/ echo "已创建软链接,现在可直接使用 docker、dockerd 等命令"
# --- 第 8 步: 安装命令自动补全 --- # Docker CLI 内置 completion 子命令,可生成 bash/zsh 补全脚本 # bash-completion 包提供动态加载补全的框架 echo "正在配置命令自动补全 ..." if [ "$OS_VERSION" == "centos" ] || [ "$OS_VERSION" == "rhel" ]; then rpm -qa | grep -q bash-completion || yum -y install bash-completion elif [ "$OS_VERSION" == "ubuntu" ] || [ "$OS_VERSION" == "debian" ]; then dpkg -l | grep -q bash-completion || apt -y install bash-completion fi
# 生成 docker 命令补全(bash) docker completion bash > /usr/share/bash-completion/completions/docker 2>/dev/null # 生成 docker-compose 命令补全(bash) ${DOCKER_BASEDIR}/docker/docker-compose completion bash > /usr/share/bash-completion/completions/docker-compose 2>/dev/null # /etc/bash_completion.d/ 只兼容旧版语法,新版 docker 补全写入会报错,已移除
echo "已安装 Docker / Docker Compose 命令自动补全" echo "提示: 重新登录或执行 'source /etc/profile.d/bash_completion.sh' 使其生效"
# --- 第 9 步: 配置镜像加速 --- # /etc/docker/daemon.json 是 Docker 守护进程的配置文件 # registry-mirrors 配置国内镜像加速源,解决从 Docker Hub 拉取镜像慢的问题 mkdir -p ${DOCKER_CONFIG} cat > ${DOCKER_CONFIG}/daemon.json <<EOF{ "registry-mirrors": ["https://docker.1ms.run"]}EOF echo "已配置镜像加速: ${DOCKER_CONFIG}/daemon.json"
# --- 第 10 步: 生成 systemd 服务文件 --- cat > ${SYSTEMD_DIR}/docker.service <<EOF[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target
[Service]Type=notifyExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP \$MAINPIDTimeoutSec=0RestartSec=2Restart=alwaysStartLimitBurst=3StartLimitInterval=60sLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTasksMax=infinityDelegate=yesKillMode=processOOMScoreAdjust=-500
[Install]WantedBy=multi-user.targetEOF echo "systemd 服务文件已生成: ${SYSTEMD_DIR}/docker.service"
# --- 第 11 步: 启动 Docker 并设置开机自启 --- systemctl daemon-reload systemctl enable --now docker &> /dev/null echo "Docker 服务已启动并设置为开机自启"
# ===== 新增:创建 Docker Compose 插件软链接(仅当不存在时) =====mkdir -p /usr/libexec/docker/cli-plugins/# 先判断软链接是否存在,已存在则跳过if [ ! -L /usr/libexec/docker/cli-plugins/docker-compose ]; then # 软链接不存在,再判断源文件是否存在,避免无效链接 if [ -f /usr/local/docker/docker-compose ]; then # 源文件存在,且软链接不存在则,创建软链接 ln -s /usr/local/docker/docker-compose /usr/libexec/docker/cli-plugins/docker-compose echo "软链接已创建:/usr/libexec/docker/cli-plugins/docker-compose -> /usr/local/docker/docker-compose" else echo "警告:源文件 /usr/local/docker/docker-compose 不存在,跳过软链接创建。" fielse echo "软链接已存在,跳过。"fi
# --- 第 12 步: 验证安装结果 --- echo "" echo "=========================================" tput setaf 2 echo " 安装完成!版本信息如下:" tput sgr0 echo "=========================================" echo "" docker version echo "" docker-compose version echo "" tput setaf 3 echo "安装成功!欢迎使用久棹 Docker 二进制安装脚本~" tput sgr0}
#==================# 第四部分: 卸载函数#==================
function UninstallDocker(){ # 检查 root 权限 if [ "$(id -u)" -ne 0 ]; then tput setaf 1 echo "错误: 请使用 root 用户或 sudo 运行此脚本!" tput sgr0 exit 1 fi
echo "=========================================" echo " 开始卸载 Docker" echo "========================================="
# --- 第 1 步: 停止服务并禁用开机自启 --- # disable --now: 同时完成 disable(取消开机自启)和 stop(停止服务) systemctl disable --now docker &> /dev/null echo "已停止 Docker 服务"
# --- 第 2 步: 删除 systemd 服务文件 --- rm -f ${SYSTEMD_DIR}/docker.service echo "已删除 systemd 服务文件"
# --- 第 3 步: 删除 Docker 程序文件 --- # 递归删除整个 docker 二进制目录 rm -rf ${DOCKER_BASEDIR}/docker echo "已删除 Docker 程序文件"
# --- 第 4 步: 删除 Docker 配置和数据目录 --- # /var/lib/docker - Docker 的镜像、容器、卷等数据存储目录 # /var/lib/containerd - containerd 的持久化数据目录 rm -rf /var/lib/docker /var/lib/containerd rm -rf ${DOCKER_CONFIG} echo "已删除 Docker 数据和配置目录"
# --- 第 5 步: 删除软链接 --- # 清理之前在 /usr/bin/ 下创建的软链接 # 这些是 Docker 静态包解压后包含的全部二进制文件 rm -f /usr/bin/{docker,dockerd,docker-init,docker-proxy,containerd,containerd-shim-runc-v2,ctr,runc,docker-compose} echo "已删除软链接"
# --- 第 6 步: 删除命令补全文件 --- rm -f /usr/share/bash-completion/completions/docker rm -f /usr/share/bash-completion/completions/docker-compose rm -f /etc/bash_completion.d/docker rm -f /etc/bash_completion.d/docker-compose echo "已删除命令自动补全文件"
# --- 第 7 步: 重新加载 systemd 配置 --- systemctl daemon-reload
tput setaf 5 echo "卸载成功!欢迎再次使用久棹 Docker 二进制安装脚本~" tput sgr0}
#=============================# 第五部分: 主函数 —— 脚本的入口#=============================
function main(){ # $1 是运行脚本时传入的第一个参数 case $1 in install|i) InstallDocker ;; remove|r) UninstallDocker ;; *) echo "用法: $0 {install|i|remove|r}" echo "" echo " 示例:" echo " 安装: $0 install" echo " 卸载: $0 remove" echo " 简写: $0 i (安装)" echo " 简写: $0 r (卸载)" ;; esac}
# 调用 main 函数,把命令行的第一个参数传进去main $1[root@Docker ~]# tree ././├── download│ ├── docker-29.1.4.tgz│ └── docker-compose-linux-x86_64└── install-docker.sh[root@Docker ~]# chmod +x install-docker.sh[root@Docker ~]# ./install-docker.sh用法: ./install-docker.sh {install|i|remove|r}
示例: 安装: ./install-docker.sh install 卸载: ./install-docker.sh remove 简写: ./install-docker.sh i (安装) 简写: ./install-docker.sh r (卸载)
1)安装[root@Docker ~]# ./install-docker.sh i========================================= 开始安装 Docker v29.1.4=========================================文件已存在,跳过下载: docker-29.1.4.tgz文件已存在,跳过下载: docker-compose-linux-x86_64正在解压 Docker 二进制包 ...Docker 二进制文件已安装到: /usr/local/docker/Docker Compose 已安装到: /usr/local/docker/docker-compose正在创建软链接 ...已创建软链接,现在可直接使用 docker、dockerd 等命令正在配置命令自动补全 ...已安装 Docker / Docker Compose 命令自动补全提示: 重新登录或执行 'source /etc/profile.d/bash_completion.sh' 使其生效已配置镜像加速: /etc/docker/daemon.jsonsystemd 服务文件已生成: /usr/lib/systemd/system/docker.serviceDocker 服务已启动并设置为开机自启
========================================= 安装完成!版本信息如下:=========================================
Client: Version: 29.1.4 API version: 1.52 Go version: go1.25.5 Git commit: 0e6fee6 Built: Thu Jan 8 19:55:48 2026 OS/Arch: linux/amd64 Context: default
Server: Docker Engine - Community Engine: Version: 29.1.4 API version: 1.52 (minimum version 1.44) Go version: go1.25.5 Git commit: 08440b6e Built: Thu Jan 8 19:58:07 2026 OS/Arch: linux/amd64 Experimental: false containerd: Version: v2.2.0 GitCommit: 1c4457e00facac03ce1d75f7b6777a7a851e5c41 runc: Version: 1.3.4 GitCommit: v1.3.4-0-gd6d73eb docker-init: Version: 0.19.0 GitCommit: de40ad0
Docker Compose version v2.29.2
安装成功!欢迎使用久棹 Docker 二进制安装脚本~[root@Docker ~]# docker pull docker.1ms.run/nginx[root@Docker ~]# docker imagesdocker.1ms.run/nginx:latest 1881968aff6f 237MB
2)卸载[root@Docker ~]# ./install-docker.sh r========================================= 开始卸载 Docker=========================================已停止 Docker 服务已删除 systemd 服务文件已删除 Docker 程序文件已删除 Docker 数据和配置目录已删除软链接卸载成功!欢迎再次使用久棹 Docker 二进制安装脚本~info VS inspect
这两个命令是 Docker 运维中最常用的“侦察兵”
docker info:关注宏观环境,看的是 Docker 守护进程(Daemon)和宿主机的整体配置
docker inspect:关注微观个体,看的是具体的镜像或容器的底层元数据
| 特性 | docker info | docker inspect |
|---|---|---|
| 查看对象 | Docker 系统本身 (全局信息) | 具体的容器 或 镜像 (个体信息) |
| 输出格式 | 易读的文本列表 (Key-Value) | JSON 格式的详细数据结构 |
| 典型场景 | ”Docker 装好了吗?存储驱动是 overlay2 吗?" | "这个容器的内网 IP 是多少?端口映射对了吗?“ |
1)系统本身[root@Docker ~]# docker infoClient: Docker Engine - Community Version: 29.4.0 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.33.0 Path: /usr/libexec/docker/cli-plugins/docker-buildx...........
2)镜像详细信息'后面跟的是镜像名称'[root@Docker ~]# docker image inspect nginx:latest[ { "Id": "sha256:7f0adca1fc6c29c8dc49a2e90037a10ba20dc266baaed0988e9fb4d0d8b85ba0", "RepoTags": [ "nginx:latest", "docker.xuanyuan.run/nginx:latest" ], "Comment": "buildkit.dockerfile.v0", "Created": "2026-04-07T17:31:28.277378375Z", "Config": { "ExposedPorts": { "80/tcp": {} }, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NGINX_VERSION=1.29.8", "NJS_VERSION=0.9.6", "NJS_RELEASE=1~trixie", "ACME_VERSION=0.3.1", "PKG_RELEASE=1~trixie", "DYNPKG_RELEASE=1~trixie"
3)容器详细信息"后面跟的是容器ID"[root@Docker ~]# docker container inspect b9ed[ { "Id": "b9ed83fc06e4ce376b9fb89cbb4b736a1571b3258778dac24a486c1b60fda934", "Created": "2026-04-16T11:56:59.766661548Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 2048, "ExitCode": 0, "Error": "", "StartedAt": "2026-04-17T05:56:26.354132076Z", "FinishedAt": "2026-04-16T14:23:30.25369705Z" },docker环境初体验

1)拉取镜像[root@Docker ~]# docker image pull registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1v1: Pulling from yinzhengjie-k8s/apps'如果你不加这个版本号则默认拉取最新的:latest'
2)查看镜像列表[root@Docker ~]# docker image lsregistry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1...[root@Docker ~]# docker images'这个老版命令也是支持的!'| 特性 | docker images | docker image ls |
|---|---|---|
| 功能 | 列出本地镜像 | 列出本地镜像 |
| 命令类型 | 早期版本的命令(快捷别名) | 新版标准命令结构 |
| 推荐度 | ⭐⭐⭐⭐⭐ (更短,老用户习惯) | ⭐⭐⭐⭐⭐ (更规范,逻辑清晰) |
你可以把 docker images 看作是 docker image ls 的快捷指令(别名)
新版规范
随着 Docker 功能越来越多,为了保持命令的逻辑一致性,Docker 引入了对象管理的语法结构(类似于 kubectl 的风格)
docker image:表示我要操作“镜像”这个对象ls:表示我要执行“列出”这个动作- 同理还有
docker container ls(对应docker ps)、docker volume ls等
3)启动镜像[root@Docker ~]# docker container run -d -p 81:80 --name xiuxian registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1b9ed83fc0...-d: # 后台运行-p: # 端口映射--name: # 自己起的别名'修仙xiuxian'# 后面紧跟镜像名字
4)查看容器'正在运行的容器'[root@Docker ~]# docker container lsb9ed83fc06e4 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 "/docker-entrypoint.…" 34 seconds ago Up 34 seconds 0.0.0.0:81->80/tcp, [::]:81->80/tcp xiuxian1.容器id2.镜像名称3.描述信息4.创建时间5.运行了多长时间6.端口映射,tcp协议7.我们刚起的别名[root@Docker ~]# docker ps'老版命令'# 可以实现和上面一样的功能使用 docker ps (快捷写法) | 使用 docker container ls (规范写法) | 功能说明 |
|---|---|---|
docker ps | docker container ls | 查看正在运行的容器 |
docker ps -a | docker container ls -a | 查看所有容器(包括已停止的) |
docker ps -qa | docker container ls -qa | 仅显示所有容器的ID |
-
不加 ==-q选项== 则默认显示完整表格信息(ID、镜像、状态、端口等)
-
测试访问
- http://10.0.0.99:81/
- ==81端口==

镜像管理
1)给镜像打标签'就是起别名' 不复制数据 不占额外空间# 修改名字、版本号,或者两者都改[root@Docker ~]# docker tag registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 xiuxian# 把这个镜像打标签为 "xiuxian"'后面没有加:v1版本号--->默认最新'
2)删除镜像[root@Docker ~]# docker image rm registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1'-f强制删除'===================================🐴'玩个有趣的操作!'# 删除完,我这里还有一个tag后的镜像xiuxian:latest[root@Docker ~]# docker rmi xiuxian:latest# 试着删除一下!Error报错了!unable to delete xiuxian:latest (must be forced)# 不能删除,除非-f强制删除!container b9edxxx is using# 容器b9e正在使用它[root@Docker ~]# docker container lsb9e# 它正在运行[root@Docker ~]# docker container stop b9e# 把这个容器停止了[root@Docker ~]# docker container ls# 正在运行的就没有了[root@Docker ~]# docker container ls -a'但是可以通过-a查看历史运行过的镜像'b9e[root@Docker ~]# docker rmi xiuxian:latest# 我把它停止之后--->接着删除'还是不能删除'[root@Docker ~]# docker rmi -f xiuxian:latest'只有-f才能强制删除'[root@Docker ~]# docker container ls -a# 查看历史运行的容器,依旧查看到了[root@Docker ~]# docker container start b9eb9e'试着启动一下'[root@Docker ~]# docker container ls# 运行起来了'试着访问浏览器,也访问到了'===================================当我强制删除镜像后容器依然能启动❓️是因为 Docker 的存储驱动为了保护已存在的容器,并不会真正删除那些正在被容器使用的底层数据- 镜像 (Image):是一个只读的模板,由多层文件系统组成
- 容器 (Container):是镜像的一个运行实例
- 当容器启动时,Docker 会在镜像的只读层之上,叠加一个可写层 (Writable Layer)
- 你对容器的所有修改(如创建文件、修改配置)都发生在这个可写层
- 容器的运行状态 = 镜像的只读层 + 容器独有的可写层
强制删除镜像时发生了什么?
-
删除了指向数据层的“标签”或“指针”(即镜像的==元数据==)
-
它会尝试清理那些不再被任何容器引用的数据层
关键点在于: 因为你还有一个基于该镜像创建的容器(即使是停止状态),这个容器依然“引用”着镜像的底层数据
为了保护容器的完整性,Docker 的存储驱动会保留这些底层数据,不会真正从磁盘上擦除
虽然容器能启动,但这是一个不推荐的操作
所以,在生产环境中,请务必确保在删除镜像前
- 所有依赖它的容器都已被妥善处理
✅️轩辕镜像

- 上面是官网, 你可以把它理解为第三方镜像仓库
- 因为官方的镜像仓库需要翻墙才行
- 当你配置了第三方镜像仓库, 就可以正常的拉取镜像了!
1)登录注册2)充值流量3)重置用户密码4)本地客户端登录[root@Docker /]# echo 镜像密码 | docker login -u 镜像账户 --password-stdin docker.xuanyuan.runLogin Succeeded# 镜像密码就是刚才重置的密码# 镜像账户是自己注册的手机号- 登录配置 Docker 镜像源配置教程 - 轩辕镜像
- 👆第三方配置的教程
- 非常详细
5)搜索镜像[root@Docker /]# docker search docker.xuanyuan.run/nginx'前面需要带上第三方镜像仓库的地址'NAME DESCRIPTION STARSnginx Official build of Nginx 21252# 有名字,描述信息,和⭐数6)拉取镜像[root@Docker /]# docker pull docker.xuanyuan.run/nginxdocker.xuanyuan.run/nginx:latest# 拉取也是需要带上它的地址7)打标签改名[root@Docker /]# docker image lsdocker.xuanyuan.run/nginx:latest.....[root@Docker /]# docker image tag docker.xuanyuan.run/nginx:latest nginxnginx:latest# 这样就变回来了!

镜像迁移
✅️save和load配合使用1)导出镜像"save"[root@Docker /]# docker image save nginx:latest > server.tar.gz# 导出为server.tar.gz'名字随便起,后缀也可以不是.tar.gz'✅️但我们为了规范,通常导出为tar包docker image save nginx:latest -o server.tar.gz-o # 和上面一致导出'output-->输出'[root@Docker /]# ls server.tar.gzserver.tar.gz
2)拷贝至另一台服务器# 得装的有docker'当然你也可以先把自己的nginx镜像删除了,然后再导入回去'[root@Docker /]# scp server.tar.gz 10.0.0.128:~# 拷贝至它的家目录
3)导入镜像"load"[root@test ~]# ls server.tar.gzserver.tar.gz[root@test ~]# docker image load -i server.tar.gzLoaded image: nginx:latest-i # input输入✅️docker image load < server.tar.gz'功能同上'更简便一点[root@test ~]# docker images | grep nginxnginx:latest文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



