# 安装相关
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_netdocker service create --network my_net nginx |
| Macvlan | 为容器分配独立 MAC 地址,直接接入物理网络 | 容器需作为物理网络设备 | docker network create -d macvlan --subnet=192.168.1.0/24 -o parent=eth0 my_macvlandocker 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_bridgedocker 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 的特殊场景(如防火墙规则、监控配置等)。