目录
[一、Docker 基础与核心概念](#一、Docker 基础与核心概念)
[1.1 什么是 Docker?](#1.1 什么是 Docker?)
[1.2 为什么选择 Docker?](#1.2 为什么选择 Docker?)
[1.3 Docker 与传统虚拟化的区别](#1.3 Docker 与传统虚拟化的区别)
[1.4 Docker 核心组件](#1.4 Docker 核心组件)
[二、Docker 环境搭建](#二、Docker 环境搭建)
[2.1 安装 Docker](#2.1 安装 Docker)
[2.2 配置镜像加速器](#2.2 配置镜像加速器)
[2.3 验证安装](#2.3 验证安装)
[三、Docker 镜像管理](#三、Docker 镜像管理)
[3.1 搜索镜像](#3.1 搜索镜像)
[3.2 获取镜像](#3.2 获取镜像)
[3.3 查看本地镜像](#3.3 查看本地镜像)
[3.4 查看镜像详情](#3.4 查看镜像详情)
[3.5 为镜像添加标签](#3.5 为镜像添加标签)
[3.6 删除镜像](#3.6 删除镜像)
[3.7 镜像的导入导出](#3.7 镜像的导入导出)
[3.8 上传镜像到仓库](#3.8 上传镜像到仓库)
[四、Docker 容器管理](#四、Docker 容器管理)
[4.1 创建容器](#4.1 创建容器)
[4.2 启动容器](#4.2 启动容器)
[4.3 创建并启动容器](#4.3 创建并启动容器)
[4.4 查看容器状态](#4.4 查看容器状态)
[4.5 容器交互](#4.5 容器交互)
[4.6 容器文件操作](#4.6 容器文件操作)
[4.7 容器的启动与停止](#4.7 容器的启动与停止)
[4.8 容器的导入导出](#4.8 容器的导入导出)
[4.9 删除容器](#4.9 删除容器)
[五、Docker 网络管理](#五、Docker 网络管理)
[5.1 端口映射](#5.1 端口映射)
[5.2 Docker 网络模式](#5.2 Docker 网络模式)
[5.3 自定义网络](#5.3 自定义网络)
[5.4 查看网络信息](#5.4 查看网络信息)
[六、Docker 容器状态详解](#六、Docker 容器状态详解)
[七、Docker 实战技巧](#七、Docker 实战技巧)
[7.1 容器自动重启](#7.1 容器自动重启)
[7.2 查看容器日志](#7.2 查看容器日志)
[7.3 清理无用资源](#7.3 清理无用资源)
引言:容器化技术的革命
在当今云计算和微服务架构盛行的时代,Docker 作为容器化技术的领军者,彻底改变了应用的开发、部署和运维方式。本文将全面解析 Docker 技术,从基础概念到高级操作,帮助你快速掌握这一必备技能。
一、Docker 基础与核心概念
1.1 什么是 Docker?
Docker 是一种开源的容器化平台,它允许开发者将应用及其依赖打包到一个标准化的容器中,从而实现 "一次构建,到处运行" 的目标。Docker 的 Logo 设计为一条蓝色鲸鱼拖着许多集装箱,生动地体现了其核心思想:鲸鱼代表宿主机,集装箱代表相互隔离的容器,每个集装箱中都包含自己的应用程序。
1.2 为什么选择 Docker?
相比传统虚拟化技术,Docker 具有以下显著优势:
- 轻量级:容器共享宿主机的操作系统内核,不需要完整的操作系统,资源占用少
- 快速启动:容器启动时间以秒计,远快于虚拟机的分钟级
- 可移植性:容器可以在任何支持 Docker 的环境中一致运行
- 隔离性:容器间相互隔离,避免了依赖冲突
- 可扩展性:可以快速创建和销毁容器,轻松实现水平扩展
1.3 Docker 与传统虚拟化的区别
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
资源占用 | 低 | 高 |
隔离级别 | 进程级隔离 | 完全隔离 |
操作系统 | 共享宿主机内核 | 完整操作系统 |
性能 | 接近原生 | 有一定损耗 |
部署密度 | 高(单机可部署上千个) | 低(单机通常几十个) |
1.4 Docker 核心组件
- Docker 引擎:Docker 的核心运行环境,包括后台进程和命令行接口
- 镜像(Image):包含应用程序及其依赖的只读模板
- 容器(Container):镜像的可运行实例
- 仓库(Repository):用于存储和分发 Docker 镜像的地方
- Docker Compose:用于定义和运行多容器 Docker 应用程序的工具
二、Docker 环境搭建
2.1 安装 Docker
以下是在 CentOS 系统上安装 Docker 的步骤:
# 关闭防火墙和SELinux
systemctl stop firewalld.service
setenforce 0
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker-CE
yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
systemctl start docker.service
systemctl enable docker.service
2.2 配置镜像加速器
为提高镜像下载速度,建议配置镜像加速器:
# 配置阿里云加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
EOF
# 重启Docker使配置生效
systemctl daemon-reload
systemctl restart docker
2.3 验证安装
# 查看Docker版本
docker --version
# 查看Docker系统信息
docker info
三、Docker 镜像管理
镜像是 Docker 的核心概念之一,理解并掌握镜像管理是使用 Docker 的基础。
3.1 搜索镜像
# 搜索Nginx镜像
docker search nginx
3.2 获取镜像
# 拉取最新版本的Nginx镜像
docker pull nginx
# 拉取指定版本的CentOS镜像
docker pull centos:7
3.3 查看本地镜像
# 查看所有本地镜像
docker images
# 输出说明:
# REPOSITORY:镜像仓库名
# TAG:镜像标签(通常表示版本)
# IMAGE ID:镜像唯一标识符
# CREATED:镜像创建时间
# SIZE:镜像大小
3.4 查看镜像详情
# 通过镜像ID查看详情
docker inspect 41f689c20910
3.5 为镜像添加标签
# 为Nginx镜像添加自定义标签
docker tag nginx:latest nginx:web
3.6 删除镜像
# 删除指定标签的镜像
docker rmi nginx:web
# 强制删除镜像(即使有容器依赖)
docker rmi -f nginx:latest
3.7 镜像的导入导出
# 导出镜像
docker save -o nginx.tar nginx:latest
# 导入镜像
docker load < nginx.tar
# 或
docker load -i nginx.tar
3.8 上传镜像到仓库
# 标记镜像(格式:仓库用户名/镜像名:标签)
docker tag nginx:latest yourusername/nginx:web
# 登录Docker Hub
docker login
# 上传镜像
docker push yourusername/nginx:web
四、Docker 容器管理
容器是镜像的运行实例,是 Docker 实际运行应用的载体。
4.1 创建容器
# 创建一个交互式容器(不启动)
docker create -it nginx:latest /bin/bash
4.2 启动容器
# 启动已创建的容器
docker start 8b0a7be0ff58
4.3 创建并启动容器
# 直接创建并启动容器(最常用)
docker run -itd --name mycontainer centos:7 /bin/bash
# 参数说明:
# -i: 保持标准输入打开
# -t: 分配伪终端
# -d: 后台运行
# --name: 指定容器名称
4.4 查看容器状态
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
4.5 容器交互
# 进入运行中的容器
docker exec -it mycontainer /bin/bash
# 参数说明:
# -i: 保持输入打开
# -t: 分配伪终端
4.6 容器文件操作
# 从宿主机复制文件到容器
docker cp ~/test.txt mycontainer:/opt/
# 从容器复制文件到宿主机
docker cp mycontainer:/opt/test.txt ~/abc123.txt
4.7 容器的启动与停止
# 停止容器
docker stop mycontainer
# 强制停止容器
docker kill mycontainer
# 重启容器
docker restart mycontainer
4.8 容器的导入导出
# 导出容器
docker export mycontainer > centos7.tar
# 导入容器(会生成镜像)
cat centos7.tar | docker import - centos7:test
4.9 删除容器
# 删除已停止的容器
docker rm mycontainer
# 强制删除运行中的容器
docker rm -f mycontainer
# 批量删除所有已停止容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm
五、Docker 网络管理
Docker 提供了多种网络模式,满足不同场景下的网络需求。
5.1 端口映射
# 随机映射端口
docker run -d --name test1 -P nginx
# 指定端口映射
docker run -d --name test2 -p 43000:80 nginx
5.2 Docker 网络模式
Docker 提供了五种网络模式:
- bridge 模式:默认模式,通过虚拟网桥实现容器间通信
- host 模式:容器共享宿主机网络栈,无独立 IP
- container 模式:共享另一个容器的网络栈
- none 模式:无网络配置,只有回环接口
- 自定义网络:用户可创建自定义网络,提供更灵活的网络配置
5.3 自定义网络
# 创建自定义网络
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
# 在自定义网络中启动容器并指定IP
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
5.4 查看网络信息
# 查看所有网络
docker network list
# 查看指定网络详情
docker network inspect mynetwork
六、Docker 容器状态详解
Docker 容器有多种状态,反映了容器的运行情况:
- created(已创建):容器已被创建但从未启动
- up(运行中):容器正在运行,主进程活跃
- exited(已退出):容器曾运行过,主进程已终止
- paused(已暂停):容器被暂停,进程冻结
- restarting(重启中):容器正在重启过程中
- dead(已死亡):容器因严重错误无法正常运行
状态转换命令:
# 启动容器(created/exited → up)
docker start <容器ID/名称>
# 停止容器(up → exited)
docker stop <容器ID/名称>
# 暂停容器(up → paused)
docker pause <容器ID/名称>
# 恢复容器(paused → up)
docker unpause <容器ID/名称>
# 重启容器(up → restarting → up)
docker restart <容器ID/名称>
七、Docker 实战技巧
7.1 容器自动重启
# 创建自动重启的容器
docker run -d --restart=always --name auto-restart-nginx nginx:latest
# --restart参数说明:
# always: 总是自动重启
# on-failure[:max-retries]: 仅在失败时重启,可指定最大重试次数
# unless-stopped: 除非手动停止,否则始终重启
7.2 查看容器日志
# 查看容器日志
docker logs mycontainer
# 实时查看日志
docker logs -f mycontainer
7.3 清理无用资源
# 清理停止的容器、无用的镜像和网络
docker system prune
# 清理所有未使用的镜像
docker image prune -a
八、总结
Docker 作为一种革命性的容器化技术,极大地简化了应用的部署和管理流程。本文从基础概念到实际操作,全面介绍了 Docker 的核心功能,包括镜像管理、容器操作、网络配置等关键知识点。
掌握 Docker 不仅能提高开发效率,还能确保应用在不同环境中的一致性,是现代软件开发和运维人员必备的技能之一。随着云原生技术的发展,Docker 与 Kubernetes 等容器编排工具的结合将更加紧密,为微服务架构提供更强大的支持。