运行容器
后台运行:run的时候加-d
进入容器的方法(具体命令查看https://blog.csdn.net/qq_37339132/article/details/104417765):
1.docker attach:通过docker attach可以到容器终端
注:可通过ctrl+p+q组合键退出attach终端,但是之前run的时候必须使用-it参数
2.docker exec
说明:
(1)-it以交互的方式打开pseudo-TTY,执行bash,其结果就是打开了一个bash终端
(2)进入到容器中,容器的hostname就是其“短ID”
(3)可以像普通linux一样执行命令
(4)执行exit退出
3.attach和exec的区别
(1)attach直接进入容器启动命令的终端,不会启动新的进程
(2)exec则是在容器中打开新的终端,并且可以启动新的进程
(3)如果想直接在终端中查看启动命令的输出,用attach;其他情况是用exec
(4)当然,如果只是为了查看启动命令的输出,可以查看docker logs命令
stop/start/restart容器
容器在host中实际上是一个容器,docker stop命令本质上是向该进程发送一个SIGTERM信号,如果想快速停止容器,可以使用docker kill命令,其作用是向容器发送SIGKILL信号
处于停止状态的容器,可以通过docker start重新启动
restart可以重启容器,其作用就是执行docker stop和docker start。容器可能因为某种错误而停止运行。对于服务类容器来说,通常希望能够自动重启。启动时设置--restart就可以达到效果。--restart=always意味着无论容器因为何种原因退出(包括正常退出),都立即重启。该参数还可以为--restart=on-failure:3,意思是如果启动进程退出码非0,则重启容器,最多重启3次
pause/unpause
暂停容器工作可以使用pause,处于暂停状态的容器不会占用CPU资源,直到通过docker unpause恢复运行
删除容器
使用docker rm删除,docker rm依次可以指定多个容器,如果希望删除所有已退出的容器,可以执行以下命令docker rm -v $(docker ps -aq -f status=exited)
资源限制
一个docker host上运行若干个容器,每个容器都需要CPU、内存和IO资源,对于KVM等虚拟化技术,用户可以控制分配多少CPU、内存资源给每个虚拟机,对于容器,docker也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个host性能
内存限额(包括物理内存和swap)
docker通过两组参数来控制容器内存的使用量:
(1)-m或--memory:设置内存的使用限额,例如:2GB
(2)--memory-swap:设置内存+swap的使用量限制
当执行以下命令时:
其含义是允许容器最多使用200m内存和100m的swap。默认情况下,上面两组的参数为-1,即对容器内存和swap没有限
cpu限额
默认情况下,所有容器可以平等的使用host CPU资源没有限制。docker可以通过-c或--cpu-shares设置容器使用CPU权重。如果不指定,默认是1024。与内存限额不同,通过-c设置的cpu share并不是CPU资源的绝对值,而是一个相对的权重值。某个容器最终能分配到的CPU资源数量取决于它的cpu share占用容器cpu share总和的比例
换句话说:通过cpu share可以设置容器的优先级,比如以下两个容器
当两个容器都需要使用CPU资源时,上头的可以得到的是下面的两倍。需要特别注意的是,这种按权重分配CPU只会发生在CPU资源紧张的情况下。如果container_A处于空闲状态,这时,为了充分利用CPU资源,container_B也可以分配到所有的CPU资源
Block IO带宽限制
Block IO是另一种可以限制容器使用的资源。其指的是磁盘的读写,docker可以通过设置权重、限制bps和iops的方式控制容器读写磁盘的带宽
1.block io权重
默认情况下,所有容器能平等地读写磁盘,可以通过设置--blkio-weight参数来改变容器block io的优先级,--blkio-weight与--cpu-shares类似,设置的是相对权重值,默认为500
2.限制bps和iops
bps是每秒读写的数据量,iops是每秒IO的次数
可通过以下参数控制容器的bps和iops:
--device-read-bps:限制读某个设备的bps
--device-write-bps:限制写某个设备的bps
--device-read-iops:限制读某个设备的iops
--device-write-iops:限制写某个设备的iops