2023年11月

云与虚拟化_实验10 Compose编排工具应用

实验要求

掌握Compose编排工具的安装和使用。

前置准备

要求实验主机能够连接外网,已经正确安装Docker ce,版本号为18.03.0-ce,并关闭防火墙和selinux。

实验步骤

步骤1:安装Compose编排工具

直接用docker官方安装源代的插件也可以滴!

  1. 测试安装结果。
root@registry:/home/dayi# 
root@registry:/home/dayi# find / -name docker-compose
/usr/libexec/docker/cli-plugins/docker-compose
root@registry:/home/dayi# ln -s /usr/libexec/docker/cli-plugins/docker-compose /bin/docker-compose
root@registry:/home/dayi# docker-compose --version
Docker Compose version v2.21.0
root@registry:/home/dayi# 

步骤2:编排启动镜像

  1. 创建文件目录。
[root@docker01 ~]# mkdir /opt/my_wordpress/
[root@docker01 ~]# cd /opt/my_wordpress/
  1. 编写编排文件。
[root@docker01 my_wordpress]# vi docker-compose.yml
version: '3'
services:
   db:
     image: mysql:5.7
     volumes:
       - /data/db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     ports:
       - "3306:3306"
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - /data/web_data:/var/www/html
     ports: 
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

  1. 启动。
[root@docker01 my_wordpress]# docker-compose up -d
# 启动方法:docker-compose up
# 后台启动方法:docker-compose up -d

  1. 在浏览器上访问http://192.168.5.100:8000,进行WordPress的安装即可。

  1. 删库跑路

云与虚拟化_实验7 Docker网络管理应用

实验要求

了解Docker常用网络模式,掌握Docker常用网络模式的使用。本实验主要任务是利用busybox镜像建立容器,容器名称为test_busybox1和test_busybox2,将网络模式设置为none,并为容器配置IP地址,容器test_busybox1的IP设置为172.17.0.100,容器test_busybox2的IP设置为172.17.0.200,要求实现两容器互通。

前置准备

要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。

实验过程

步骤1-3

# 步骤1.1: 创建容器test_busybox1,设置网络模式为none
docker run -dit --name=test_busybox1 --net=none busybox:latest

# 进入容器test_busybox1
docker exec -it test_busybox1 /bin/sh

# 步骤1.2: 查看IP地址(容器test_busybox1)
ip addr
# 从现象可以得知容器test_busybox1没有IP地址。

# 退出容器test_busybox1
exit

# 步骤2.1: 创建容器test_busybox2,设置网络模式为none
docker run -dit --name test_busybox2 --net=none busybox:latest
# 进入容器test_busybox2
docker exec -it test_busybox2 /bin/sh
# 步骤2.2: 查看IP地址(容器test_busybox2)
ip address
# 退出容器test_busybox2
exit

从现象可以得知容器test_busybox1,test_busybox2都没有IP地址。

步骤4

# 步骤3: 为容器test_busybox1设置IP地址为172.17.0.100
# 安装bridge-utils软件包
yum -y install bridge-utils

# 创建veth对,并将veth0加入docker0网桥
ip link add veth0 type veth peer name veth1
#           虚拟网桥           peer的name 
brctl addif docker0 veth0
# 桥接管理器 添加 管理桥接
brctl show


# 启动veth0,原神启动 (另外一个veth1也会自动启动)
ip link set veth0 up

# 获取容器test_busybox1的PID
pid1=$(docker inspect -f '{{.State.Pid}}' test_busybox1)
echo "容器test_busybox1的PID是:$pid1"


#有两种途径索引network namespace:名字(例如netns1)或者属于该namespace的进程PID。
#使用命名(Name):为网络命名空间分配可读的名称,然后使用该名称来引用和操作命名空间。这使得管理网络命名空间更加方便和直观。
#使用进程PID:每个网络命名空间都与一个进程相关联,通常是一个子进程。可以使用该进程的PID来访问和管理与之关联的网络命名空间。

# 创建network namespace软连接
mkdir -p /var/run/netns
ln -s /proc/$pid1/ns/net /var/run/netns/$pid1
ip netns ls

# 将veth1连接到容器test_busybox1的network namespace,并重命名为eth0
ip link set veth1 netns $pid1
ip netns exec $pid1 ip link set dev veth1 name eth0



# 启用eth0
ip netns exec $pid1 ip link set eth0 up

# 分配IP地址和设置网关
ip netns exec $pid1 ip addr add 172.17.0.100/24 dev eth0
ip netns exec $pid1 ip route add default via 172.17.0.1

安装包:

网桥:

veth0启动:

PID:


Docker State信息

  1. .Id: 容器的唯一标识符,通常是一个长字符串,也被称为容器ID。
  2. .Name: 容器的名称,通常是用户定义的名称,可以用来引用容器。
  3. .State.Status: 容器的状态,如运行中、停止等。
  4. .State.Running: 表示容器是否正在运行(布尔值)。
  5. .State.Pid: 容器内部主进程的PID。
  6. .Config.Image: 使用的容器镜像的名称。
  7. .Config.Cmd: 启动容器时使用的命令。
  8. .Config.Env: 容器的环境变量。
  9. .NetworkSettings.IPAddress: 容器的IP地址(如果有网络配置)。
  10. .HostConfig.Binds: 挂载到容器内部的卷或目录。
  11. .Mounts: 容器的挂载点信息。
  12. .Created: 容器创建的时间戳。
  13. .Ports: 容器的端口映射信息。
  14. .Labels: 用户定义的容器标签。
  15. .LogPath: 容器的日志文件路径。
  16. .HostConfig.NetworkMode: 容器的网络模式。

netns:

执行完之后,可以看到已经分配到网卡:

目前这个namespace叫2133

然后再命名空间里执行了一些命令。

步骤5

配置容器test_busybox2的网络

# 创建一对虚拟以太网设备veth2和veth3,这两个设备是成对出现的,数据可以在两个设备之间传送
ip link add veth2 type veth peer name veth3

# 将veth2这端加入到docker0桥接器中,这样veth2就能和docker0桥接器上的其他网络设备进行通信了
brctl addif docker0 veth2

# 显示当前桥接器的信息,可以看到docker0桥接器及其所连接的网络接口
brctl show

# 启用veth2网络接口,使其能够进行数据传输
ip link set veth2 up

# 使用docker命令检查名为test_busybox2的容器,提取容器的进程ID
docker inspect test_busybox2 | grep Pid

# 用docker inspect命令获取名为test_busybox2的容器的PID,并将其存储在变量pid2中
pid2=$(docker inspect -f '{{.State.Pid}}' test_busybox2)

# 输出容器test_busybox2的PID
echo "容器test_busybox2的PID是:$pid2"

# 为容器的网络命名空间创建一个软链接,方便后续的操作。/var/run/netns/目录通常用于存放网络命名空间
ln -s /proc/$pid2/ns/net /var/run/netns/$pid2

# 将veth3这端的网络接口移到容器test_busybox1的网络命名空间中
ip link set veth3 netns $pid2

# 在test_busybox1容器的网络命名空间内,将网络接口veth3重命名为eth0
ip netns exec $pid2 ip link set dev veth3 name eth0

# 启用容器内的eth0网络接口
ip netns exec $pid2 ip link set eth0 up

# 为容器内的eth0接口分配IP地址172.17.0.200,并设置子网掩码为24位
ip netns exec $pid2 ip addr add 172.17.0.200/24 dev eth0

# 设置容器内的网络路由,使其默认网关为172.17.0.1,即docker0桥的IP地址
ip netns exec $pid2 ip route add default via 172.17.0.1

[root@node-a docker]# ip link add veth2 type veth peer name veth3
[root@node-a docker]# brctl addif docker0 veth2
[root@node-a docker]# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242398240fb       no              veth0
                                                        veth2
                                                        veth271d838
                                                        veth588fc94
[root@node-a docker]# ip link set veth2 up
[root@node-a docker]# docker inspect test_busybox2 | grep Pid
            "Pid": 2212,
            "PidMode": "",
            "PidsLimit": null,
[root@node-a docker]# pid2=$(docker inspect -f '{{.State.Pid}}' test_busybox2)
[root@node-a docker]# echo "容器test_busybox2的PID是:$pid2"
容器test_busybox2的PID是:2212
[root@node-a docker]# ln -s /proc/$pid2/ns/net /var/run/netns/$pid2
[root@node-a docker]# ip link set veth3 netns $pid2
[root@node-a docker]# ip netns exec $pid2 ip link set dev veth3 name eth0
[root@node-a docker]# ip netns exec $pid2 ip link set eth0 up
[root@node-a docker]# ip netns exec $pid2 ip addr add 172.17.0.200/24 dev eth0
[root@node-a docker]# ip netns exec $pid2 ip route add default via 172.17.0.1
[root@node-a docker]# docker exec -it test_busybox2 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue qlen 1000
    link/ether 92:7f:5d:85:1e:69 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.200/24 scope global eth0
       valid_lft forever preferred_lft forever
[root@node-a docker]#

步骤6:测试

docker exec -it test_busybox2 ip addr
docker exec -it test_busybox2 ping -c 4 172.17.0.100
docker exec -it test_busybox1 ip addr
docker exec -it test_busybox1 ping -c 4 172.17.0.200

云与虚拟化_实验9 Docker数据卷和数据卷容器应用

实验要求

掌握Docker数据卷和数据卷容器使用方法。

前置准备

要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。

实验步骤

步骤1:创建数据卷

  1. 创建容器,为容器添加一个数据卷,容器名为mycentos,数据卷在容器里的目录是/opt/data。
[root@master ~]# docker pull centos:7     // 拉取所需镜像
[root@master ~]# docker run -it --name mycentos -v /opt/data centos:7 /bin/bash
[root@7908b98ed9e6 /]# cd /opt/data
[root@7908b98ed9e6 data]# echo "centos1">centos1
[root@7908b98ed9e6 data]# echo "centos2">centos2
[root@7908b98ed9e6 data]# ls
centos1  centos2

  1. 新建一个终端,连接到主机,在主机上查看容器对应数据卷的目录路径。
[root@master ~]# docker inspect mycentos|grep /var/lib/docker/volumes
                "Source": "/var/lib/docker/volumes/ceb3146a0edcbe16a525bff78f06ae9169b471459678695db8155a14e629cbb0/_data",
[root@master ~]# ls /var/lib/docker/volumes/ceb3146a0edcbe16a525bff78f06ae9169b471459678695db8155a14e629cbb0/_data
centos1  centos2
[root@master ~]# echo "123" >> /var/lib/docker/volumes/ceb3146a0edcbe16a525bff78f06ae9169b471459678695db8155a14e629cbb0/_data/123
root@dayi-cloud-k8s-master:/home/dayi# docker inspect mycentos|grep /var/lib/docker/volumes
                "Source": "/var/lib/docker/volumes/bd8e9cc17f888e8ecda307c6040aae00a8b17b7de051ec4064e83477fe26d923/_data",
root@dayi-cloud-k8s-master:/home/dayi# 

  1. 在mycentos容器中再次查看目录信息。
[root@6d7542b2ab36 data]# ls
123  centos1  centos2
[root@6d7542b2ab36 data]# cat 123 
123
[root@6d7542b2ab36 data]# 

步骤2:挂载宿主机文件或目录到容器数据卷

  1. 建立容器,将容器里挂载的共享数据设置为只读,以使数据修改只能在宿主机上操作。
[root@master ~]# docker run -it --name mynginx -v /root/index.html:/myweb/index.html:ro nginx /bin/bash
root@3feb79f12fb3:/# cd /myweb/
root@3feb79f12fb3:/myweb# echo "123">index.html  //写入数据
bash: index.html: Read-only file system   //只读,无法写入

噗,成目录了。

这样就可以啦:

echo "<h1>ovo</h1>" >>/opt/index.html && docker run -it --name mynginx2 -v /opt/index.html:/myweb/index.html:ro nginx /bin/bash

root@registry:/home/dayi# echo "<h1>ovo</h1>" >>/opt/index.html && docker run -it --name mynginx2 -v /opt/index.html:/myweb/index.html:ro nginx /bin/bash
root@2dc277e6ec93:/# cd m
media/ mnt/   myweb/ 
root@2dc277e6ec93:/# cd myweb/
root@2dc277e6ec93:/myweb# ls
index.html
root@2dc277e6ec93:/myweb# cat index.html 
<h1>ovo</h1>
<h1>ovo</h1>
root@2dc277e6ec93:/myweb# echo ovo>>index.html 
bash: index.html: Read-only file system
root@2dc277e6ec93:/myweb# 

在宿主机上修改共享数据。

[root@master ~]# echo "456">>index.html

在容器中再次查看文件信息。

root@3feb79f12fb3:~# cat /myweb/index.html 
welcome user nginx
456

  1. 挂载宿主机目录到容器。
[root@master ~]# mkdir /opt/data
[root@master ~]# echo "data1">/opt/data/data1
[root@master ~]# echo "data2">/opt/data/data2
[root@master ~]# docker run -it --name mycentos3 -v /opt/data:/opt/mydata centos:7 /bin/bash
[root@47ba22a96edd /]# cd /opt/mydata/
[root@47ba22a96edd mydata]# ls
data1  data2
[root@47ba22a96edd mydata]# echo "data3">data3
[root@47ba22a96edd mydata]# ls
data1  data2  data3

在宿主机上查看目录信息。

[root@master ~]# ls /opt/data
data1  data2  data3

OVO

root@registry:/home/dayi# mkdir /opt/data
root@registry:/home/dayi# echo "data1">/opt/data/data1
root@registry:/home/dayi# echo "data2">/opt/data/data2
root@registry:/home/dayi# docker run -it --name mycentos3 -v /opt/data:/opt/mydata centos:7 /bin/bash
[root@57ad12222cf8 /]#  cd /opt/mydata/
[root@57ad12222cf8 mydata]# ls
data1  data2
[root@57ad12222cf8 mydata]# echo "data3">data3
[root@57ad12222cf8 mydata]# ls
data1  data2  data3
[root@57ad12222cf8 mydata]# exit
exit
root@registry:/home/dayi# ls /opt/data/
data1  data2  data3
root@registry:/home/dayi# 

步骤3:创建数据卷容器

  1. 启动名为myontainer的容器,要求此容器包含两个数据卷/opt/volume1和/opt/volume2。
[root@master ~]# docker run -it -v /opt/volume1 -v /opt/volume2 --name my_container centos:7 /bin/bash
[root@0cc99e4c61da /]# ls /opt/
volume1  volume2    //  容器内数据卷目录vloume1和volume2已经创建

  1. 在宿主机上查看与数据卷对应的目录路径。
[root@master ~]# docker inspect my_container|grep /var/lib/docker/volumes
   "Source": "/var/lib/docker/volumes/3f6cc0585bef55d1be35566aa79dbd21d17a4625b587bc883ab8c4fc159d562d/_data",
   "Source": "/var/lib/docker/volumes/4e606dc4e1dbe1a907970d59668681169debf4ece91fdf6c7a5f782d2955d05e/_data",
// 从显示结果可以看到与数据卷对应的目录路径

  1. 创建my_centos容器,挂载my_container容器中的数据卷。
[root@master ~]# docker run -it --rm --volumes-from my_container --name my_centos centos:7 /bin/bash
[root@50fe2adcdfa6 /]# ls /opt   
volume1  volume2
//  从显示结果上可以看到volume1和volume2数据卷都存在

root@debian-crop:/home/dayi/docker# docker run -it -v /opt/volume1 -v /opt/volume2 --name my_container centos:7 /bin/bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
[root@003437a20dcd /]# ls /opt
volume1  volume2
[root@003437a20dcd /]# 
root@debian-crop:/home/dayi# docker inspect my_container|grep /var/lib/docker/volumes
                "Source": "/var/lib/docker/volumes/c806dd7516316241a7ec23312ca49fdfe18026734bb4e2e4dd40ffcaf3112683/_data",
                "Source": "/var/lib/docker/volumes/4d26d6db345290ac0c6532631dcc2fe069ffc2d761732a30b44c015492d2577c/_data",
root@debian-crop:/home/dayi# docker run -it --rm --volumes-from my_container --name my_centos centos:7 /bin/bash
[root@4420a54f7387 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@4420a54f7387 /]# cd /opt
[root@4420a54f7387 opt]# ls
volume1  volume2
[root@4420a54f7387 opt]# 

云与虚拟化_实验8 利用Docker实现容器互连

主机名IP地址/子网掩码容器名容器IP地址
node-a192.168.59.128/24node1_busybox172.100.0.10
node-b192.168.59.130/24node2_busybox172.100.1.10

1. 需要两个虚拟机

克隆一个OVO

具体的机子:

  • node-a
  • node-b
#修改克隆机子的主机名
vim /etc/hostname
reboot

查看IP地址

ip addr

我这里两个机子的IP:

  • 192.168.59.128 node-a
  • 192.168.59.130 node-b

步骤1-4

node-a上创建网桥和容器

# 创建自定义网桥,并分配网段172.100.0.0/24
docker network create --subnet=172.100.0.0/24 node1-br0
# 查看网桥信息
docker network inspect node1-br0
# 启动一个容器,并设置IP地址为172.100.0.10/24
docker run -itd --net=node1-br0 --ip=172.100.0.10 --name node1_busybox busybox

# 查看容器的IP
docker exec -it node1_busybox ip addr
# 测试容器和网桥是否能通
docker exec -it node1_busybox ping -c 4 172.100.0.1

node-b 上创建网桥和容器

# 创建自定义网桥,并分配网段172.100.1.0/24
docker network create --subnet=172.100.1.0/24 node2-br0
# 查看网桥信息
docker network inspect node2-br0
# 启动一个容器,并设置IP地址为172.100.1.10/24
docker run -itd --net=node2-br0 --ip=172.100.1.10 --name node2_busybox busybox

# 查看容器的IP
docker exec -it node2_busybox ip addr
# 测试容器和网桥是否能通
docker exec -it node2_busybox ping -c 4 172.100.1.1

测试两个容器之间是否可以相通

结果应该是不通!

node-a

docker exec -it node1_busybox ping -c 4 172.100.1.10

node-b

docker exec -it node2_busybox ping -c 4 172.100.0.10

蚌埠,通了,真蚌埠住了(因为这个公网IP,主机开了tun的网卡,然后就通了)

关掉tun网卡:
这样是正常的:

然后这个通了(但通的是一个美国的机子,这次实验的ip是公网IP,172的IP只有部分(0-31)是公网):

步骤5

在node-a节点和node-b节点上配置路由表和iptable规则。

把iptables全部清除了之后加了个路由表。

node-a

#添加路由表
ip route add 172.100.1.0/24 via 192.168.59.130 dev ens33
# 清除iptables规则,并设置默认策略为接受
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n

node-b

ip route add 172.100.1.0/24 via 192.168.59.128 dev ens33
# 清除iptables规则,并设置默认策略为接受
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n

步骤6 再次测试node1节点上的node1-busybox容器与node2节点上的node2-busybox容器与是否可以连通。在node1节点上进行测试。

ping -c 4 172.100.1.10
PING 172.100.1.10 (172.100.1.10): 56 data bytes
64 bytes from 172.100.1.10: seq=0 ttl=62 time=12.601 ms

通啦

云与虚拟化_虚拟化和容器——6 Docker资源控制

基于cgroups

https://tech.meituan.com/2015/03/31/cgroups.html

1. 对CPU的控制

步骤1:限制CPU命令速率。

(1)利用centos:7镜像分别生成容器名为centos1和centos2的容器,其中centos1容器不限制cpu的使用率,centos2容器将cpu的使用率限制为20%。

docker pull centos:7
docker run -dit --name centos1 centos:7 /bin/bash
# 限制CPU百分之20000
docker run -dit --name centos2 --cpu-quota 20000 centos:7 /bin/bash

100000微秒
020000只能使用百分之20

--cpu-quota 20000: --cpu-quota定义了容器每--cpu-period(默认为100000微秒,即100ms)可以获得的最大CPU时间,单位为微秒。--cpu-quota 20000意味着在默认的100ms周期中,容器最多只能使用20ms的CPU时间。

(2)通过查看对应的cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us来查看各容器cpu的使用率。

#这里是你的容器名
cat /sys/fs/cgroup/cpu/docker/86ff33795a71f86236011598c9cbaea55c4a319bd142e6ffb845e055d4db4fd9/cpu.cfs_quota_us

没限制的(-1

(3)如需修改对应容器的cpu使用率,可以直接修改cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us的值来实现。

修改占用为百分之40

echo 40000 >> /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us

cat /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us

这里虽然是追加写,但是并不会追加,linux都是文件,估计是直接内核交互了。?

删掉这俩实验容器

docker rm -f centos1 centos2

步骤2:多任务按比例分享CPU

(1)利用centos:7镜像创建centos3和centos4容器。设置容器权重,使用centos3和centos4的cpu占比为33.3%和66.7% 。

docker run -dit --name=centos3 --cpu-shares 512 centos:7 /bin/bash
docker run -dit --name=centos4 --cpu-shares 1024 centos:7 /bin/bash

docker ps -a

(2)打开另一个终端,使用docker stats命令查看状态。

docker stats

(3)分别打开两个终端,利用两个终端分别进行centos1和centos2容器,安装压力测试包stress。(4)分别在两个容器内启用4个线程。

容器3

#进入容器
docker exec -it centos3 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4

容器4

docker exec -it centos4 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4

(5)再次利用docker stats命令查看。

还是挺准的
132/(66+132)=0.666666666667

步骤3: 查看cpu内核使用

通过查看Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。

1.CPU限制

这个没有文件诶。

应该是默认没有启用

docker run -dit --cpuset-cpus="0,1" --name my_container nginx

这样就有啦

[root@node-a cpuset]# cd docker/8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243a1f16/
[root@node-a 8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243a1f16]# cat cpuset.cpus
0-1

删除容器

docker rm -f my_container

2. 对内存使用的限制

docker run -dit --name=centos5 -m 512m centos:7 /bin/bash
docker run -dit --name=centos6 centos:7 /bin/bash

步骤2:打开一个终端,使用docker stats命令查看状态

docker stats

CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O     PIDS
8df1885fca97   centos6   0.00%     400KiB / 1.777GiB   0.02%     656B / 0B   0B / 0B       1
501410e22049   centos5   0.00%     1.965MiB / 512MiB   0.38%     656B / 0B   9.61MB / 0B   1

步骤3:查看容器对应的Cgroup配置文件可查看容器内存限制。

cat /sys/fs/cgroup/memory/docker/501410e22049929b244235423c19239b50cc61a082834dba85cb18c59e2f7470/memory.limit_in_bytes

536870912 // 536870912=512×1024×1024