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 等容器编排工具的结合将更加紧密,为微服务架构提供更强大的支持。

相关推荐
j200103222 小时前
Docker 全阶段学习指南
云原生·eureka
霖.243 小时前
K8s实践中的重点知识
linux·云原生·kubernetes
zhujilisa4 小时前
k8s基础
云原生·容器·kubernetes
努力打怪升级5 小时前
ACA云原生工程师认证知识点脑图
云原生
极客天成ScaleFlash14 小时前
极客天成让统一存储从云原生‘进化’到 AI 原生: 不是版本升级,而是基因重组
人工智能·云原生
小闫BI设源码15 小时前
Dockerfile
云原生·eureka·日志收集·自动重启·容器监控·健康检查·生产环境部署
码路工人21 小时前
第8章:K8s 核心概念(上)- 工作负载
docker·云原生·容器
货拉拉技术1 天前
货拉拉离线大数据跨云迁移 - 数据迁移篇
大数据·云原生
qq_569384121 天前
K8S (使用步骤)
云原生·容器·kubernetes