Skip to content

基础

网络

bridge

常用于单机容器之间互联

默认都是一个 172.17.0.0/16 的私网,docker run 不指定网络就是它

可自定义:

shell
docker network create \
  --driver bridge \
  --subnet 192.168.10.0/24 \
  mynet

优点:隔离强、容易管理端口映射

docker-compose 默认就是使用 bridge(自建 network)

host

直接共享宿主机网络,不做 NAT

使用方式:

shell
docker run --network host ...

特点:

  • 性能最好(无 NAT)

  • 容器无法与 host 上端口冲突(冲突会失败)

  • 安全隔离最弱

使用场景:

  • Prometheus Node Exporter 等需要访问宿主机端口的

none

没有网络,纯隔离环境

shell
docker run --network none ...

container

让多个容器共享同一个网络堆栈

shell
docker run --network container:<container_name> ...

场景:

把多个进程拆成多个容器但共用同一个 IP(Sidecar-like)

yaml
version: "3.9"

services:
  app:
    image: nginx:alpine
    container_name: app
    ports:
      - "8080:80"
    # 注意:这个容器是网络 namespace 的提供者
    # sidecar 会加入 app 的网络
    restart: always

  sidecar:
    image: alpine
    container_name: sidecar
    command: ["sh", "-c", "while true; do nc -lk -p 8081 -e echo 'Hello from sidecar'; done"]
    # 核心配置:共享 app 的网络 namespace
    network_mode: "service:app"
    # 共享网络通常要共享 PID 才方便调试,但不是必须
    # pid: "service:app"
    restart: always

overlay

  • 多机网络,用于 docker swarm / k8s cni

  • 覆盖集群,将不同节点的容器连接成一个虚拟二层网络

调试工具

shell
docker network ls
docker network inspect <name>
docker exec -it <container> ip addr
docker exec -it <container> netstat -ntlp
docker exec -it <container> ping <ip>

状态管理

Volume

Docker 自己管理,位于 /var/lib/docker/volumes

类似 k8s 的 PV/PVC

使用方式:

shell
docker volume create mydata
docker run -v mydata:/data ...

用在数据库、缓存、文件存储等需要持久化的业务

Bind Mount

直接挂宿主机目录

shell
docker run -v /var/log/nginx:/logs ...

特点:

  • 适合开发调试(挂源码)
  • 和宿主机耦合紧

tmpfs 内存盘

数据存在内存中,容器删除就没了

shell
docker run --tmpfs /run/data ...

适合:

  • 高速缓存
  • 私密数据(不落盘)

重启策略(restart policy)

Docker 原生提供重启策略:

策略描述
no不自动重启
always无论退出状态如何,立刻重启
unless-stopped除非用户主动 stop,否则重启
on-failure[:max-retries]Exit code ≠ 0 才重启

例子:

shell
docker run --restart=always ...
docker run --restart=on-failure:3 ...

说明:

  • always 常用于生产服务(Nginx、Redis)
  • on-failure 常用于可能短暂出错的脚本服务
  • unless-stopped 常用于你希望机器重启时也恢复,但手动停服务不会自动重启的场景

安全