Docker 从入门到精通:全方位掌握容器化技术
目录
引言:容器化技术的革命
一、Docker 基础与核心概念
1.1 什么是 Docker?
1.2 为什么选择 Docker?
1.3 Docker 与传统虚拟化的区别
1.4 Docker 核心组件
二、Docker 环境搭建
2.1 安装 Docker
2.2 配置镜像加速器
2.3 验证安装
三、Docker 镜像管理
3.1 搜索镜像
3.2 获取镜像
3.3 查看本地镜像
3.4 查看镜像详情
3.5 为镜像添加标签
3.6 删除镜像
3.7 镜像的导入导出
3.8 上传镜像到仓库
四、Docker 容器管理
4.1 创建容器
4.2 启动容器
4.3 创建并启动容器
4.4 查看容器状态
4.5 容器交互
4.6 容器文件操作
4.7 容器的启动与停止
4.8 容器的导入导出
4.9 删除容器
五、Docker 网络管理
5.1 端口映射
5.2 Docker 网络模式
5.3 自定义网络
5.4 查看网络信息
六、Docker 容器状态详解
七、Docker 实战技巧
7.1 容器自动重启
7.2 查看容器日志
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 等容器编排工具的结合将更加紧密,为微服务架构提供更强大的支持。