Docker之十一:端口映射与容器互联

端口映射

外部访问容器应用

默认情况下,容器启动,容器外部是无法通过网络来访问容器内的网络应用和服务的。
docker run 启动网络可以通过 -P-p 参数来指定端口映射:
-P和-p

参数说明
-PDocker会随机映射一个49000~49900的端口到内部容器开放的网络端口
-p可以指定网络端口 IP:HostPort:ContainerPort 或 IP: :ContainerPort 或 HostPort:ContainerPort
# 创建并开始运行一个 web 容器
~$ docker run -d -P training/webapp python app.py

创建容器

# 查看容器信息
$ docker ps -l

查看容器信息
可以发现宿主主机的32768端口被映射到容器的5000端口。我们可以用浏览器访问http://192.168.194.132:32768/,192.168.194.132为宿主机的IP:
在这里插入图片描述

# 查看应用信息
$ docker logs -f 526d4f761031

查看应用信息

映射所有接口地址

# HostPort:ContainerPort 本地的5000端口映射容器的5000端口,默认会绑定本地所有接口上的所有地址
$ docker run -d -p 5000:5000 training/webapp python app.py
# 使用 -p 可以绑定多个端口
$ docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

映射到指定地址的指定端口

# IP:HostPort:ContainerPort 指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
# 执行下列命令后,本地就可以通过 127.0.0.1:5001 来访问容器5000端口
$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

映射到指定地址的任意端口

# IP::ContainerPort 绑定 localhost 的任意端口到容器的5000端口,本地主机自动分配一个端口
$ docker run -d -p 127.0.0.1::5000 training/webapp python app.py

绑定 UDP 端口

# 使用 -p 参数默认绑定 tcp 端口,可以使用 udp 标记来指定 udp 端口
$ docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py

查看映射端口配置

# 使用 docker port 来查看当前映射的端口配置
$ docker port 526d4f761031 5000

查看端口映射配置

查看容器内部网络和 IP 地址

$ docker inspect 526d4f761031

Docker 容器互联

容器互联(linking)是一种让多个容器中的应用快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。

自定义容器命名

# 创建一个别名为 web 的容器
$ docker run -d -P --name web training/webapp python app.py

创建容器别名

基于 network 的容器互联

  1. 使用 docker network create 创建一个网络
    docker network create
$ docker network create -d bridge test-net
  1. 运行两个个容器并连接到新建的 test-net 网络
$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash 
  1. 在两个终端中进入容器
$ docker exec -it test1 /bin/bash
root@8d0c0dc9d82e:/# apt-get update

进入test1

$ docker exec -it test2 /bin/bash
root@72cb3de50bf3:/# apt-get update

进入test2

  1. 在 test1 和 test2 容器内安装 ping 工具
# test1 安装 iputils-ping
root@8d0c0dc9d82e:/# apt install iputils-ping
# test2 安装 iputils-ping
root@72cb3de50bf3:/# apt install iputils-ping
  1. ping
    ping test2
    ping test1
    test1 与 test2 建立了容器连接。

容器互联 --link

# 运行一个数据库容器 db
$ docker run -d --name db training/postgres
# 运行一个网站容器 web,连接到 db
# --link 参数格式为 --link name:alias,name为容器名,alias 为容器别名
$ docker run -d -P --name web --link db:db training/webapp python app.py      

此时,进入 web 容器,安装 ping 工具, ping db:

fgd@ubuntu:~$ docker exec -it web /bin/bash
root@ef59f8dc53da:/opt/webapp# apt-get update
root@ef59f8dc53da:/opt/webapp# apt install inetutils-ping
oot@ef59f8dc53da:/opt/webapp# ping db

ping db
web 可以联通 db。

配置 DNS

容器启动时没有配置或没有使用 –dns–dns-search 指定 DNS,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。
配置 DNS 可以通过两种方式:

  1. 配置 /etc/docker/daemon.json ,并重启 Docker。
{
	"dns" : [
		"114.114.114.114",
    	"8.8.8.8"
  	]
}

查看容器的 DNS 是否生效,可以查看容器的/etc/resolv.conf

$ docker run -it --rm  ubuntu  cat etc/resolv.conf
  1. 只为指定的容器设置 DNS
    dns系列参数
$ docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值