天天看点

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

Docker入门与实践:Docker中的网络功能简介

Docker提供网络服务的方法包括两种:

  • 通过外部访问docker容器的方式;
  • 通过Docker容器间互联的方式。

一、外部访问docker容器

在docker容器中可以运行一些网络应用,外部想要访问docker容器内的应用,可以通过

-p

-P

选项来指定端口映射,两个选项的区别如下所示:

  • (1)

    -p

    :指定要映射的端口,通过该端口绑定一个docker容器;
  • (2)

    -P

    :docker会随机映射一个范围的端口到内部容器开放的网络端口。其中这个随机的端口范围可以在

    /proc/sys/net/ipv4/ip_local_port_range

    文件中查看,如下图所示,我的电脑中的端口范围为

    32768-60999

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

1.1 使用

-P

选项外部访问docker容器

如下图所示,使用

docker run -d -P training/webapp python app.py

命令创建一个可以通过外部网络访问的docker容器;然后使用

docker container ls -l

查看容器的端口信息。这样就创建了一个本地主机

49159

端口映射到容器

5000

端口的容器。

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

1.2 使用

-p

选项外部访问docker容器

如上所述,

-p

指定特定的端口绑定到一个容器上,其支持的格式有:

  • hostPort:containerPort

    :映射本地特定端口所有ip地址到容器的特定端口;
  • ip:hostPort:containerPort

    :映射本地特定端口的特定ip地址到容器的特定端口;
  • ip::containerPort

    :映射本地主机特定ip地址的随机端口到容器特定的端口;

其中,上面的

hostPort

表示主机端口或本地端口;

containerPort

表示容器端口;

ip

表示网址,下面分别罗列这三种格式的使用方法:

1、映射本地特定端口所有ip地址到容器的特定端口

使用

hostPort:containerPort

格式可以将本地主机特定端口映射到容器的特定端口,以实现外部访问容器的目的,指令如下所示:

docker run -d -p 5000:5000 training/webapp python app.py
           

复制

如下图所示,默认会绑定本地接口

5000

上所有ip地址到容器的

5000

端口上。

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

上图中的

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

端口上。

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

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

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介
注意:

-p

可以多次使用来绑定多个端口,指令如下所示:
docker run -d \
    -p 5000:5000 \
    -p 3000:80 \
    training/webapp \
    python app.py
           

复制

执行完上面指令,使用

docker container ls

命令就可以看出绑定了两组端口:

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

二、Docker容器的互联

Docker容器不仅可以通过网络与本地主机互联,容器还可以通过docker自定义的网络来实现容器间互联。

2.1 自定义docker网络的构建

构建自定义docker网络的指令如下所示:

docker network create -d bridge My_Net
           

复制

其中,

-d

指定了docker的网络类型为

bridge

类型,并自定义docker网络的名称为

My_Net

。如下图所示,可以使用

docker network ls

查看系统的docker网络:

Docker入门与实践:Docker中的网络功能简介Docker入门与实践: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

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

然后,再打开一个终端,使用同样的方法创建一个

busybox_2

容器并连接到

My_Net

docker网络:

docker run -it --rm \
    --name busybox_2 \
    --network My_Net busybox sh
           

复制

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

再打开一个终端,如下图所示,使用

docker container ls

查看容器信息:

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介

2、测试通过docker网络互联的容器

通过

ping

来测试

busybox_1

容器和

busybox_2

容器的互联:

如下图所示,在

busybox_2

容器内输入

ping busybox_1

,即用

ping

指令来测试

busybox_2

容器连接

busybox_1

的情况,到如下图的结果则表示两个容器互联成功:

Docker入门与实践:Docker中的网络功能简介Docker入门与实践:Docker中的网络功能简介