容器的介绍
容器是一种基础工具,泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器则可以保护内容物。
名称挂载点
Mount:挂载点
UTS:主机名与域名
IPC:信息量、消息队列和共享内存
PID:进程号
Network:网络设备、网络栈、端口号
user:用户和组
docker的概念
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
在 LXC 的基础上 Docker 进行了进一步的封装,就是用户创建容器的一个工具。让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
LXC: LinuX Container (Linux容器)
chroot,根切换;
namespaces:名称空间
CGroups:控制组
简单使用
lxc-checkconfig:
检查系统环境是否满足容器使用要求;
lxc-create:创建lxc容器;
lxc-create -n NAME -t TEMPLATE_NAME
lxc-start:启动容器;
lxc-start -n NAME -d
Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多 Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器 更快速的交付和部署、更轻松的迁移和扩展
docker的安装
Centos 官网http://vault.centos.org/查找与本机系统所匹配的源
# cd /etc/yum.repos.d/ # vim base.repo [base] name=base baseurl=file:///mnt/cd gpgcheck=0 [epel] name=epel baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/ gpgcheck=0 [extras] name=extras baseurl=http://vault.centos.org/7.4.1708/extras/x86_64/ gpgcheck=0
阿里云官网:https://opsx.alibaba.com/上查找配置docker源
[docker] name=docker https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/ gpgcheck=0
#yum install docker-ce -y #安装包 添加镜像加速器 #mkdir -p /etc/docker/ vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] } #(添加此行)官网的镜像加速器,还可以使用阿里云的镜像加速器 #systemctl start docker #启动服务# ps aux | grep docker-ce #查看进程
docker命令
Containeers:管理容器
Images:管理镜像、映射
#docker version #查看版本信息 #docker info #查看详细信息;运行的容器个数;暂停的个数;镜像个数等
容器的管理
docker search:#搜寻官网上的docker镜像 例:#docker search nginx #搜寻nginx的镜像 docker image pull:#从官网上下载docker镜像 例:#docker pull nginx #下载搜索的nginx镜像 docker image list :#列出本地所有的docker镜像 #docker image list nginx #只列出本地nginx版本的镜像 docker image rm #删除下载下来的本地镜像 例:#docker image rm nginx:1.14-alpine #镜像+标签
docker restart #重新启动docker容器
docker stop #停止docker容器
docker kill #强行停止docker容器
docker rm #删除创建的容器)
容器的创建
注:如果本地没有镜像文件,启动时会自动到官网下载
docker create:(创建docker容器) 例:#docker create -it --name b1 busybox:latest #只是busybox需要添加-it的命令来创建 #docker create --name b2 nginx #其他容器的创建docker start #启动docker容器 #docker start -i -a b1 #( b1:为创建容器的自定义的名称;-i -a也只是busybox镜像启动的所添加的选项) #docker start b1 #其他容器的启动 docker run #直接创建运行docker容器;如果本地没人镜像文件docker会自动去官网上查询并下载。 例1 :#docker run --name b1 -it busybox:latest #b1为自定义的容器名称;-it 为开启交互式界面,既打开容器的界面,也busybox:latest 镜像 例2: #docker run --name web1 -d nginx #运行nginx的镜像;-d 不要运行在后台,因为此docker容器只有一个程序;如果运行在后台,容器上没有运行的程序,默认会终止此容器
例 :docker run –name red1 -d redis:4-alpine (创建一个redis镜像,版本号不指定,默认安装的是latest,由于本地没有镜像,会去官网上自动去下载)
# docker image ls #查看下载下来的镜像存放在本地 REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest e1ddd7948a1c 14 hours ago 1.16MB nginx latest c82521676580 7 days ago 109MB redis latest f06a5773f01e 2 weeks ago 83.4MB # docker container ls -a #查看处于停止状态的daoke容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 98efd5c32689 redis "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 6379/tcp red1 e09e962eab28 nginx "nginx -g ‘daemon of…" 5 minutes ago Up 5 minutes 80/tcp web1 de0348a6f872 busybox:latest "sh" 31 minutes ago Created b2 7914fa9050a1 nginx "nginx -g ‘daemon of…" 32 minutes ago Created b1
交互式启动一个容器
-i:–interactive,交互式; -t:Allocate a pseudo-TTY #docker exec -it red1 /bin/sh #以交互式的方式进入到已经开启的容器里面去 #docker ps | docker container | ps docker container ls # 列出容器的详细信息
Docker镜像
docker的镜像文件官网 https://hub.docker.com/
# docker pull nginx:1.14-alpine #后面为版本信息,在官网啊地址上搜寻的结果 #docker pull nginx #后不加版本信息下载下来的是默认标签latest(最新)版本 #docker image list #查看下载的镜像 REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest c82521676580 7 days ago 109MB
Docker镜像的原理及组成
Docker镜像含有启动容器所需要的文件系统及其内容,因此, 其用于创建并启动docker容器 。
结构
采用分层构建机制,最底层为bootfs,其之为rootfs
bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完 成后会被卸载以节约内存资源;
rootfs:位于bootfs之上,表现为docker容器的根文件系统;
传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式, 完整性自检完成后将其重新挂载为读写模式
docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂载一个“可写”层;
位于下层的镜像称为父镜像(parent image),最底层的称为基础 镜像(base image)
最上层为“可读写”层,其下的均为“只读”层
Registry (docker镜像仓库)
在下载镜像时,如果不指定路径,默认是下载Docker Hub官方的镜像仓库里的镜像文件。
如果也没有指定tags(版本号);则默认下载latest(最新的)的版本。
Registry用于保存docker镜像,包括镜像的层次结构和元数据
Repository :由单个类型的docker镜像的所有迭代版本组成的镜像仓库 ;在镜像仓库之下。(例如:nginx;下面有多个版本的镜像文件,都是nginx的标签;但他都是nginx的镜像文件)
一个 Registry是由多个Repository镜像仓库所组成的。
https://quay.io/ (另一个镜像网站)
如果在此网上上下载格式为:docker pull quay.io/coreos/flannel:v0.10.0-arm64
(quay.io:官网地址:/coreos/flannel ;下图中所搜寻的flannel的前缀;:v0.10.0-arm64:版本号)
镜像的制作
#docker run –name b1 -it busybox:latest #创建并启动一个容器 / # mkdir -p /data/html / # cd /data/html /data/html # vi index.html hello world! 不能将容器关闭或者退出,在容器运行状态下,另外开启一个linux的终端界面 # docker commit -p b1 #基于b1做新的镜像文件 sha256:7125d1bc1ed7fd23a0654432902386917ecf78d2deeda4d5933d05b61ed28597 # docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 7125d1bc1ed7 34 seconds ago 1.16MB #由于并没有命名所以此镜像只有id号而没有名称 busybox latest e1ddd7948a1c 15 hours ago 1.16MB nginx latest c82521676580 7 days ago 109MB redis latest #docker tag 2e8b205a2902 magedu/http:1.0 #由于刚创建的镜像没有名称和标签,使用不方便,可以创建名称和 标签:创建时要使用其id号来引用 #docker tag magedu/http:1.0 magedu/http:1.1 #给同一个镜像创建多个标签 # docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE magedu/http 1.0 7125d1bc1ed7 2 minutes ago 1.16MB magedu/http 1.1 7125d1bc1ed7 2 minutes ago 1.16MB 当一个镜像有多个标签时,删除一个标签不会将镜像删除,如果只有一个标签了,删除了最后一个标签就会将镜像删除了。 #docker image rm magedu/http:1.1 #删除其中一个镜像标签 #docker inspect nginx #查看具体的镜像里的内容 #docker run –name ttt -it magedu/http:1.0 #开启新建的镜像
将镜像推送到官网
官网:https://hub.docker.com/
首先要在官网上注册一个个人的账号
登陆后创建一个仓库:Create Repository magedu/httpd #仓库的名称
登陆:
#docker login -u yuanyaqiong #如果是推送到官网上,不用写服务器的地址;如果不是则需要写服务器的地址
推送:
#docker push magedu/httpd #如果不添加标签的化默认推送magedu/httpd;所有版本的
推送到阿里云的个人仓库
官网:https://cr.console.aliyun.com/cn-hangzhou/repositories
注册账号,创建新的镜像仓库。
docker的四种网络模型
# docker network ls NETWORK ID NAME DRIVER SCOPE da59a155e83a bridge bridge local 01ece4a5d8e9 host host local d2d9c9c358d6 none null local
null 无网卡的无网络模式,容器不需要和外界相连 bridge 桥接式 ,直接桥接到docker0网卡上。(默认使用的方法) 联盟式网络:让各个容器之间关于网络方面的名称空间是共用一个名称空间,然后再桥接到物理网卡上 docker容器都直接共用,物理网卡上。
默认创建的是bridge网桥的方式
# docker network inspect bridge #查看网络信息 [ { "Name": "bridge", 桥接 "Id": "da59a155e83a87790dc8cf209ea66ddb3873ec0a2d0c1dfbb6c41deb6e64efed", "Created": "2018-08-03T03:43:45.163050409+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" 网关 } ] },
docker bridge 网络
宿主机会自动创建docker0 网段,以后创建的每个容器都是docker0网段的IP地址,他们之间可以相互连接的。宿主机上的docker0就像一个虚拟的交换机,将各个容器相互连接起来。
Docker0为NAT桥,因此容器一般获得的是私有网络地址 。
# ifconfig docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:4d:b8:81:c5 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
每创建一个docker容器运行就会生成一对网卡,一个在宿主机上,一个在容器上。
宿主机生成的网卡:(并将其关连到docker0的网卡上)
每个docker容器里生成的网卡及IP地址
# docker start -a -i b1 #b1容器的镜像是busybox:latest的打开方式 / # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03 inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:648 (648.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
# docker exec -it web1 /bin/sh #web1容器的镜像是nginx,run的情况下打开进入
每个docker容器里的网卡都可以ping通到宿主机的内网的IP地址,和外网的IP地址。
每创建一个docker容器就会生成一个iptables规则,将容器内的地址做转换,可以访问到外网。
/ # ping 192.168.130.7 PING 192.168.130.7 (192.168.130.7): 56 data bytes 64 bytes from 192.168.130.7: seq=0 ttl=64 time=0.216 ms 64 bytes from 192.168.130.7: seq=1 ttl=64 time=0.172 ms 64 bytes from 192.168.130.7: seq=2 ttl=64 time=0.150 ms
docker bridge网络下容器的几种网络模式
在同一个宿主机上的不同容器之间的访问: 如果有一个docker容器的nginx的服务,在另一个docker容器里应该是可以访问到nginx容器的nginx的web服务. 在宿主机上访问nginx容器的nginx的web服务。也是可以的。 另一台物理机要访问nginx容器的nginx的web服务器。无法直接访问,需要做地址关连,将nginx容器的IP地址关连到本地的内网或者外网的IP地址上去,这样外部的物理机就可以访问容器虚拟机的IP地址了。
创建网络名称空间,虚拟网卡,使其通信
#ip netns add r1 #创建网络名称空间r1 #ip netns add r2 #创建网络名称空间r2 #ip link add name veth1.1 type veth peer name veth1.2 #创建两个虚拟网卡 # ip link #查看虚拟网卡 11: veth1.2@veth1.1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether b2:6d:48:6d:8e:2e brd ff:ff:ff:ff:ff:ff 12: veth1.1@veth1.2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether 16:1a:97:02:b6:a6 brd ff:ff:ff:ff:ff:ff 注意:默认虚拟网卡为被激活,使用ifconfig是不能查看到的 # ip link set dev veth1.2 netns r1 #把虚拟网卡移动到r1网络名称空间 # ip netns exec r1 ifconfig -a #查看r1网络空间 veth1.2: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether b2:6d:48:6d:8e:2e txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # ip netns exec r1 ip link set dev veth1.2 name eth1 #把网络卡名为veth1.2改为网卡名为eth1 # ip netns exec r1 ifconfig -a eth1: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether b2:6d:48:6d:8e:2e txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 #ifconfig veth1.1 10.0.0.1/24 up #将宿主机里的虚拟网卡veth1.1创建一个地址并激活 #ifconfig veth1.1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 ether 16:1a:97:02:b6:a6 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 #ping 10.0.0.1 #宿主机来ping网络空间的虚拟IP地址 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.049 ms
创建各种网络模式的容器
# docker run --name f1 -it --rm busybox:latest #创建一个busybox容器,退出后并删除 / # exit [[email protected] ~]# docker run --name f1 -it --network none --rm busybox:latest #创建一个null模式的busybox容器 / # ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) # docker run --name f1 -it --network none -h centos7.magedu.com --rm busybox:latest #创建容器时,指定容器的主机名centos7.magedu.com / # # docker run --name f1 -it --network none -h centos7.magedu.com --dns 8.8.8.8 --rm busybox:latest #创建容器时指定DNS服务器的地址 / # cat /etc/resolv.conf search magedu.com nameserver 8.8.8.8#docker run –name f1 -it –network none -h t1.magedu –add-host www.magedu.com:192.168.7.7 –rm busybox:latest #指定hosts文件的dns解析地址
创建一个使用共同虚拟网卡的两个容器
# docker run --name tt --rm -it magedu/http:1.0 #在宿主机上创建tt容器 / # ifconfig #查看容器tt的IP eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:648 (648.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) / # ping 127.0.0.1 #tt容器可以与宿主机的本地IP地址127.0.0.1连接 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.056 ms 64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.120 ms # docker run --name tk --network container:tt --rm -it magedu/http:1.0 #在相同的宿主机上在创建一个tk容器和tt共用一个虚拟地址 / # ifconfig #查看容器tk的IP eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:38 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5785 (5.6 KiB) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) / # ping 127.0.0.1 #tk容器可以与宿主机的本地IP地址127.0.0.1连接 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.084 ms 64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.140 ms 此时两个容器共享了一个虚拟IP地址
创建一个使用共同物理网卡的两个容器
# docker run --name tt --network host --rm -it magedu/http:1.0 / # ifconfig docker0 Link encap:Ethernet HWaddr 02:42:4D:B8:81:C5 inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0 inet6 addr: fe80::42:4dff:feb8:81c5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:33 errors:0 dropped:0 overruns:0 frame:0 TX packets:79 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2548 (2.4 KiB) TX bytes:10149 (9.9 KiB) ens33 Link encap:Ethernet HWaddr 00:0C:29:C8:4E:67 inet addr:192.168.130.7 Bcast:192.168.130.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fec8:4e67/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7857 errors:0 dropped:0 overruns:0 frame:0 TX packets:4484 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:696429 (680.1 KiB) TX bytes:569044 (555.7 KiB) # docker run --name tt1 --network host --rm -it magedu/http:1.0 / # ifconfig docker0 Link encap:Ethernet HWaddr 02:42:4D:B8:81:C5 inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0 inet6 addr: fe80::42:4dff:feb8:81c5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:33 errors:0 dropped:0 overruns:0 frame:0 TX packets:79 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2548 (2.4 KiB) TX bytes:10149 (9.9 KiB) ens33 Link encap:Ethernet HWaddr 00:0C:29:C8:4E:67 inet addr:192.168.130.7 Bcast:192.168.130.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fec8:4e67/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7857 errors:0 dropped:0 overruns:0 frame:0 TX packets:4484 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:696429 (680.1 KiB) TX bytes:569044 (555.7 KiB) 以上两个容器直接关连到宿主机上的所有的物理网卡上了。此时在浏览器上就可以直接访问容器里的虚拟机了,因为容器里的虚拟机的IP地址和宿主机的IP地址是相同的。 / # echo "hello" >/tmp/index.html #在tt1容器里简单的配置虚拟机的http服务的主页面 / # httpd -h /tmp/ #启动的时候指定主页面的路径
在浏览器上访问宿主机的IP,可以看到容器提供http服务页面
指定bridge的IP地址,不使用系统默认172.17.0.0/16的IP地址
#systemctl stop docker #停止docker服务 #vim /etc/docker/daemon.json #编辑添加加速器的配置文件 { "registry-mirrors": ["https://registry.docker-cn.com"], "bip": "10.0.0.1/16" } #systemctl start docker #启动docker服务 #ifconfig #查看IP docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 255.255.0.0 broadcast 10.0.255.255 inet6 fe80::42:4dff:feb8:81c5 prefixlen 64 scopeid 0x20<link> ether 02:42:4d:b8:81:c5 txqueuelen 0 (Ethernet) RX packets 33 bytes 2548 (2.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 79 bytes 10149 (9.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
原文地址:https://www.cnblogs.com/yaun1498078591/p/9398681.html