
Docker入门与实践:Docker中的网络功能简介
Docker提供网络服务的方法包括两种:
- 通过外部访问docker容器的方式;
- 通过Docker容器间互联的方式。
一、外部访问docker容器
在docker容器中可以运行一些网络应用,外部想要访问docker容器内的应用,可以通过
-p
或
-P
选项来指定端口映射,两个选项的区别如下所示:
- (1)
:指定要映射的端口,通过该端口绑定一个docker容器;-p
- (2)
:docker会随机映射一个范围的端口到内部容器开放的网络端口。其中这个随机的端口范围可以在-P
文件中查看,如下图所示,我的电脑中的端口范围为/proc/sys/net/ipv4/ip_local_port_range
。32768-60999
1.1 使用 -P
选项外部访问docker容器
-P
如下图所示,使用
docker run -d -P training/webapp python app.py
命令创建一个可以通过外部网络访问的docker容器;然后使用
docker container ls -l
查看容器的端口信息。这样就创建了一个本地主机
49159
端口映射到容器
5000
端口的容器。
1.2 使用 -p
选项外部访问docker容器
-p
如上所述,
-p
指定特定的端口绑定到一个容器上,其支持的格式有:
-
:映射本地特定端口所有ip地址到容器的特定端口;hostPort:containerPort
-
:映射本地特定端口的特定ip地址到容器的特定端口;ip:hostPort:containerPort
-
:映射本地主机特定ip地址的随机端口到容器特定的端口;ip::containerPort
其中,上面的
hostPort
表示主机端口或本地端口;
containerPort
表示容器端口;
ip
表示网址,下面分别罗列这三种格式的使用方法:
1、映射本地特定端口所有ip地址到容器的特定端口
使用
hostPort:containerPort
格式可以将本地主机特定端口映射到容器的特定端口,以实现外部访问容器的目的,指令如下所示:
docker run -d -p 5000:5000 training/webapp python app.py
复制
如下图所示,默认会绑定本地接口
5000
上所有ip地址到容器的
5000
端口上。
上图中的
0.0.0.0:5000
表示本地主机
5000
端口上的所有ip地址。
2、映射本地特定端口的特定ip地址到容器的特定端口
使用
ip:hostPort:containerPort
格式可以将本地主机的特定端口的特定ip地址映射到容器的特定端口,以实现外部访问容器的目的,比如这里的
ip
为
127.0.0.1
,指令如下所示:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
复制
如下图所示,默认会绑定本地端口
5000
上
127.0.0.1
的ip地址到容器的
5000
端口上。
3、映射本地主机特定ip地址的随机端口到容器特定的端口
使用
ip::containerPort
格式可以将本地主机特定的ip地址的随机端口到容器的特定端口,以实现外部访问容器的目的,比如这里的
ip
为
127.0.0.1
,指令如下所示:
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
复制
如下图所示,绑定本地主机随机端口上的
127.0.0.1
ip地址到容器的
5000
端口上,这里的随机分配的主机端口为
49154
。
注意: -p
可以多次使用来绑定多个端口,指令如下所示:
docker run -d \
-p 5000:5000 \
-p 3000:80 \
training/webapp \
python app.py
复制
执行完上面指令,使用
docker container ls
命令就可以看出绑定了两组端口:
二、Docker容器的互联
Docker容器不仅可以通过网络与本地主机互联,容器还可以通过docker自定义的网络来实现容器间互联。
2.1 自定义docker网络的构建
构建自定义docker网络的指令如下所示:
docker network create -d bridge My_Net
复制
其中,
-d
指定了docker的网络类型为
bridge
类型,并自定义docker网络的名称为
My_Net
。如下图所示,可以使用
docker network ls
查看系统的docker网络:
2.2 Docker容器的网络连接
这里演示两个容器通过上面创建的docker网络
My_Net
,进行互联的过程:
1、创建连接docker网络的容器
首先,启动或创建一个
busybox_1
容器并连接到上面创建的
My_Net
docker网络,指令如下所示:
docker run -it --rm \
--name busybox_1 \
--network My_Net busybox sh
复制
如下如所示,由于本地没有
busybox:latest
镜像,所以首先从远程镜像仓库拉取镜像,再创建连接的docker网络
My_Net
的容器
busybox_2
:
然后,再打开一个终端,使用同样的方法创建一个
busybox_2
容器并连接到
My_Net
docker网络:
docker run -it --rm \
--name busybox_2 \
--network My_Net busybox sh
复制
再打开一个终端,如下图所示,使用
docker container ls
查看容器信息:
2、测试通过docker网络互联的容器
通过
ping
来测试
busybox_1
容器和
busybox_2
容器的互联:
如下图所示,在
busybox_2
容器内输入
ping busybox_1
,即用
ping
指令来测试
busybox_2
容器连接
busybox_1
的情况,到如下图的结果则表示两个容器互联成功: