Docker 基本网络功能

  Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。

外部访问容器

  容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P-p 参数来指定端口映射。

  当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

  使用 docker container ls 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面。

$ docker run -d -P training/webapp python app.py
$ docker container ls -l
CONTAINER ID  IMAGE                   COMMAND       CREATED        STATUS        PORTS                      NAMES
bc533791f3f5  training/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155->5000/tcp    nostalgic_morse

  同样的,可以通过 docker logs 命令来查看应用的信息。

$ docker logs -f nostalgic_morse
* Running on http://0.0.0.0:5000/
10.0.2.2 - - [23/May/2014 20:16:31] "GET / HTTP/1.1" 200 -
10.0.2.2 - - [23/May/2014 20:16:31] "GET /favicon.ico HTTP/1.1" 404 -

  -p 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort

映射所有接口地址

  使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行:

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

  此时默认会绑定本地所有接口上的所有地址。

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

  可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1

$ docker run -d -p 127.0.0.1:5000: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 标记来指定 udp 端口

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

查看映射端口配置

  使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

$ docker port nostalgic_morse 5000
127.0.0.1:49155.

  注意:

  • 容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker还可以有一个可变的网络配置。)
  • -p 标记可以多次使用来绑定多个端口

  例如:

$ docker run -d \
    -p 5000:5000 \
    -p 3000:80 \
    training/webapp \
    python app.py

容器互联

  如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 –link 参数。

新建网络

  下面先创建一个新的 Docker 网络。

$ docker network create -d bridge my-net

  -d 参数指定 Docker 网络类型,有 bridge overlay 。其中 overlay 网络类型用于Swarm mode,此处先忽略它。

连接容器

  运行一个容器并连接到新建的 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

  再打开一个新的终端查看容器信息

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
de655449bd98        busybox             "sh"                     15 minutes ago      Up 15 minutes                                 busybox2
547e9ac79d2c        busybox             "sh"                     15 minutes ago      Up 15 minutes                                 busybox1
01171abb79ef        training/webapp     "python app.py"          About an hour ago   Up About an hour    0.0.0.0:32772->5000/tcp   confident_shockley
e6905f641894        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:80->80/tcp        sad_brattain
fb80a496c160        registry            "/entrypoint.sh /etc…"   29 hours ago        Up 2 hours          0.0.0.0:5000->5000/tcp    registry

  下面通过 ping 来证明 busybox1 容器和 busybox2 容器建立了互联关系。

  在 busybox1 容器输入以下命令

/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

  用 ping 来测试连接 busybox2 容器,它会解析成 172.19.0.3 。

  同理在 busybox2 容器执行 ping busybox1 ,也会成功连接到。

/ # ping busybox1
PING busybox1 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms

  这样, busybox1 容器和 busybox2 容器建立了互联关系。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,以便在不同的环境中进行部署和运行。以下是Docker基本概念: 1. 镜像(Image):镜像是Docker容器的基础,它包含了一个完整的文件系统,包括运行应用程序所需的所有依赖项。镜像是只读的,可以通过Dockerfile定义和构建。 2. 容器(Container):容器是基于镜像创建的运行实例,它可以被启动、停止、删除和重启。每个容器都是相互隔离的,拥有自己的文件系统、进程空间和网络接口。 3. 仓库(Repository):仓库是用于存储和分享镜像的地方。Docker Hub是一个公共的仓库,你可以在其中找到各种各样的镜像。此外,你也可以创建私有仓库来存储自己的镜像。 4. Dockerfile:Dockerfile是一个文本文件,用于定义如何构建一个镜像。它包含了一系列的指令,例如基础镜像选择、安装软件、配置环境等。 5. 镜像层(Image Layer):镜像层是构成镜像的基本单位,每个指令在Dockerfile中都会创建一个新的镜像层。镜像层是只读的,并且可以被共享和重用,这样可以节省存储空间。 6. 容器编排(Container Orchestration):容器编排是指管理和协调多个容器的过程,以便实现高可用性、负载均衡和自动扩展等功能。Kubernetes和Docker Swarm是两个常用的容器编排工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值