运行 Nginx 容器,并映射端口 使用随机分配端口 32768 访问 容器内 80 端口 显示 容器 访问记录Docker 网络功能
外部访问容器
容器间互相访问
外部访问容器
运行容器时,可以使用-P或-p参数映射网络端口到容器内部
如果映射时不指定端口,则会随机分配端口 (CentOS及Ubuntu两台主机创建,分配的都是32678端口)
实例
# 运行 容器 nginx:alpine 并 随机映射端口
docker run -d -P nginx:alpine
# 显示 容器列表
docker ps -a
docker container ls -l
# 显示 容器 访问记录
docker logs {容器 ID}
docker logs a42
映射 端口
命令样例
# -P 或 -p 参数
# 可在后方增加 /udp 参数 来指定 UDP 端口
# 映射所有接口地址
主机端口(hostPort):容器端口(containerPort)
# 映射到指定地址的指定端口
IP地址:主机端口(hostPort):容器端口(containerPort)
# 映射到指定地址的任意端口
IP地址:容器端口(containerPort)
映射所有接口地址
# 运行 nginx:alpine , -d 后台运行 -p 80:80 映射主机80端口到容器80端口
docker run -d -p 80:80 nginx:alpine
映射到指定地址的指定端口
# 运行 nginx:alpine , -d 后台运行 -p 172.16.26.126:80:80 映射主机IP 172.16.26.126的80端口到容器80端口
docker run -d -p 172.16.26.126:80:80 nginx:alpine
映射到指定地址的任意端口
# 运行 nginx:alpine , -d 后台运行 -p 172.16.26.126::80 映射主机IP 172.16.26.126的随机端口到容器80端口
docker run -d -p 172.16.26.126::80 nginx:alpine
# 使用 dup 参数 指定 dup 端口
查看端口映射配置
# 命令格式
docker port {容器ID} {端口}
# 查看端口映射配置
docker port 7676
# 查看80 端口映射配置
docker port 7676 80
查看容器配置
# 命令格式
docker inspect {容器ID}
# 查看容器配置
docker inspect 7676
使用 -P 参数 映射多个端口
# 使用-P参数,映射80 、443 两个端口 到容器
docker run -d \
-p 80:80 \
-p 443:443 \
nginx:alpine
容器间互联
# Docker 网络 类似于 虚拟化中的 虚拟交换机 或 端口组
# Docker 网络 有 bridge 、 overlay 两种类型 , 可以使用 -d 参数来指定 Docker 网络类型
# overlay 网络 类似于 Swarm mode
新建 容器 网络
# 命令格式
docker network create -d {网络类型} {网络名称}
# 命令样例
docker network create -d bridge my-net
连接容器 进入 网络
# 运行 容器 并连接到 my-net 网络
docker run -it --rm --name busybox1 --network my-net busybox sh
# 再次运行 一个容器 并连接到 my-net 网络
docker run -it --rm --name busybox2 --network my-net busybox sh
# 在 容器 busybox2 中,ping busybox1 测试网络连通性
ping busybox1
配置 DNS
通过 daemon.json 文件 配置 DNS
编辑 daemon.json 文件
# 编辑 daemon.json 文件
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
# 备用 完整 daemon.json 文件
# {
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"dns" : [
"114.114.114.114",
"223.5.5.5"
]
}
# }
验证 DNS 配置
# 运行 容器 ubuntu:18.04 并 显示 DNS配置文件信息 etc/resolv.conf
docker run -it --rm ubuntu:18.04 cat etc/resolv.conf
使用 参数 手工指定 容器配置
# -h HOSTNAME 或者 --hostname=HOSTNAME :设定容器的主机名,会修改/etc/hostname 和 /etc/hosts
# --dns=IP_ADDRESS :设定容器的DNS,会修改/etc/resolv.conf,而不引用 /etc/docker/daemon.json
# --dns-search=DOMAIN :设定容器搜索域,配置后,不仅搜索 /etc/hosts 还会搜索 搜索域