容器的网络入门

简介: 在本实验中我们将学习通过容器中的网络用法

容器的网络入门


1. 创建相关实验资源。

  1. 在体验实验室,单击创建资源。
  2. (可选)在实验室⻚⾯左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、⽤户信息等)。 说明:资源创建过程需要1~3分钟。

2. 创建实验环境镜像

在前面的实验中我们学习了Docker中的容器和容器镜像的用法。而容器作为一种虚拟机技术,其网络和存储模型也是非常重要的知识重点,因此本实验中我们讲的带领大家学习容器的网络模型的基本概念。

  1. 编写自定义Dockerfile

为了后续实验的进行,我们先来创建一个包含python环境的自定义镜像,我们基于python3.7构建实验镜像。接下来我们为实验镜像配置aliyun的ubuntu的apt源,并且进行apt的初始化操作,在初始化完成之后。我们为镜像安装curlpingifconfigtraceroute等常用网络工具。最后我们设置镜像运行时在8000端口启动python3内置的http服务

我们通过vi编辑Dockerfile,并将下面的内容添加到中Dockerfile中,注意使用vim编辑器时:

  1. 需要先按i键进入编辑模式。
  2. 编辑完成之后按esc退出编辑模式。
  3. 然后按大写的ZZ保存并退出vim。
vi Dockerfile
FROM python:3.7
  EXPOSE 8000
  RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse \n\
  deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse \n\
  deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse \n\
  deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse \n\
  deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse \n\
  deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse \n\
  deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse \n\
  deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse \n\
  deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse \n\
  deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" > /etc/apt/sources.list
  RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
  RUN apt-get update
  RUN apt-get install -y curl net-tools inetutils-ping traceroute
  CMD ["python3", "-m", "http.server", "8000"]
  1. 编译镜像

编辑好Dockerfile之后,通过docker build命令生成新的镜像。注意镜像生成过程中,需要通过网络安装相关组件,因此容器构建时间可能会比较长。

docker build -t py/http .
docker images

  1. 验证镜像

容器制作完毕后,我们创建容器,然后使用docker exec命令在容器中执行curl 127.0.0.1:8000验证服务的启动。

docker run -itd --name check py/http
docker exec check curl 127.0.0.1:8000
docker rm -f check

3. 容器和宿主机中的网卡

实验环境创建成功后,接下来我们来学习容器和宿主机中的网卡信息

  1. 容器的网卡信息

创建容器后。docker会为容器默认创建一块虚拟网卡。容器通过这块网卡实现网络连接,为了验证容器的网卡,我们首先用自定义镜像pyt/http创建两个容器,当容器创建好之后,我们通过docker inspect命令查看容器详细信息,详细信息中包含容器网卡的IP。为了简化容器信息的查看,我们可以使用-f参数来筛选容器的信息。

docker run -itd --name py1 py/http
docker run -itd --name py2 py/http
docker inspect -f '{{.NetworkSettings.IPAddress }}' py1
docker inspect -f '{{.NetworkSettings.IPAddress }}' py2

  1. 多容器信息查询

当Docker中的容器或者容器镜像数量较多的时候,每次使用一条命令来查询一个容器或者镜像信息就会变得非常的繁琐。这时我们就可以使用docker ps-f "name=value"参数过滤所需要的对象,再用-q参数只获得所需要对象的ID。

接下来再配合linux命令行的$(),将对象的ID作为参数传给docker inspect命令。这样就可以一次性获得所有对象的配置信息。我们通过下列命令显示所有容器名称包含py的容器的IP地址。

docker ps -f "name=py" -q
docker inspect -f '{{.Name}} {{.NetworkSettings.IPAddress }}' $(docker ps -f "name=py" -q)

  1. 宿主机的网卡信息

在docker安装之后,也会在宿主机上安装一块默认的虚拟网卡docker0,该网卡可以和容器中的虚拟网卡互联互通。我们先通过ifconfig查看docker0的网卡信息。

ifconfig docker0

4. 容器和宿主机的连通性

本小节中我们来测试容器和宿主机网络连通性

  1. 测试宿主机和容器之间的连通性

接下来我们来测试的宿主机和容器网卡的互联互通,会发现在默认情况下,宿主机可以通过docker0网卡访问容器中的服务。

ping -c 4 [py1容器IP]
curl [py1容器IP]:8000
ping -c 4 [py2容器IP]
curl [py2容器IP]:8000

  1. 容器之间的网络连接

接下来我们来测试容器之间的网络连通性,我们通过ifconfig命令查看容器详细信息,会可以发现各容器的的IP地址属于同一个子网,这种设置保证了容器之间的网卡可以互联互通,为了验证我们进入py1容器的控制台,然后测试py1到宿主机和py2的连通性。

docker exec -it py1 /bin/bash
ping -c 4 [docker0 IP]
ping -c 4 [py2容器IP]
curl [py2容器IP]:8000
exit

  1. 容器的外网访问

在上一个步骤中查看容器的网络信息时,我们会发现容器的网卡中网关IP正是宿主机的docker0网卡的IP。这就意味着,如果容器的宿主机可以访问互联网,容器就可以通过宿主机的docker0网卡转发网络数据包访问互联网。为了验证我们进入py1容器的控制台,ping访问aliyun.com验证连通性,再通过traceroute命令验证容器访问外网的路径。会发现容器访问外网的第一条就是docker0网卡。

docker exec -it py1 /bin/bash
ping -c 4 www.aliyun.com
traceroute www.aliyun.com -w 0.1
exit

5. 容器的端口映射

在上面的几个小节中我们学习了了,容器和宿主机的互相访问,容器和容器的互相访问,以及容器对外网的访问。但是由于容器本身使用了Docker创建的私有网络地址,虽然可以通过docker0网卡转发访问外网,但是无法提供服务,让外网的使用者来访问。

为了解决这个问题,我们就需要用到容器的端口映射功能。通过端口映射功能,我们可以将宿主机的一个端口和一个指定容器的端口进行映射绑定,所有对宿主机端口的访问数据包,都会自动转发到指定容器的端口上。这样只要外网访问者只要能访问到宿主机,就可以通过端口映射功能,访问到容器中的服务。从而实现了通过容器对外发布服务的能力。

本小节中我们就来为大家演示Docker端口映射的常用用法。

  1. 端口映射的基本用法

第一种用法就是在docker run中通过-p参数进行容器和宿主机的端口映射绑定。-p参数有两种用法,第一种是分别指定宿主机端口和容器端口,其语法格式为 -p 宿主机端口:容器端口;第二种是只指定容器端口,由docker自动分配宿主机端口。其语法格式为 -p 容器端口

如果需要为容器指定映射多个端口,可以在docker run中使用多个-p参数。在使用端口映射启动容器之后,我们可以通过docker ps命令查看容器的端口映射配置。

docker run -itd -p 18000:8000 -p 18001:8000 --name port1 py/http
docker run -itd -p 8000 --name port2 py/http
docker ps -f "name=port"

  1. 查看端口映射

端口映射完成后,我们往往需要查看映射信息,尤其是对docker自动分配宿主机端口的映射方式。除了可以用docker ps命令查看映射信息之外。还可以使用docker port命令查看映射信息,其调用格式为docker port 容器名或者docker port 容器名 容器端口

docker port port1
docker port port1 8000
docker port port2

  1. 验证端口映射

当我们确定了容器在宿主机上的映射端口之后,我们就可以在宿主机上通过curl命令来验证映射功能。为了控制curl命令的输出,我们可以使用linux的|语法,配置head -n1压缩网页输出。。

curl 127.0.0.1:18000 | head -n1
curl 127.0.0.1:18001 | head -n1
curl 127.0.0.1:[port2宿主机端口]  | head -n1

实验地址:https://developer.aliyun.com/adc/scenario/0d6f2eae2de840e68d5e0159d7c6e83e

相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
115 2
|
27天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
15天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
57 8
|
1月前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
99 3
图卷积网络入门:数学基础与架构设计
|
27天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
84 2
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
77 3
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
119 7
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
51 5