Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)

一、Docker 五大网络模式(详解 + 实操)

Docker 内置五种网络模式,默认使用 bridge 网桥模式,所有网络资源均可通过 docker network 系列命令统一管理,不同网络模式的隔离性、通信规则、使用场景差异较大。

1.1 Bridge 网桥模式(默认模式)

Docker 安装完成后,会自动创建 docker0 虚拟网桥。同一网桥下的容器可以相互通信,不同网桥的容器相互隔离,每个容器都拥有独立的虚拟网卡与独立 IP 地址。

核心特点:

  1. Docker 默认网络模式,新建容器默认接入 docker0 网桥
  2. 容器拥有独立网络栈、独立 IP、独立端口,网络隔离基础完善
  3. 支持端口映射,可将容器服务暴露到外网,对外提供访问
  4. 不支持 DNS 自动解析,容器之间仅可通过 IP 互访,无法通过容器名称通信

实操命令:

bash

运行

复制代码
# 手动指定bridge模式启动nginx容器
docker run -d --network bridge --name bridge-nginx nginx

1.2 None 无网络模式

该模式会彻底禁用容器的所有网络功能,容器无网卡、无 IP 地址、无独立网络栈,实现完全的网络隔离。

核心特点:

  1. 容器无法访问外网,也无法与其他容器建立通信
  2. 网络安全性极高,仅适用于本地独立计算、无需联网的业务场景

实操命令:

bash

运行

复制代码
# 无网络隔离模式启动容器
docker run -d --network none --name none-test nginx

1.3 Host 主机模式

该模式下容器不会创建独立网络栈,直接完整复用宿主机的网络配置,共享宿主机 IP、网卡、端口及网络协议栈。

核心特点:

  1. 无需端口映射,宿主机端口即为容器服务端口
  2. 省去网桥转发环节,网络传输性能最优
  3. 无网络隔离性,容器直接暴露在宿主机局域网中,安全性较低

实操命令:

bash

运行

复制代码
# 共享宿主机网络启动容器
docker run -d --network host --name host-nginx nginx

1.4 Container 容器互联模式

该模式为网络共享模式,新创建的容器不会初始化独立网络环境,直接复用已运行容器的网络栈、IP 和端口。

核心特点:

  1. 两个容器共用同一 IP 和端口,端口资源相互占用,不能冲突
  2. 容器之间通信无需网络转发,传输效率极高
  3. 依赖父容器运行状态,父容器停止或删除,子容器网络直接失效

实操命令:

bash

运行

复制代码
# 1.先启动基础父容器
docker run -d --name base-nginx nginx

# 2.新容器复用父容器网络
docker run -d --network container:base-nginx --name follow-nginx nginx

1.5 自定义网桥模式

自定义网桥是增强版的 Bridge 网桥模式,区别于默认 docker0 网桥,自带内置 DNS 解析服务,是企业开发生产首选网络模式。

核心特点:

  1. 支持容器通过容器名称直接互访,无需记录 IP
  2. 可自定义网段、网关,网络规划更灵活
  3. 网络隔离性优于默认 bridge,适配多项目容器集群部署

网络全套实操命令:

bash

运行

复制代码
# 查看本地所有Docker网络
docker network ls

# 创建自定义网络(指定网段、网关)
docker network create --subnet=172.16.0.0/16 --gateway=172.16.0.1 mynetwork

# 查看网络详细信息
docker network inspect mynetwork

# 将已有容器加入自定义网络
docker network connect mynetwork 容器名

# 将容器退出自定义网络
docker network disconnect mynetwork 容器名

# 删除无用自定义网络
docker network rm mynetwork

容器名称互访实操:

bash

运行

复制代码
# 创建自定义网络
docker network create mynet

# 启动两个容器并加入自定义网络
docker run -d --name web1 --network mynet nginx
docker run -d --name web2 --network mynet nginx

# 容器之间可直接通过名称通信
docker exec -it web1 ping web2

二、Dockerfile 全套核心指令(详解 + 案例)

Dockerfile 是构建自定义镜像的脚本文件,指令从上至下顺序执行,每条指令都会生成独立镜像层,是制作自定义镜像的核心文件。

2.1 FROM 基础镜像指令

必须为 Dockerfile 首行指令,用于指定当前镜像依赖的基础环境,优先读取本地镜像,本地无镜像则自动从远程仓库拉取。

dockerfile

复制代码
# 基于轻量版nginx镜像构建
FROM nginx:1.24-alpine

2.2 MAINTAINER 作者信息(废弃)

用于标注镜像作者与联系方式,新版本 Docker 已废弃,推荐使用 LABEL 替代。

dockerfile

复制代码
# 旧写法(淘汰)
MAINTAINER test <test@163.com>

# 新规范写法
LABEL author="test"

2.3 RUN 构建执行指令

仅在镜像构建阶段执行,主要用于安装软件、配置环境、初始化系统,多条 RUN 会生成多层镜像,建议合并编写缩小镜像体积。

dockerfile

复制代码
# 不推荐:分层过多,镜像体积大
RUN yum install wget -y
RUN yum install nginx -y

# 推荐:合并指令+清理缓存,精简镜像
RUN yum clean all && yum install -y wget nginx && rm -rf /var/cache/yum/*

2.4 CMD 容器启动指令

在容器运行阶段执行,定义容器默认启动程序,多个 CMD 仅最后一个生效,可在容器启动时被命令覆盖替换。

dockerfile

复制代码
# shell写法
CMD echo "容器启动成功"

# 生产推荐exec写法(常驻进程,容器不退出)
CMD ["nginx","-g","daemon off;"]

启动覆盖方式:docker run 镜像名 自定义启动命令

2.5 ENTRYPOINT 入口指令

定义容器固定启动入口,优先级高于 CMD,无法被 docker run 命令直接覆盖,多用于容器初始化脚本、固定启动程序。

dockerfile

复制代码
# 先执行初始化脚本,再启动业务服务
ENTRYPOINT ["/bin/sh","/start.sh"]
CMD ["nginx"]

2.6 COPY 文件拷贝指令

仅支持本地文件、目录拷贝至镜像内部,无网络下载、无自动解压功能,安全稳定,是生产环境首选拷贝指令。

dockerfile

复制代码
# 拷贝本地页面文件至nginx站点目录
COPY index.html /usr/share/nginx/html/

# 批量拷贝静态资源目录
COPY ./static /usr/local/nginx/static/

2.7 ADD 高级拷贝指令

兼容本地拷贝 + 远程 URL 下载,可自动识别并解压本地压缩包文件,功能强大但存在文件覆盖风险,日常文件拷贝优先使用 COPY。

dockerfile

复制代码
# 本地压缩包自动解压至指定目录
ADD test.tar.gz /usr/local/

# 远程下载文件至镜像
ADD 远程文件链接 /tmp/

2.8 ARG 构建变量指令

仅在镜像构建阶段生效,容器运行后失效,用于构建时自定义传参,灵活适配不同构建版本。

dockerfile

复制代码
# 定义默认版本变量
ARG VERSION=1.24

2.9 ENV 全局环境变量

构建阶段、容器运行阶段全程永久生效,用于配置系统环境、定义全局参数。

dockerfile

复制代码
# 配置全局系统路径
ENV PATH=/usr/local/bin:$PATH

2.10 EXPOSE 端口声明指令

用于声明镜像对外提供服务的端口,仅为标识声明作用,不会自动开放端口,端口映射需配合 docker run -p 实现。

dockerfile

复制代码
# 声明容器对外80服务端口
EXPOSE 80

2.11 WORKDIR 工作目录指令

设置镜像构建、容器登录后的默认工作路径,目录不存在则自动创建,后续所有指令的相对路径均基于该目录。

dockerfile

复制代码
# 容器默认工作目录为/app
WORKDIR /app

2.12 USER 用户降权指令

指定容器运行的系统用户,默认 root 用户,生产环境通过该指令切换普通用户运行程序,实现容器降权,提升安全性。

dockerfile

复制代码
# 指定普通用户运行容器程序
USER admin

三、Docker 轻量镜像优化方案

企业生产环境要求镜像体积尽可能小,镜像越小,部署越快、漏洞越少、传输成本越低,核心优化方式:

  1. 选用极简基础镜像:优先使用 alpine、busybox、scratch 轻量化镜像
  2. 合并 RUN 指令,减少镜像分层,避免冗余层堆积
  3. 构建过程中及时清理 yum 缓存、日志、无用依赖包
  4. 杜绝安装冗余工具、无用依赖,精简运行环境

四、Docker 与 VM 虚拟机核心区别

  1. 架构差异:虚拟机模拟完整硬件设备,独立运行完整操作系统;Docker 共享宿主机内核,仅打包应用与运行依赖
  2. 性能差异:虚拟机体积大、启动慢、资源占用高;Docker 镜像体积小、秒级启动、资源损耗极低
  3. 隔离差异:虚拟机是系统级完全隔离,安全性极高;Docker 是应用级轻量隔离,隔离性弱于虚拟机
  4. 适用场景:虚拟机适合部署独立系统服务;Docker 适合微服务、批量容器化部署

五、Docker 镜像构建命令

bash

运行

复制代码
# 标准构建:-t 指定镜像名与版本,末尾 . 为构建上下文
docker build -t mynginx:v1 .

# 自定义Dockerfile文件名构建:-f 指定脚本文件
docker build -t mynginx:v1 -f mydockerfile .

六、Docker 存储核心说明

  1. 镜像层:只读分层存储,多层镜像可共享复用,无法修改
  2. 容器层:基于镜像生成的可读写临时层,容器删除后数据丢失
  3. 数据卷:独立持久化存储,脱离容器生命周期,容器删除数据不丢失,用于业务数据持久化

七、Docker 高频核心命令

bash

运行

复制代码
# 查看本地所有镜像
docker images

# 查看正在运行容器,-a 查看所有容器(含停止状态)
docker ps
docker ps -a

# 容器启停重启
docker start 容器名
docker stop 容器名
docker restart 容器名

# 删除容器、删除镜像
docker rm 容器名
docker rmi 镜像名

# 进入容器终端
docker exec -it 容器名 /bin/bash
相关推荐
红姐跨境书9 小时前
如何利用AI提升YouTube内容创作与运营效率
网络
别动我齐刘海9 小时前
简历技术栈全面复习——UDP / TCP / CAN / ZMQ / Protobuf 通信工程
网络·c++·python·tcp/ip·机器学习·udp·github
Zhou1411369 小时前
Docker_03_DockerCompose多容器编排
运维·docker·容器
北京中科新远科技9 小时前
AI网卡五层检查法:协议、PCIe、NUMA、端口与验收
服务器·网络·人工智能
数字供应链安全产品选型10 小时前
智能体与代码安全一体化选型指南:跳出功能清单,以运行时硬指标衡量真实防护能力
网络·人工智能
ESDWAN10 小时前
SD-WAN 企业选型与落地指南:从链路测试到网络架构设计
运维·网络·架构
啊哈一半醒11 小时前
Docker 底层知识:从 Namespace 到 UnionFS
运维·docker·容器
DianSan_ERP11 小时前
多平台订单自动下载与回传的技术实现:从消息推送到状态闭环引言
java·linux·服务器·前端·网络·架构·自动化
梦帮科技12 小时前
量子张量网络破局大模型:从矩阵乘积态 (MPS) 到张量列 (TT-SVD) 低秩收缩全推导
网络·数据结构·数据库·线性代数·矩阵·架构·模拟退火算法
潜创微科技12 小时前
一颗为网络摄像头而生的高度集成 SoC:SSC335DE 技术解析与选型参考
网络·以太网·评估板·参考设计