目录
[一:Docker 概述](#一:Docker 概述)
[二:Docker 安装](#二:Docker 安装)
[三:Docker 镜像操作](#三:Docker 镜像操作)
[四:Docker 容器操作](#四:Docker 容器操作)
一:Docker 概述
因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。
Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。
特性 | Docker 容器技术 | 传统虚拟机 |
---|---|---|
资源占用 | 共享宿主机内核,仅包含应用及依赖项,资源占用少。 | 每个虚拟机需独立操作系统,占用大量资源。 |
启动速度 | 秒级启动,速度快。 | 分钟级启动,速度较慢。 |
隔离性 | 进程级隔离,较弱但可通过配置增强。 | 完全隔离,安全性更高。 |
性能 | 直接运行于宿主机内核,性能接近原生,损耗小。 | 存在虚拟化层开销,性能损耗较大。 |
可移植性 | 轻量级,易于迁移和部署,支持跨平台。 | 镜像较大,迁移和部署相对复杂。 |
应用场景 | 适合微服务、持续集成/交付、高密度部署等场景。 | 适合需要完全隔离或运行不同操作系统的场景。 |
管理工具 | 通过Dockerfile实现自动化构建和部署,操作简便。 | 依赖虚拟机管理程序(如VMware、VirtualBox),配置较复杂。 |
硬件依赖 | 无需虚拟化硬件,共享宿主机OS内核。 | 需要虚拟化硬件资源,每个VM运行独立OS。 |
典型代表 | Docker、Kubernetes(容器编排)。 | VMware、VirtualBox、Hyper-V。 |
核心概念 | 说明 | 特点 | 类比 | 操作示例 |
---|---|---|---|---|
镜像(Image) | 一个只读模板,用于创建容器。包含运行应用所需的代码、依赖、环境等。 | 不可修改(只读) 分层存储(节省空间) 可复用和共享 | 类似虚拟机的"快照"或"安装光盘" | docker pull nginx (下载镜像) docker build -t myapp . (构建镜像) |
容器(Container) | 镜像的运行实例,可被启动、停止、删除。每个容器相互隔离,拥有独立的文件系统、网络和进程空间。 | 轻量级(共享宿主机内核) 快速启动和停止 可写层(临时修改) | 类似一个"轻量级虚拟机" | docker run -d nginx (运行容器) docker stop <容器ID> (停止容器) |
仓库(Repository) | 集中存储和管理镜像的地方,分为公共仓库(如Docker Hub)和私有仓库(如Harbor)。 | 支持版本管理(通过Tag区分) 可公开或私有化部署 便于团队协作和持续集成/交付(CI/CD) | 类似"应用商店"或"代码仓库" | docker push myimage:latest (推送镜像) docker pull alpine (拉取镜像) |
二:Docker 安装
Docker 支持在主流的操作系统平台上进行使用,包括 Windows 系统、Linux 系统、以及 Macos 系统等。目前最新的 RHEL、Cent 0s 以及 Ubuntu 系统官方软件源中都已经默认自带了 Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。
Centos 系统下安装 Docker 可以有两种方式:一种是使用CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。注意:目前 Docker 只能支持 64 位系统。
本安装方式使用阿里的软件仓库
# 步骤 1: 添加软件源信息
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 步骤 2: 安装必要的系统工具
yum install -y yum-utils
# 步骤 3: 安装 Docker-CE
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 步骤4:添加国内镜像站
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee-tech",
"https://docker.hlmirror.com"
]
}
EOF
# 步骤5:开启Docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker version
# 步骤6:优化内核参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl -p
三:Docker 镜像操作
运行 Docker 容器前需要本地存在对应的镜像。如果不存在本地镜像,Docker 就会尝试从默认镜像仓库下载。镜像仓库是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求。用户也可以通过配置来使用自定义的镜像仓库。
1:获取镜像
[root@localhost ~]# docker pull nginx
docker pull 是 Docker 里的一个关键命令,其主要功能是从 Docker 镜像仓库(默认是 DockerHub)中拉取镜像到本地 Docker 主机
命令语法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
参数说明:
OPTIONS(可选参数)
- -a,--all-tags:拉取指定仓库中的所有标签的镜像。
- --disable-content-trust:默认值为 true,该选项用于禁用镜像内容验证,也就是不验证镜像的签名。
NAME[ :TAG|@DIGEST]
- NAME:这是要拉取的镜像的名称,它可以包含仓库地址和命名空间信息。例如,在 DockerHub 上的镜像,如果是官方镜像,通常直接写镜像名,如nginx;如果是用户或组织的镜像,则格式为 用户名/镜像名,像 dockerlibrary/redis。
- TAG(可选):指定要拉取的镜像的具体标签,用于区分同一镜像的不同版本。若不指定标签,默认会拉取 latest 标签的镜像。
- DIGEST(可选):通过镜像的摘要信息来精确指定要拉取的镜像版本,这能确保拉取的是特定哈希值对应的精确镜像,避免因标签可能指向不同版本而产生混淆。格式如nginx@sha256:abcdef123456...
对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签,也可通过指定的标签来下载特定版本的某一镜像。这里标签(tag)就是用来区分镜像版本的。
从整个下载的过程可以看出,镜像文件是由若干层(Layer)组成,称之为AUFS(联合文件系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。 用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。
2:查看镜像信息
[root@localhost ~]# docker images
docker images 是 Docker 中一个基础且常用的命令,主要用于列出本地 Docker 主机上的镜像信息。docker images 命令会列出本地 Docker 主机上所有可用的镜像,展示镜像的基本信息,帮助用户了解本地镜像的存储情况,包括镜像的仓库名、标签、镜像 ID、创建时间和大小等。
从显示的情况可以读出以下信息:
- REPOSITORY:镜像属于的仓库:
- TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
- IMAGE ID:镜像的唯- ID 号,唯一标识一个镜像;
- CREATED:镜像创建时间:
- VIRTUAL SIZE:镜像大小;
命令语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
参数说明:
OPTIONS(可选参数)
- -a, --all:显示所有镜像(包括中间层镜像)。默认情况下,docker images 只显示顶层镜像。
- digests:显示镜像的摘要信息。
- -f,--filter filter:根据指定的条件过滤输出结果。过滤条件可以是多种类型,例如 dangling=true表示只显示虚悬镜像(没有标签的镜像)。
- --format string:使用 Go 模板语法自定义输出格式。
- --no-trunc:不截断输出信息,完整显示镜像 ID 等较长的字段。
- -9,--quiet:只显示镜像的 ID。
REPOSITORY [:TAG](可选)
- REPOSITORY:指定要显示的镜像仓库名称。
- TAG:指定要显示的镜像标签。如果不指定标签,默认显示所有标签的镜像。
3:查看镜像的详细信息
[root@localhost ~]# docker inspect c15
docker inspect 是 Docker 中一个非常实用的命令,它用于返回 Docker 对象(如容器、镜像、网络、卷等)的底层详细信息,这些信息以 JSON 格式展示,方便用户深入了解 Docker 对象的配置和状态。
命令语法:docker inspect[OPTIONS]NAME|ID [NAME|ID...]参数说明:
OPTIONS:可选参数,用于指定输出格式或过滤特定信息,常见的选项有:
- --format,-f:指定输出格式,使用 Go 模板语法。
- --size,-s:在输出中显示容器的文件系统大小(仅适用于容器)
NAME|ID:要检查的 Docker 对象的名称或 ID,可以指定多个对象。可检查的 Docker 对象
docker inspect 可以检査多种 Docker 对象,常见的包括:
容器(Container):获取容器的详细信息,如运行状态、网络配置、挂载点等。
镜像(Image):查看镜像的构建历史、层信息、环境变量等。
网络(Network):了解网络的配置,如驱动类型、子网信息等。
卷(Volume):获取卷的详细信息,如挂载路径、驱动类型等。
4:修改镜像标签(老名字+新名字)
[root@localhost ~]# docker tag nginx nginx:v1
[root@localhost ~]# docker images
在 Docker 中,docker tag 命令用于为现有的 Docker 镜像添加一个新的标签(tag)。标签本质上是镜像的一个别名,它可以让你更方便地引用和管理镜像,同时也有助于区分不同版本或用途的镜像。
命令语法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
参数说明:
- SOURCE_IMAGE[:TAG]:指定源镜像的名称和标签。SOURCE IMAGE 是源镜像的名称,「:TAG] 是可选的标签,如果不指定标签,默认使用 latest。
- TARGET_IMAGE[:TAG]:指定目标镜像的名称和标签。这是你要为源镜像添加的新标签。同样,TARGET_IMAGE 是目标镜像的名称,[:TAG]是可选的标签,如果不指定标签,默认使用 latest。
docker tag 命令并不会创建一个新的镜像,它只是为现有的镜像添加一个额外的标签。多个标签可以指向同一个镜像,这些标签只是镜像的不同引用方式。
5:删除镜像
# 用镜像名删除
[root@localhost ~]# docker rmi nginx:v1
# 用镜像ID删除
[root@localhost ~]# docker rmi c15
命令语法:docker rmi [OPTIONS] IMAGE [IMAGE...]
参数说明:
OPTIONS(可选参数)
- -f,--force:强制删除镜像。即使有容器正在使用该镜像,也会尝试删除,但不建议轻易使用,因为可能导致容器无法正常运行。
- --no-prune:默认情况下,删除镜像时会同时删除该镜像相关的未使用的父镜像层(虚悬镜像),使用该选项可以禁止删除这些父镜像层。
IMAGE
- 指定要删除的镜像,可以是镜像的名称、标签、镜像 ID,也可以同时指定多个镜像。例如:nginx:latest、123456789abc 等。
注意事项:
- 在删除镜像之前,要确保没有正在运行或已停止的容器依赖该镜像。可以使用 docker ps -a命令査看所有容器,使用 docker stop 和 docker rm 命令停止并删除依赖该镜像的容器后,再删除镜像。
- 镜像的删除是不可逆的操作,删除后无法恢复,所以在执行删除操作前要谨慎确认。
- 当删除一个有多个标签的镜像时,删除一个标签只是移除该标签的引用,只有当所有标签都被删除后,镜像才会真正从磁盘上删除。
6:存出镜像和载入镜像
# (1) 导出镜像
[root@localhost ~]# docker save -o nginx.tar nginx:latest
# (2) 删除镜像
[root@localhost ~]# docker rmi nginx:latest
# (3) 导入镜像
[root@localhost ~]# docker load < nginx.tar
注意事项:
- 文件大小:保存的镜像文件可能会非常大,尤其是包含多个大型镜像时。在保存和传输这些文件时,要确保有足够的磁盘空间和网络带宽。
- 镜像版本:保存的镜像文件中包含的是特定版本(标签)的镜像。在恢复镜像时,要确保使用正确的标签和版本。
- 跨平台兼容性:虽然 Docker 镜像是设计为跨平台的,但在不同的操作系统上保存和加载镜像时,可能会遇到一些兼容性问题。尽量在相同或兼容的操作系统版本之间传输和使用镜像。
- 镜像依赖:如果保存的镜像依赖于其他基础镜像,确保在目标环境中也有这些基础镜像,或者将它们一起保存和传输。
四:Docker 容器操作
容器是 Docker 的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、she11 环境等。镜像是只读模板,而容器会给这个只读模板添加一个额外的可写层。
容器的创建与启动

操作类型 | 命令语法 | 主要功能 | 常用参数 | 示例 |
---|---|---|---|---|
创建容器 | docker create [OPTIONS] IMAGE |
基于指定镜像创建容器但不启动 | -it (交互式终端) -p (端口映射) -v (数据卷挂载) --name (命名容器) |
docker create -it --name mycentos centos:7 |
查看容器 | docker ps [OPTIONS] |
列出容器信息(默认仅显示运行中的容器) | -a (显示所有容器) -q (仅显示ID) -f (按条件过滤) |
`docker ps -a |
启动容器 | docker start [OPTIONS] CONTAINER |
启动已创建的容器 | -a (附加到容器输出) -i (保持交互式输入) |
docker start -ai mycentos |
创建并启动容器 | docker run [OPTIONS] IMAGE [COMMAND] |
直接创建并启动容器(若镜像不存在会自动拉取) | -d (后台运行) -it (交互式终端) --rm (退出后自动删除) |
docker run -d --name web -p 8080:80 nginx |
后台持续运行 | docker run -d IMAGE [COMMAND] |
启动容器并在后台持续运行(需确保容器内有常驻进程) | -d (后台运行) --cpus (限制CPU) -m (限制内存) |
docker run -d centos:7 /bin/bash -c "while true; do echo hello; done" |
关键注意事项
- 容器命名冲突:使用
--name
时需确保名称唯一。 - 资源限制:生产环境建议通过
-m
和--cpus
限制资源。 - 日志查看:后台运行的容器需通过
docker logs
查看输出。
场景 | 推荐命令 | 原因 |
---|---|---|
调试容器 | docker run -it |
直接进入交互式终端 |
批量预配置容器 | docker create + start |
提前配置,按需启动 |
运行服务类容器(如Nginx) | docker run -d |
后台常驻,自动拉取镜像 |
[操作场景对比] |
操作类型 | 命令语法 | 主要功能 | 常用参数 | 注意事项 |
---|---|---|---|---|
终止容器 | docker stop [OPTIONS] CONTAINER |
优雅停止运行中的容器(发送SIGTERM信号) | -t (设置等待时间,默认10秒) |
1. 容器需正确处理SIGTERM信号 2. 注意容器间依赖关系 |
强制终止容器 | docker kill [OPTIONS] CONTAINER |
立即强制终止容器(发送SIGKILL信号) | -s (指定终止信号,如SIGKILL) |
可能导致数据丢失,慎用 |
进入容器 | docker exec [OPTIONS] CONTAINER |
在运行中的容器内执行命令 | -it (交互式终端) -u (指定用户) -w (指定工作目录) |
1. 容器必须处于运行状态 2. 注意权限和环境差异 |
导出容器 | docker export CONTAINER > file.tar |
将容器文件系统导出为tar归档 | 无 | 1. 与docker save 区别:不包含镜像历史 2. 运行中容器导出可能导致不一致状态 |
导入为镜像 | docker import file.tar IMAGE:TAG |
从tar文件创建新镜像 | -c (添加Dockerfile指令) |
生成镜像无构建历史,仅含当前文件系统快照 |
删除容器 | docker rm [OPTIONS] CONTAINER |
删除已停止的容器 | -f (强制删除运行中容器) -v (同时删除关联卷) |
1. 默认需先停止容器 2. 数据卷删除不可逆 |

场景 | 推荐命令 | 优势 |
---|---|---|
正常停止服务 | docker stop -t 20 |
允许应用完成清理操作 |
容器无响应时 | docker kill |
立即释放资源 |
调试容器 | docker exec -it bash |
不中断服务运行 |
[关键操作对比] |
数据持久化建议
-
重要数据应通过
-v
挂载数据卷 -
删除容器时避免使用
-v
参数,除非确认数据可丢弃停止所有运行中的容器
docker stop $(docker ps -q)
删除所有已停止容器
docker rm $(docker ps -aq)
导出所有容器
for id in (docker ps -aq); do docker export id > $id.tar; done