Docker:入门了解
-
- 前言
- [一、Docker 是什么?核心介绍](#一、Docker 是什么?核心介绍)
-
- [1.1 定义与版本说明](#1.1 定义与版本说明)
- [1.2 适用人群与前置知识](#1.2 适用人群与前置知识)
- 二、传统部署痛点与容器化核心思想
-
- [2.1 传统部署四大痛点](#2.1 传统部署四大痛点)
- [2.2 不可变基础设施核心设计理念](#2.2 不可变基础设施核心设计理念)
- [三、Docker 五大核心优势](#三、Docker 五大核心优势)
- [四、Docker 四大主流应用场景](#四、Docker 四大主流应用场景)
-
- [4.1 微服务架构](#4.1 微服务架构)
- [4.2 CI/CD 自动化流水线](#4.2 CI/CD 自动化流水线)
- [4.3 统一团队开发环境](#4.3 统一团队开发环境)
- [4.4 云原生底层底座](#4.4 云原生底层底座)
- [五、Docker 四大核心概念](#五、Docker 四大核心概念)
-
- [5.1 镜像(Image)](#5.1 镜像(Image))
- [5.2 容器(Container)](#5.2 容器(Container))
- [5.3 Dockerfile](#5.3 Dockerfile)
- [5.4 仓库(Registry)](#5.4 仓库(Registry))
- [六、Docker 与虚拟机对比](#六、Docker 与虚拟机对比)
- [七、Docker C/S 架构详解](#七、Docker C/S 架构详解)
-
- [7.1 四大基础组件](#7.1 四大基础组件)
- [7.2 配套工具](#7.2 配套工具)
-
- [Docker Compose](#Docker Compose)
- [Docker Swarm](#Docker Swarm)
- [Docker Network](#Docker Network)
- [Docker Volume](#Docker Volume)
- [7.3 完整业务流程](#7.3 完整业务流程)
- 八、高频命令
- 十、总结
前言
在微服务、云原生、CI/CD 持续交付全面普及的当下,Docker 已经成为后端开发、运维、DevOps 工程师的必备核心技能。
很多初学者刚接触容器技术,都会存在以下困惑:
- Docker 和虚拟机到底有什么区别?
- 镜像、容器、仓库、Dockerfile 到底是什么关系?
- Docker 架构是怎么运行的?为什么它更轻、更快?
- 日常开发、上线、自动化部署到底怎么用 Docker?
本文整合菜鸟教程全套 Docker 基础内容,结构化梳理并补充实战理解,一篇文章吃透 Docker 完整基础体系,适合入门学习、面试复习。
一、Docker 是什么?核心介绍
1.1 定义与版本说明
Docker 是基于 Go 语言开发、Apache2.0 开源协议的轻量级应用容器引擎。可将应用代码、运行环境、依赖库、配置文件统一打包生成可移植镜像,实现一次构建,随处运行。
17.03 版本后分为两个版本:
- CE 社区版:免费开源,开发、测试、生产通用
- EE 企业版:商业付费,提供安全扫描、官方技术支持、企业级集群能力
1.2 适用人群与前置知识
适用人群:后端开发、运维、DevOps、云原生初学者
前置基础:掌握常用 Linux 基础命令
二、传统部署痛点与容器化核心思想
2.1 传统部署四大痛点
容器化出现前主流部署方式为物理机、虚拟机部署,存在明显缺陷:
- 环境不一致:本地运行正常,测试、生产环境报错
- 依赖冲突:多项目软件版本不兼容,维护成本高
- 资源浪费:虚拟机内置完整操作系统,硬件开销大
- 部署低效:手动安装配置,流程无标准化,易人为出错
2.2 不可变基础设施核心设计理念
- 应用、运行环境、依赖打包为只读镜像,不可直接修改
- 开发、测试、生产环境统一使用同一份镜像
- 动态配置通过环境变量、外部配置文件注入
- 版本迭代、故障修复依靠重新构建镜像,不修改运行中容器
三、Docker 五大核心优势
- 环境完全统一,消除环境差异类故障
- 轻量化资源占用,共享宿主机内核,单机可运行上百容器
- 秒级启动,支持快速扩缩容,交付效率高
- 容器进程、网络、文件系统相互隔离,互不干扰
- 镜像支持版本标签,线上异常可一键回滚旧版本
四、Docker 四大主流应用场景
4.1 微服务架构
各业务服务单独容器化,服务解耦,可独立迭代、扩容,适配分布式系统。
4.2 CI/CD 自动化流水线
对接 Jenkins、GitLab CI 等工具,代码提交后自动完成构建、测试、打包、部署全流程。
4.3 统一团队开发环境
项目提供 Docker 配置,新人仅需安装 Docker,一条命令拉起数据库、缓存、后端服务,无需本地安装各类中间件。
4.4 云原生底层底座
Kubernetes 容器编排平台底层依赖 Docker,是大规模集群、私有云标准底层技术。
五、Docker 四大核心概念
5.1 镜像(Image)
只读分层模板,包含程序运行所需系统、依赖、代码、配置;分层存储节省磁盘,通过 Tag 区分版本;类比面向对象的类。
5.2 容器(Container)
镜像运行后的实例,在镜像只读层上方新增可读写层;拥有独立网络、进程、文件系统;容器删除后内部数据默认丢失;类比面向对象的对象,一个镜像可创建多个容器。
5.3 Dockerfile
纯文本脚本,标准化自动化构建自定义镜像,定义基础镜像、文件复制、依赖安装、启动指令。
5.4 仓库(Registry)
镜像存储分发平台:
- 公共仓库:Docker Hub,海量开源官方镜像
- 私有仓库:Harbor、阿里云容器镜像服务,企业存放私有业务镜像
六、Docker 与虚拟机对比
| 对比维度 | 虚拟机(VM) | Docker 容器 |
|---|---|---|
| 隔离层级 | 硬件级虚拟化 | 操作系统进程级隔离(Namespace+Cgroups) |
| 操作系统 | 独立完整客户机系统 | 共享宿主机内核 |
| 资源占用 | 高,GB级消耗 | 极低,仅占用应用进程资源 |
| 启动速度 | 分钟级 | 秒级 |
| 镜像体积 | GB级别 | MB级别 |
| 性能损耗 | 损耗较大 | 接近物理机原生性能 |
| 单机部署数量 | 几台至十几台 | 上百台 |
适用场景:
- 虚拟机:需要不同操作系统、硬件级强安全隔离场景
- Docker:微服务、自动化部署、统一开发环境、云原生集群
七、Docker C/S 架构详解
Docker 采用客户端-服务端架构,依靠 REST API 完成通信。
7.1 四大基础组件
- Docker Client:
docker命令行工具,仅转发用户指令,不执行实际操作 - Docker Daemon(dockerd):宿主机后台核心进程,管理镜像、容器、网络、数据卷,对接镜像仓库,处理全部API请求
- Docker Engine API:标准化REST接口,客户端与守护进程通信桥梁,支持代码远程调用
- Registry:镜像存储仓库,分为公有、私有两类
7.2 配套工具
Docker Compose
使用 docker-compose.yml 管理多关联服务,一键启动整套应用,多用于本地开发测试。
yaml
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
启动命令:docker-compose up
Docker Swarm
官方原生集群调度工具,实现多主机容器集群、负载均衡,生产环境大多替换为K8s。
Docker Network
内置多种网络驱动:bridge单机容器互通、host复用宿主机网络、overlay跨主机集群通信。
Docker Volume
数据持久化方案,数据独立于容器生命周期,容器销毁数据不丢失,数据库必备。
7.3 完整业务流程
- 编写Dockerfile
- docker build 构建自定义镜像
- docker push 将镜像上传至镜像仓库
- 服务器执行docker pull拉取镜像
- docker run / Compose 启动容器,配置网络与数据卷
- 日常通过docker命令管理容器日志、启停、扩容
- 新版本迭代重复构建推送,故障切换旧镜像回滚
八、高频命令
镜像操作
bash
# 拉取镜像
docker pull nginx
# 构建镜像
docker build -t my-demo:1.0 .
# 查看本地镜像
docker images
# 删除镜像
docker rmi 镜像ID
容器生命周期
bash
# 后台启动容器并映射端口
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行容器
docker ps
# 查看全部容器(含已停止)
docker ps -a
# 进入容器终端
docker exec -it 容器ID /bin/bash
# 停止、重启、删除容器
docker stop 容器ID
docker restart 容器ID
docker rm 容器ID
仓库、网络、数据卷
bash
# 登录私有镜像仓库
docker login shturl.cc/apCD
# 推送镜像
docker push shturl.cc/VPzxJyDmjBbMVC9e
# 创建自定义网络
docker network create demo-net
# 创建持久化数据卷
docker volume create mysql-data
十、总结
Docker是云原生、微服务、DevOps体系底层核心技术。依靠镜像打包统一环境,容器实现轻量化部署,标准化流程简化上线运维工作,是学习K8s、容器化项目改造的前置基础。