Docker

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、Docker

二、Docker核心定位与价值

三、核心组件与流转关系

[1. 三大核心组件(基础核心)](#1. 三大核心组件(基础核心))

[2. 核心流转关系](#2. 核心流转关系)

[3. 底层支撑组件](#3. 底层支撑组件)

[四、Docker 与传统虚拟化的核心差异](#四、Docker 与传统虚拟化的核心差异)

五、典型应用场景

[六、Docker 安装与配置](#六、Docker 安装与配置)

基本命令

[Dockerfile 示例](#Dockerfile 示例)

数据卷与网络

常用工具

[七、Docker 容器操作](#七、Docker 容器操作)

启动容器

查看运行中的容器

停止容器

启动已停止的容器

进入容器交互模式

删除容器

查看容器日志

复制文件到容器

提交容器为镜像

监控容器资源

[八、Docker 网络管理](#八、Docker 网络管理)

[Docker 网络基础](#Docker 网络基础)

[Docker 的网络模式](#Docker 的网络模式)

桥接模式(Bridge)

主机模式(Host)

无网络模式(None)

容器模式(Container)

覆盖网络模式(Overlay)

[Macvlan 模式](#Macvlan 模式)

如何选择网络模式

示例命令

查看和管理网络

[自定义 Bridge 网络](#自定义 Bridge 网络)

容器间通信

端口映射与暴露

[跨主机通信(Overlay 网络)](#跨主机通信(Overlay 网络))

网络隔离与安全

常见问题排查

总结


前言

Docker 是一种轻量级的容器化技术,通过封装应用及其依赖环境,实现快速部署、跨平台运行和资源隔离。它基于 Linux 内核的容器特性(如 cgroups 和 namespaces),提供一致性的开发、测试和生产环境,显著提升软件交付效率。

一、Docker

Docker 作为开源的容器化平台,核心目标是解决"环境一致性"与"高效部署"问题,通过将应用及其依赖打包为标准化容器,实现"一次构建,处处运行"的价值。其本质是操作系统级虚拟化(进程级隔离),区别于传统硬件虚拟化,具有轻量、高效、可移植的核心特性,已成为 DevOps 流程与云原生架构的基础工具。

二、Docker核心定位与价值

Docker 的核心价值在于"解耦"与"标准化",具体可拆解为三点:

  1. 环境一致性:将应用依赖(代码、运行时、库、配置)打包为容器,彻底解决"开发环境能跑、测试/生产环境报错"的经典问题,实现全流程环境统一;

  2. 高效资源利用:容器共享宿主机内核,无需像虚拟机那样分配独立内核与硬件资源,启动速度达秒级,资源占用为 MB 级,单台物理机可运行成百上千个容器,资源利用率远高于传统虚拟化;

  3. 敏捷部署与扩展:支持自动化构建、分发与启动,配合编排工具可实现秒级扩容/缩容,完美适配 DevOps 自动化流程与微服务架构的部署需求。

三、核心组件与流转关系

Docker 核心由"三大核心组件"和"底层支撑组件"构成,各组件协同实现容器的构建、运行、分发全流程:

1. 三大核心组件(基础核心)

  • 镜像(Image):只读的静态模板,包含运行应用的所有依赖,采用"分层存储"机制(多层只读文件系统),支持层复用以减少磁盘占用。镜像不可修改,仅能作为创建容器的"模板",可通过 Dockerfile 构建或从仓库拉取;

  • 容器(Container):镜像的运行实例,本质是被隔离的进程。容器在镜像只读层之上叠加一层"可写层",所有修改仅作用于可写层(删除容器后可写层消失,数据卷可解决数据持久化问题),支持启动、停止、重启、删除等生命周期管理;

  • 仓库(Repository):镜像的存储与分发平台,类似"软件应用商店",分为公共仓库(如 Docker Hub,提供海量官方/第三方镜像)和私有仓库(如 Harbor,适用于企业内部镜像管理)。镜像通过"标签(tag)"区分版本,实现精准拉取与推送。

2. 核心流转关系

镜像 → 容器:通过 docker run 命令基于镜像创建并启动容器; 仓库 → 本地镜像:通过docker pull 从仓库拉取镜像到本地; 容器 → 镜像:通过 docker commit 将修改后的容器提交为新镜像(适用于临时定制,正式场景推荐 Dockerfile); 本地镜像 → 仓库:通过 docker push 将本地构建的镜像推送到仓库供复用。

3. 底层支撑组件

  • 客户端-服务端(C/S)架构:用户通过 Docker 客户端(CLI/图形界面)发送指令,Docker 守护进程(dockerd,运行在宿主机后台)接收并执行实际操作(如管理镜像、容器),守护进程与仓库通过 HTTP/HTTPS 交互实现镜像拉取/推送;

  • 数据卷(Volume):独立于容器生命周期的持久化存储组件,用于保存容器数据(避免容器删除后数据丢失),支持宿主机与容器、容器间的数据共享,由 Docker 统一管理宿主机存储路径;

  • 网络(Network):提供容器间、容器与宿主机/外网的通信能力,核心模式包括桥接模式(默认,容器互通且可访问外网)、宿主模式(直接使用宿主机网络,无端口映射开销)、容器模式(多容器共享网络命名空间)等;

  • Dockerfile :定义镜像构建步骤的文本文件,通过 FROM(指定基础镜像)、RUN(执行命令)、COPY(复制文件)等标准化指令,实现镜像的可复现构建(替代手动定制镜像,适合团队协作);

  • Docker Compose :多容器编排工具,通过 docker-compose.yml 配置文件定义多个关联服务(如 Web 服务 + 数据库 + 缓存),一键实现多容器的启动、停止、协同管理,简化多服务依赖的部署流程。

四、Docker 与传统虚拟化的核心差异

Docker 属于操作系统级虚拟化,与传统硬件虚拟化(如 VMware、Xen)的核心差异在于"隔离粒度"与"资源开销",具体对比如下:

对比维度 Docker 容器 传统虚拟机(VM)
内核 共享宿主机内核 每个 VM 拥有独立内核
启动速度 秒级 分钟级
资源占用 低(MB 级),按需分配 高(GB 级),预分配固定资源
隔离级别 进程级隔离(隔离应用进程) 硬件级隔离(隔离完整操作系统)
移植性 强(基于镜像标准化,跨平台兼容) 弱(依赖特定 Hypervisor 虚拟化技术)

五、典型应用场景

  1. 开发环境标准化:团队统一使用 Docker 容器作为开发环境,避免因本地环境差异导致的开发问题;

  2. 持续集成/持续部署(CI/CD):在 CI/CD 流程中,通过 Docker 构建镜像、运行测试、部署容器,实现自动化流水线;

  3. 微服务部署:将微服务架构中的每个服务打包为独立容器,通过编排工具(如 Docker Compose、K8s)实现服务的协同运行、扩容与运维;

  4. 多环境快速部署:同一镜像可在开发、测试、生产等不同环境中无缝运行,减少环境适配成本;

  5. 资源密集型场景:如大数据处理、测试环境集群,通过容器的轻量特性提高资源利用率,降低硬件成本。

六、Docker****安装与配置

Linux系统

使用包管理器安装 Docker Engine:

bash 复制代码
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
 

启动 Docker 服务:

bash 复制代码
sudo systemctl start docker
 
  1. Windows/macOS

    下载 Docker Desktop(官网链接)并安装。

基本命令

  • 拉取镜像:

    bash 复制代码
    docker pull ubuntu:latest
     
  • 运行容器:

    bash 复制代码
    docker run -it ubuntu /bin/bash
     
  • 列出运行中的容器:

    bash 复制代码
    docker ps
     
  • 停止容器:

    bash 复制代码
    docker stop <container_id>
     

    Dockerfile 示例

    创建自定义镜像的配置文件:

    dockerfile 复制代码
    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y python3
    COPY app.py /app/
    WORKDIR /app
    CMD ["python3", "app.py"]
     

    构建镜像:

    bash 复制代码
    docker build -t my-python-app .
     

    数据卷与网络

  • 挂载数据卷:

    bash 复制代码
    docker run -v /host/path:/container/path ubuntu
     
  • 创建网络:

    bash 复制代码
    docker network create my-network
     

    常用工具

  • Docker Compose :用于定义和运行多容器应用。

    yaml 复制代码
    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "80:80"
     
  • 启动服务:

    bash 复制代码
    docker-compose up
     

七、Docker****容器操作

启动容器

使用 docker run 命令启动一个新容器。通过 -d 参数可让容器在后台运行,-p 指定端口映射,--name 为容器命名。

bash 复制代码
docker run -d -p 8080:80 --name my_container nginx
 

查看运行中的容器

docker ps 显示当前运行的容器列表,添加 -a 参数可查看所有容器(包括已停止的)。

bash 复制代码
docker ps -a
 

停止容器

使用 docker stop 命令停止指定容器,需提供容器ID或名称。

bash 复制代码
docker stop my_container
 

启动已停止的容器

通过 docker start 重新启动已停止的容器,不会创建新实例。

bash 复制代码
docker start my_container
 

进入容器交互模式

docker exec -it 进入正在运行的容器内部,常用于调试或执行命令。

bash 复制代码
docker exec -it my_container /bin/bash
 

删除容器

docker rm 删除已停止的容器,添加 -f 参数可强制删除运行中的容器。

bash 复制代码
docker rm my_container
 

查看容器日志

docker logs 查看容器的输出日志,-f 参数可实时跟踪日志更新。

bash 复制代码
docker logs -f my_container
 

复制文件到容器

docker cp 在宿主机和容器之间复制文件。

bash 复制代码
docker cp local_file.txt my_container:/path/in/container
 

提交容器为镜像

通过 docker commit 将容器当前状态保存为新的镜像。

bash 复制代码
docker commit my_container new_image_name
 

监控容器资源

docker stats 实时显示容器的CPU、内存等资源使用情况。

bash 复制代码
docker stats my_container
 

八、Docker****网络管理

Docker 网络基础

Docker 提供多种网络模式,默认支持以下核心类型:

  • Bridge:默认模式,容器通过虚拟网桥与主机通信。
  • Host:容器直接使用主机网络栈,无隔离。
  • None:禁用所有网络,适用于离线场景。
  • Overlay:用于跨主机的容器通信(如 Swarm 集群)。
  • Macvlan:为容器分配 MAC 地址,使其像物理设备接入网络。

Docker****的网络模式

桥接模式(Bridge)

桥接模式是 Docker 的默认网络模式。在此模式下,Docker 会创建一个虚拟网桥(通常是 docker0),容器通过该网桥与主机及其他容器通信。每个容器会被分配一个独立的 IP 地址。

  • 适用于单主机环境下的多容器通信。
  • 容器可以通过主机端口映射(-p 参数)暴露服务到外部网络。
主机模式(Host)

在主机模式下,容器直接使用主机的网络命名空间,共享主机的 IP 和端口。容器的网络性能与主机几乎一致,但隔离性较差。

  • 适用于对网络性能要求较高的场景。
  • 容器无需端口映射即可直接使用主机的网络接口。
无网络模式(None)

无网络模式下,容器不配置任何网络接口,完全隔离网络。通常用于安全性要求极高的场景或仅需本地进程通信的容器。

  • 适用于不需要网络通信的容器。
  • 容器内部仅能通过本地进程间通信(IPC)或共享文件系统交互。
容器模式(Container)

容器模式允许一个容器共享另一个容器的网络命名空间。两个容器使用相同的网络配置,包括 IP 地址和端口。

  • 适用于需要紧密协作的容器组。
  • 常用于 Sidecar 模式或日志收集等场景。
覆盖网络模式(Overlay)

覆盖网络模式用于跨主机的容器通信,常见于 Docker Swarm 或 Kubernetes 集群。通过虚拟网络层实现多主机间的容器互联。

  • 适用于分布式系统或多主机环境。
  • 支持服务发现和负载均衡。
Macvlan 模式

Macvlan 模式允许容器直接绑定到物理网络接口,每个容器拥有独立的 MAC 地址,表现得像物理设备一样。

  • 适用于需要直接接入物理网络的场景。
  • 常用于网络设备模拟或高性能网络需求。

如何选择网络模式

  • 单主机通信:桥接模式或主机模式。
  • 高性能需求:主机模式或 Macvlan 模式。
  • 完全隔离:无网络模式。
  • 跨主机通信:覆盖网络模式。
  • 共享网络:容器模式。

示例命令

创建桥接网络:

bash 复制代码
docker network create my_bridge
docker run --network=my_bridge -d nginx
 

使用主机模式:

bash 复制代码
docker run --network=host -d nginx
 

使用覆盖网络(Swarm 环境):

bash 复制代码
docker network create --driver=overlay my_overlay
docker service create --network=my_overlay nginx
 

通过理解这些网络模式的特点和适用场景,可以更灵活地配置 Docker 容器的网络环境。

查看和管理网络

列出所有网络:

bash 复制代码
docker network ls
 

查看特定网络详情(如 bridge):

bash 复制代码
docker network inspect bridge
 

删除未使用的网络:

bash 复制代码
docker network prune
 

自定义 Bridge 网络

创建自定义桥接网络(优于默认 bridge):

bash 复制代码
docker network create --driver bridge my_bridge
 

运行容器并指定网络:

bash 复制代码
docker run -d --name web --network my_bridge nginx
 

将已有容器连接到网络:

bash 复制代码
docker network connect my_bridge existing_container
 

容器间通信

同一网络下的容器可通过容器名直接通信:

bash 复制代码
docker run -d --name app --network my_bridge my_app_image
 

app 可直接通过 web 主机名访问 nginx 容器。

端口映射与暴露

将容器端口映射到主机(如将 80 映射到主机 8080):

bash 复制代码
docker run -d -p 8080:80 --name web nginx
 

仅暴露端口(不映射到主机,供其他容器访问):

dockerfile 复制代码
EXPOSE 80
 

跨主机通信(Overlay 网络)

初始化 Swarm 集群:

bash 复制代码
docker swarm init
 

创建 Overlay 网络:

bash 复制代码
docker network create -d overlay my_overlay
 

在集群中运行服务:

bash 复制代码
docker service create --network my_overlay --name service1 nginx
 

网络隔离与安全

限制容器访问外部网络:

bash 复制代码
docker run -d --network none --name isolated_container busybox
 

配置防火墙规则(如仅允许特定 IP 访问容器):

bash 复制代码
iptables -A DOCKER -s 192.168.1.100 -j ACCEPT
 

常见问题排查

检查容器 IP 地址:

bash 复制代码
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
 

测试容器间连通性:

bash 复制代码
docker exec -it container_name ping target_container
 

查看 Docker 日志:

bash 复制代码
journalctl -u docker.service
 

通过以上方法,可灵活管理 Docker 网络以满足不同场景需求。


总结

Docker 以"容器化"为核心,通过镜像、容器、仓库三大组件实现了应用的标准化打包与分发,凭借轻量、高效、可移植的优势,解决了传统部署中的环境不一致、资源利用率低、部署繁琐等痛点。其客户端-服务端架构与底层支撑组件(数据卷、网络、Dockerfile 等)共同构成了完整的容器化解决方案,广泛应用于开发、测试、生产全流程,是现代软件研发与运维的必备工具。掌握 Docker 的核心组件与使用流程,是迈向 DevOps 与云原生架构的关键一步。

相关推荐
嘻哈baby2 小时前
Linux进程排查实战:strace和lsof救命指南
运维
vortex52 小时前
Linux 处理以 Null 字节分隔内容的文件
linux·运维·服务器
人工智能训练2 小时前
Docker Desktop WSL 集成配置宝典:选项拆解 + 精准设置指南
linux·运维·服务器·人工智能·docker·容器·ai编程
提伯斯6462 小时前
ssh远程连接报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! :本地ssh公钥不一致问题
运维·ssh
阿杰AJie2 小时前
安装 docker.io(不走外网 Docker 域名)
后端·docker
QT 小鲜肉2 小时前
【Linux命令大全】001.文件管理之find命令(实操篇)
linux·运维·前端·chrome·笔记
遇见火星2 小时前
Linux 如何设置开机自启:全面指南!
linux·运维·服务器·systemd
强风7942 小时前
Linux-线程概念与控制
linux·运维
嘻哈baby2 小时前
服务降级与熔断机制实战:让系统优雅地挂
运维