Docker 从入门到精通:全方位掌握容器化技术

目录

引言:容器化技术的革命

[一、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 核心组件

  1. Docker 引擎:Docker 的核心运行环境,包括后台进程和命令行接口
  2. 镜像(Image):包含应用程序及其依赖的只读模板
  3. 容器(Container):镜像的可运行实例
  4. 仓库(Repository):用于存储和分发 Docker 镜像的地方
  5. 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 提供了五种网络模式:

  1. bridge 模式:默认模式,通过虚拟网桥实现容器间通信
  2. host 模式:容器共享宿主机网络栈,无独立 IP
  3. container 模式:共享另一个容器的网络栈
  4. none 模式:无网络配置,只有回环接口
  5. 自定义网络:用户可创建自定义网络,提供更灵活的网络配置

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 容器有多种状态,反映了容器的运行情况:

  1. created(已创建):容器已被创建但从未启动
  2. up(运行中):容器正在运行,主进程活跃
  3. exited(已退出):容器曾运行过,主进程已终止
  4. paused(已暂停):容器被暂停,进程冻结
  5. restarting(重启中):容器正在重启过程中
  6. 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 等容器编排工具的结合将更加紧密,为微服务架构提供更强大的支持。

相关推荐
U***e632 小时前
PHP在微服务中的Mezzio
微服务·云原生·架构
2501_941801763 小时前
C++高性能网络爬虫与多线程实战分享:大规模网页抓取与数据处理优化经验
eureka
2501_941805934 小时前
Go高性能API网关与负载均衡实战分享:请求路由、流量控制与性能优化经验
eureka
u***u6855 小时前
Vue云原生
前端·vue.js·云原生
Hellc0075 小时前
Docker部署BaGet私有NuGet服务器:从入门到备份恢复完整指南 二
服务器·docker·eureka
2501_941147117 小时前
Go语言微服务日志收集与监控实践分享:高并发系统的指标与告警优化经验
eureka
2501_9418868610 小时前
智能交通信号优化系统开发与多语言微服务实践:Python、Java、C++与Go全栈实现解析
eureka
ALex_zry10 小时前
Consul全方位入门指南:第二阶段—— 实操。Consul核心功能与项目集成
运维·docker·微服务·云原生·架构
静若繁花_jingjing10 小时前
ZooKeeper & Nacos
分布式·zookeeper·云原生
Serverless社区10 小时前
【本不该故障系列】告别资源“不确定性”,SAE如何破解刚性交付核心困境
阿里云·云原生·serverless