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