Docker提供多种网络模式,可通过--network
参数指定:
# 查看现有网络
docker network ls
# 创建自定义桥接网络
docker network create --driver bridge my-bridge-network
# 运行容器时指定网络
docker run -d --name web --network my-bridge-network nginx
主要网络模式: - bridge:默认模式,容器通过docker0桥接网络通信 - host:容器直接使用主机网络栈 - none:无网络连接 - overlay:用于Swarm集群的多主机通信 - macvlan:为容器分配MAC地址,使其在物理网络中可见
# 将容器80端口映射到主机8080端口
docker run -d -p 8080:80 --name web nginx
# 随机映射端口
docker run -d -p 80 --name web nginx
# 仅暴露端口但不映射到主机(在Dockerfile中使用EXPOSE指令)
docker run -d --expose 80 --name web nginx
# 为容器指定DNS服务器
docker run --dns 8.8.8.8 --dns 8.8.4.4 alpine cat /etc/resolv.conf
# 修改所有容器的默认DNS配置(修改daemon.json)
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
# 通过容器名称通信(需在同一自定义网络中)
docker network create mynet
docker run -d --name web --network mynet nginx
docker run -it --network mynet alpine ping web
docker run -d --name web --network mynet --network-alias website nginx
docker run -it --network mynet alpine ping website
# 以非root用户运行容器
docker run -u 1000 alpine whoami
# 限制内核功能
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
# CPU限制
docker run -it --cpus=".5" ubuntu
# 内存限制
docker run -it -m 512m --memory-swap 1g ubuntu
# 只读文件系统
docker run --read-only alpine touch /tmp/test
# 临时文件系统(tmpfs)
docker run --tmpfs /run:rw,noexec,nosuid,size=65536k alpine
# 禁止特权模式
docker run --privileged=false alpine
# 使用Docker Bench进行安全审计
docker run -it --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker/docker-bench-security
通过合理配置网络和安全策略,可以确保Docker环境既满足功能需求又具备足够的安全性。