Docker网络、资源控制
Docker网络、资源控制
一、Docker网络
1. Docker网络实现原理
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网络的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
2. Docker网桥
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时通过-p或-P参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器
[root@docker ~]# docker run -d --name test1 -P nginx
#-P指定镜像进行随机分配端口
[root@docker ~]# docker run -d --name test2 -p 43000:80 nginx
##-p指定端口,使用固定的43000端口
36e92b38ea300478fbd4b699ea6dcaf1c91213ce53aeab92311d18d011e49df5
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36e92b38ea30 nginx "/docker-entrypoint.…" 9 seconds ago Up 9 seconds 0.0.0.0:43000->80/tcp, :::43000->80/tcp test2
514ae4b4bec0 nginx "/docker-entrypoint.…" 16 seconds ago Up 16 seconds 0.0.0.0:49153->80/tcp, :::49153->80/tcp test1
验证
3. Docker的网络模式
网络模式 | 说明 |
---|---|
Host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。 |
None | 该模式关闭了容器的网络功能。 |
Bridge | 默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个Docker0虚拟网桥,通过docker0网桥以及iptables nat表配置与宿主机通信。 |
自定义网络 | 自定义网络后,可指定容器IP |
4. 查看容器网络
安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、none、host。
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
358c6341c661 bridge bridge local
8efcfd849c5a host host local
21745308f633 none null local
[root@docker ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
358c6341c661 bridge bridge local
8efcfd849c5a host host local
21745308f633 none null local
5. 创建网络
使用docker run创建Docker容器时,可以用--net或--network选项指定容器的网络模式
● host模式:使用--net=host指定
● none模式:使用--net=none指定
● container模式:使用--net=container:NAME_or_ID指定
● bridge模式:使用--net=bridge指定,默认设置,可省略
6. 网络模式详解
6.1 host模式
相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。
Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。
[root@gh opt]# docker run -itd --name test1 --net=host centos:7 bash
2bab2b51e6a38e5e90b07ab78b65c511e67e86f4ed5210193fe5d225fc23a604
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bab2b51e6a3 centos:7 "bash" 9 seconds ago Up 8 seconds test1
[root@docker ~]# docker inspect -f '{{.State.Pid}}' test1
##查看容器进程号
22295
##查看容器的进程、网络、文件系统等命名空间编号
[root@docker ~]# ls -l /proc/22295/ns
总用量 0
lrwxrwxrwx. 1 root root 0 10月 19 15:33 ipc -> ipc:[4026532511]
lrwxrwxrwx. 1 root root 0 10月 19 15:33 mnt -> mnt:[4026532509]
lrwxrwxrwx. 1 root root 0 10月 19 15:33 net -> net:[4026531956]
lrwxrwxrwx. 1 root root 0 10月 19 15:33 pid -> pid:[4026532512]
lrwxrwxrwx. 1 root root 0 10月 19 15:33 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 10月 19 15:33 uts -> uts:[4026532510]
[root@gh opt]# docker run -itd --name test2 --net=host centos:7 bash
64efc68609c33820b1904e19096989d85a439566b3b4e9a25b91a2a3245b1f6a
[root@docker ~]# docker inspect -f '{{.State.Pid}}' test2
22650
[root@docker ~]# ls -l /proc/22650/ns
总用量 0
lrwxrwxrwx. 1 root root 0 10月 19 16:01 ipc -> ipc:[4026532515]
lrwxrwxrwx. 1 root root 0 10月 19 16:01 mnt -> mnt:[4026532513]
lrwxrwxrwx. 1 root root 0 10月 19 16:01 net -> net:[4026531956]
lrwxrwxrwx. 1 root root 0 10月 19 16:01 pid -> pid:[4026532516]
lrwxrwxrwx. 1 root root 0 10月 19 16:01 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 10月 19 16:01 uts -> uts:[4026532514]
##net与user的命名空间相同,host模式与系统共享IP
6.2 container模式
在理解了host模式后,这个模式也就好理解了。这个模式指定新常见的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信
6.3 none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
6.4 bridge模式
bridge模式是docker的默认网络模式,不用--net参数,就是bridge模式。
相当于Vmware中的nat模式,容器使用独立Network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
(1)当docker进程启动时,会在主机上创建一个名为Docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。
(3)Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。
(4)使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
[root@docker ~]# docker run -itd --name test1 -P centos:7 bash
d5b08c05a442ee2b3c3d6929c7f827670dd8154fc1fa07cc3f857cd80b0baead
[root@gh opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5b08c05a442 centos:7 "bash" 14 seconds ago Up 14 seconds test1
[root@docker ~]# iptables -t nat -vnL
······
Chain OUTPUT (policy ACCEPT 27 packets, 1906 bytes)
pkts bytes target prot opt in out source destination
4 240 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
······
6.5 自定义网络
6.5.1 使用bridge指定IP
直接使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错
[root@docker ~]# docker run -itd --name test1 --network=bridge --ip 172.17.0.8 centos:7 bash
973f17ffcd419e8dbd3a29ad2c2f8a1def281548b06b2ab56231999d61b9fe27
docker: Error response from daemon: user specified IP address is supported on user defined networks only.
##IP错误,无法使用
[root@gh opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
973f17ffcd41 centos:7 "bash" 12 seconds ago Created test1
[root@gh opt]# docker start test1
Error response from daemon: user specified IP address is supported on user defined networks only
Error: failed to start containers: test1
##IP错误,无法启动
6.5.2 创建自定义网络
可以先自定义网络,再使用指定IP运行docker
[root@docker ~]# docker network create --subnet=172.111.0.0/16 --opt "com.docker.network.bridge.name"="docker" mynetwork
716c662b9ad34a62ecab84510ae5d1d1ed760b455bf26a0f2b2bb48874e41eba
[root@docker ~]# ifconfig
docker: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.111.0.1 netmask 255.255.0.0 broadcast 172.111.255.255
ether 02:42:0d:82:b4:9d 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:为执行ifconfig -a命令时,显示的网卡名,如果不使用--opt参数指定此名称,那你在使用ifconfig -a命令查看网络信息时,看到的是类似br-110eb56a0b22这样的名字,这显然不怎么好记。
mynetwork:为执行docker network list命令时,显示的bridge网络模式名称。
验证:
[root@docker ~]# docker run -itd --name test1 --net mynetwork --ip 172.111.0.11 centos:7 bash
d4fb4caa7742252627858dc9fbc2df47c900040fdf4e7aa145d8c7e1849c2d5a
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4fb4caa7742 centos:7 "bash" 3 seconds ago Up 2 seconds test1
[root@docker ~]# docker exec -it test1 bash
[root@d4fb4caa7742 /]# ifconfig
bash: ifconfig: command not found
[root@d4fb4caa7742 /]# yum install -y net-tools
[root@d4fb4caa7742 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.111.0.11 netmask 255.255.0.0 broadcast 172.111.255.255
ether 02:42:ac:6f:00:0b txqueuelen 0 (Ethernet)
RX packets 4806 bytes 18886571 (18.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3302 bytes 182103 (177.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
RX packets 83 bytes 7777 (7.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 83 bytes 7777 (7.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
二、资源控制
1. CPU资源控制
1.1 cgroups
cgroups(Control groups),是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups实现了对资源的配额和度量。
1.2 cgroups的四大功能
● 资源限制:可以对任务使用的资源总额进行限制
● 优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
● 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
● 任务控制:cgroup可以对任务执行挂起、恢复等操作
1.3 CPU资源控制的三种方式
设置CPU使用率上限
设置CPU资源占用比(设置多个容器时才生效)
设置容器绑定指定的CPU
1.4 设置CPU使用率上限
1.4.1 使用率配置
Linux通过CFS(Completely Fair Schedular,完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。
使用--cpu-period即可设置调度周期,使用--cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。
CFS周期的有效范围1ms1s,对应的--cpu-period的数值范围是10001000000。
而容器的CPU配额必须不小于1ms,即--cpu-quota的值必须>=1000。
[root@docker ~]# docker run -itd --name test1 centos:7 bash
a9c1ed9d865bec0dd2df5bd42adc157686e916abc1425f6dc9bd624006b1d45a
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9c1ed9d865b centos:7 "bash" 7 seconds ago Up 5 seconds test1
[root@docker ~]# cd /sys/fs/cgroup/cpu/docker/a9c1ed9d865bec0dd2df5bd42adc157686e916abc1425f6dc9bd624006b1d45a/
##路径为/sys/fs/cgroup/cpu/docker/容器ID开头的文件名
[root@docker a9c1ed9d865bec0dd2df5bd42adc157686e916abc1425f6dc9bd624006b1d45a]# ls
cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
[root@docker a9c1ed9d865bec0dd2df5bd42adc157686e916abc1425f6dc9bd624006b1d45a]# cat cpu.cfs_quota_us
-1
[root@docker a9c1ed9d865bec0dd2df5bd42adc157686e916abc1425f6dc9bd624006b1d45a]# cat cpu.cfs_period_us
100000
cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用us表示,microsecond),默认为100000。
cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。如果设为50000,表示占用50000/100000=50%的CPU。
1.4.2 压力测试
[root@docker ~]# docker exec -it test1 bash
[root@a9c1ed9d865b /]# vim /cpu.sh
bash: vim: command not found
[root@a9c1ed9d865b /]# vi cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
[root@a9c1ed9d865b /]# chmod +x cpu.sh
[root@a9c1ed9d865b /]# ./cpu.sh
另开终端查看cpu负载
[root@docker ~]# top
top - 19:59:59 up 6:17, 2 users, load average: 0.94, 0.43, 0.20
Tasks: 213 total, 2 running, 210 sleeping, 1 stopped, 0 zombie
%Cpu(s): 46.2 us, 3.5 sy, 0.0 ni, 50.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4030168 total, 2481744 free, 625300 used, 923124 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 3058428 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9732 root 20 0 11688 1096 916 R 100.0 0.0 2:44.05 cpu.sh
##来自cpu.sh的命令占用了近50%的CPU资源
1.5 设置CPU资源占用比(设置多个容器时才生效)
1.5.1 资源占比设置
Docker通过--cpu-shares指定CPU份额,默认值为1024,值为1024的倍数。
创建两个容器为test1和tests2,若只有这两个容器,设置容器的权重,使得test1和test2的CPU资源占比为1/3和2/3。
[root@docker ~]# docker run -itd --name test1 --cpu-shares 1024 centos:7
b4b37e6d33a914756296f165c6cc7317fd48324b4b2a05482bc49ad2f3a5ed06
[root@docker ~]# docker run -itd --name test2 --cpu-shares 2048 centos:7
900ebea2c5ed9fd6adc3fe2b7a823b041f904312e67b9cbd4b9023ae64e38149
#若出现WARNING: IPv4 forwarding is disabled. Networking will not work.
#如下开启宿主机的IP转发功能即可
[root@docker ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@docker ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@docker ~]# systemctl restart network
[root@docker ~]# systemctl restart docker
1.5.2 压力测试(设置宿主机为4核)
test1容器
[root@docker ~]# docker exec -it test1 bash
[root@b4b37e6d33a9 /]# yum install -y epel-release && yum install -y stress
[root@b4b37e6d33a9 /]# stress -c 4
stress: info: [93] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
test2容器
[root@docker ~]# docker exec -it test2 bash
[root@900ebea2c5ed /]# yum install -y epel-release && yum install -y stress
[root@900ebea2c5ed /]# stress -c 4
stress: info: [110] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
宿主机查看负载
[root@docker ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
29900b8c61c3 test1 132.90% 2.586MiB / 3.843GiB 0.07% 2.42kB / 0B 4.88MB / 0B 7
c062b6088afb test2 265.13% 1008KiB / 3.843GiB 0.03% 648B / 0B 1.18MB / 0B 7
##由于宿主机开了4核,因此cpu负载为400%
1.6 设置容器绑定指定的CPU
1.6.1 指定CPU设置
[root@docker ~]# docker run -itd --name test1 --cpuset-cpus 0,3 centos:7 bash
##指定本容器使用 0和3号cpu
a8efc1d070d82266478473be987d98d1a0689c5a44dbbf6f75e6fde70769a346
1.6.2 压力测试
进入容器压测
[root@docker ~]# docker exec -it test1 bash
[root@a8efc1d070d8 /]# yum install -y epel-release && yum install -y stress
[root@a8efc1d070d8 /]# stress -c 4
stress: info: [166] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
宿主机查看负载
[root@docker ~]# top
top - 17:07:25 up 15 min, 2 users, load average: 0.17, 1.41, 1.61
Tasks: 232 total, 6 running, 226 sleeping, 0 stopped, 0 zombie
%Cpu0 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4030168 total, 2522948 free, 564680 used, 942540 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 3134820 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2989 root 20 0 7312 96 0 R 49.8 0.0 0:02.78 stress
2990 root 20 0 7312 96 0 R 49.8 0.0 0:02.78 stress
2991 root 20 0 7312 96 0 R 49.8 0.0 0:02.79 stress
2992 root 20 0 7312 96 0 R 49.8 0.0 0:02.78 stress
······
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a8efc1d070d8 test1 201.01% 168.7MiB / 3.843GiB 4.29% 27.7MB / 490kB 52.8MB / 25.2MB 7
2. 对内存使用的限制
2.1 物理内存
-m(--memory=)选项用于限制容器可以使用的最大内存
[root@docker ~]# docker run -itd --name test1 -m 1g centos:7 bash
add63bbc42c166dc0c7336c36c352760162193f338e4a1b78973ab553ebc7b29
[root@docker ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
add63bbc42c1 test1 0.00% 392KiB / 1GiB 0.04% 578B / 0B 0B / 0B 1
##MEM LIMIT为物理内存大小
2.2 交换空间内存
--memory-swap可限制swap分区的内存大小,但必须与-m命令一起使用。
正常情况下,--memory-swap的值包含容器可用内存和可用swap。
所以-m 300m --memory-swap=1g的含义为:容器可以使用300M的物理内存,并且可以使用700M(1G-300M)的swap。
如果--memory-swap设置为0或者不设置,则容器可以使用的swap大小为-m值的两倍。
如果--memory-swap的值和-m相同,则容器不能使用swap。
如果--memory-swap的值为-1,它表示容器程序使用的内存受限,而可以使用的swap空间使用不受限制(宿主机有多少swap容器就可以使用多少)。
[root@docker ~]# docker run -itd --name test1 -m 300m --memory-swap=1G centos:7 bash
cd4169e1c9a9cba52b5cff580fb60d3694b09d9f5ac843bee339aadc63c6d7a5
##给与容器300M物理内存以及700M交换空间
3. 对磁盘IO配额控制(blkio)的限制
--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test1 --device-read-bps /dev/sda:1M centos:7 bash
--device-write-bps:限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test2 --device-write-bps /dev/sda:1mb centos:7 bash
--device-read-iops:限制读某个设备的iops(次数)
--device-write-iops:限制写入某个设备的iops(次数)
3.1 创建容器并限制写速度
[root@docker ~]# docker run -it --name test --device-write-bps /dev/sda:1mb centos:7 bash
[root@d638b2689beb /]# dd if=/dev/zero of=write_test bs=1M count=10 oflag=direct
##添加oflag参数以规避掉文件系统cash
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.003 s, 1.0 MB/s
3.2 创建容器并限制写次数
[root@docker ~]# docker run -itd --name test --device-write-iops /dev/sda:10 centos:7 bash
480096c14d1a13953a03573097826b2c151f63a8942998316a67ba45403e6177
[root@docker ~]# docker inspect test
······
"BlkioDeviceWriteIOps": [
{
"Path": "/dev/sda",
"Rate": 10
}
],
······
3.3 清理docker占用的磁盘空间
docker system prune -a
清除停止的容器以及未被使用的镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 87a94228f133 9 hours ago 133MB
centos 7 eeb6ee3f44bd 3 weeks ago 204MB
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c754e5c5f4f centos:7 "bash" 6 minutes ago Up 6 minutes test1
480096c14d1a centos:7 "bash" 7 minutes ago Exited (137) 5 seconds ago test
[root@docker ~]# docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
480096c14d1a13953a03573097826b2c151f63a8942998316a67ba45403e6177
Deleted Images:
untagged: nginx:latest
untagged: nginx@sha256:b0c17557e2a3a17bcf18498222824312832f69dbf78edab10f08334900bd7fda
deleted: sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02
deleted: sha256:55b6972054b24c53054322a52748324df5797eefbb6dc374e41522a91d532dd5
deleted: sha256:6b88aa6f4485486bfc779cccfbe4a7a47a502a7cff2cd70be89c59dcd0db12a8
deleted: sha256:472c64059965c7b6b1b534ba07374c1d034b17c99acb3cf4534fe78abed41101
deleted: sha256:788a5cf1e4599312b5923694f53e556ba0e2eb4a6bbb51958e0ec2b510345a49
deleted: sha256:410f31f9ae37c62af85e8f9575c5f4d75542be1739ac1ca5982cf461be0b13bc
deleted: sha256:e81bff2725dbc0bf2003db10272fef362e882eb96353055778a66cda430cf81b
Total reclaimed space: 133.3MB
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 3 weeks ago 204MB
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c754e5c5f4f centos:7 "bash" 6 minutes ago Up 6 minutes test1