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
相关推荐
so~what1 小时前
NTN全局控制器集中管理的优势
网络·ntn
normanhere1 小时前
华为S5735堆叠配置加华为AC S9700-S主备配置案例
网络
梦想的颜色9 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
sdghterhd10 小时前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议
xy345311 小时前
Wireshark捕获过滤器——语法元素详解
网络·测试工具·渗透测试·wireshark
万里侯12 小时前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s
DLYSB_12 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
德福危险13 小时前
富有想象力的XSS盲打:靶机练习之Tempus_fugit5
服务器·网络·xss
哥是强混14 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net