Docker 相关

8/4/2025 docker

# 安装相关

Docker Desktop for Windows (opens new window)

史上最全(全平台)docker安装方法 (opens new window)

【Windows】旧版 WSL 的手动安装步骤(不装 Docker Desktop 会启动失败) (opens new window)

# 常用后台服务挂载命令

# Redis

docker run -d --name redis -p 6379:6379 --restart always redis

docker 安装 redis 并配置 redis.conf(默认没有) (opens new window)

# Rabbitmq

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 --restart always rabbitmq
docker run -d --name rabbitmq --restart=always --name rabbitmq_management -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:management # 这个可以进ui界面

# Zookeeper

docker run --name zookeeper -d -p 2181:2181 --restart always zookeeper

# Emqx

docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 --restart always emqx/emqx:latest

# Mongodb

docker run --name mongo -d -p 27017:27017 -v /Users/[YourUsername]/db:/data/db --restart always mongo

# PostgreSQL

docker run --name postgres -e POSTGRES_DB=admin_dashboard -e POSTGRES_USER=root -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:15

# Mysql

# -e MYSQL_DATABASE=testdb -v mysql_data:/var/lib/mysql
docker run -d --name mysql-local -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

# Docker 基本命令

Docker基础篇 - (二)Docker的常用命令 (opens new window)

docker | Docker Documentation (opens new window)

docker version    # 显示docker的版本信息。
docker info       # 显示docker的系统信息,包括镜像和容器的数量
docker [命令] --help # 帮助命令

docker images # 查看所有镜像
docker search [镜像名称] # 搜索镜像
docker pull [镜像名称] # 下载镜像
docker rmi [镜像名称] # 删除镜像
##### 以下是容器运行(基于镜像)命令,先有镜像才有容器
docker run [可选参数] image

###### 参数说明
--name = "Name"    容器名字  tomcat01,tomcat02,用来区分容器
-d                 后台方式运行
-it                使用交互方式运行,进入容器查看区分
-p                 指定容器的端口 -p 8080:8080
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口(常用)
    -p 容器端口
    容器端口
-P                 随机指定端口
######

docker ps # 列出所有容器


# Docker 清理容器日志脚本

#!/bin/bash
logs=$(find /vol/docker/containers/ -name *-json.log)
for log in $logs
do
        echo "clean logs : $log"
        cat /dev/null > $log
done

echo "======== end clean docker containers logs ========"
~

# docker 常用的网络模式有哪些?

网络模式 特点 适用场景 示例命令
Bridge 默认通过 docker0 网桥通信,NAT 转发,容器间通过 IP 互通 单机多容器开发环境 docker run -d --name my_container -p 8080:80 nginx
Host 直接共享主机网络,无隔离,高性能 需高性能或直接使用主机端口的场景 docker run -d --name my_container --network host nginx
None 无网络配置,完全隔离 安全测试或离线数据处理 docker run -d --name my_container --network none alpine sleep 3600
Overlay 跨主机通信,基于 VXLAN,适用于集群 Docker Swarm/Kubernetes 集群 docker network create -d overlay my_net
docker service create --network my_net nginx
Macvlan 为容器分配独立 MAC 地址,直接接入物理网络 容器需作为物理网络设备 docker network create -d macvlan --subnet=192.168.1.0/24 -o parent=eth0 my_macvlan
docker run --network my_macvlan -d nginx
IPvlan 类似 Macvlan,但共享 MAC 地址,通过不同 IP 区分 避免 MAC 地址泛滥的网络环境 docker network create -d ipvlan --subnet=192.168.1.0/24 -o parent=eth0 my_ipvlan
自定义桥接 用户自定义桥接网络,支持 DNS 自动解析容器名 单机内容器需通过名称通信(如微服务) docker network create my_bridge
docker run -d --name web --network my_bridge nginx

# Docker Compose 如何指定网络 IP?

在 Docker Compose 中为容器指定固定 IP(静态 IP)的核心是定义自定义网络,并在该网络中为容器分配特定的 IP 地址。

# 方法一:在 Compose 文件中完整定义网络和 IP ⭐ 推荐

这是最直接、最推荐的方式,在 docker-compose.yml 文件中同时定义网络和各个服务的 IP 地址。

version: '3.8'

services:
  web:
    image: nginx:latest
    container_name: my-nginx
    networks:
      my_custom_net:
        # 为这个容器指定静态 IPv4 地址
        ipv4_address: 172.25.0.10
    ports:
      - "8080:80"

  db:
    image: mysql:8.0
    container_name: my-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
    networks:
      my_custom_net:
        # 为另一个容器指定不同的静态 IP
        ipv4_address: 172.25.0.11

# 定义自定义网络
networks:
  my_custom_net:
    driver: bridge
    ipam:
      driver: default
      config:
        # 定义网络的子网和网关
        - subnet: "172.25.0.0/16"
          gateway: "172.25.0.1"

配置说明:

配置项 说明
networks 顶级字段,定义自定义网络
ipam IP 地址管理配置,指定子网范围
subnet 定义 IP 地址段(如 172.25.0.0/16
gateway 网关地址(可选)
ipv4_address 为容器指定静态 IP,必须在子网范围内

# 方法二:使用外部已创建的网络

如果已经通过 docker network create 命令提前创建了自定义网络,可以在 Compose 文件中直接引用它。

1️⃣ 首先在命令行创建网络:

docker network create --subnet=10.5.0.0/16 my_precreated_net

2️⃣ 在 docker-compose.yml 中引用该网络:

version: '3.8'

services:
  app:
    image: alpine:latest
    container_name: my-app
    command: ["sleep", "infinity"]
    networks:
      my_precreated_net:
        # 指定 IP,必须在上一步定义的子网内
        ipv4_address: 10.5.0.100

# 定义外部网络
networks:
  my_precreated_net:
    external: true  # 告诉 Compose,这个网络已经存在,不要再创建

# 重要注意事项

注意事项 说明
避免 IP 冲突 确保手动指定的 ipv4_address 在子网中是唯一且未被占用的
DNS 依然有效 即使指定了静态 IP,Docker 内置 DNS 仍然工作,推荐使用服务名通信
版本要求 需要 Compose 文件格式 version 2 及以上
跨平台支持 bridge 驱动在 Linux 上原生运行,在 Docker Desktop 中运行在虚拟机内

最佳实践

虽然可以为容器指定静态 IP,但更推荐使用服务名称进行容器间通信(如 http://db:3306),这样可以获得更好的灵活性和可维护性。静态 IP 主要用于需要固定 IP 的特殊场景(如防火墙规则、监控配置等)。