按用途容器大致可分为两类:服务类容器和工具类的容器。
服务类容器以daemon的形式运行,对外提供服务,比如Web Server、数据库等。
通过 -d以后台方式启动这类容器是非常合适的。
如果要排查问题,可以通过exec -it进入容器。
创建并启动
docker run -d webserver-image
以交互方式启动一个已经创建了的容器
docker exec -it webserver-image /bin/bash
工具类容器通常能给我们提供一个临时的工作环境,通常以run -it方式运行。执行exit退出终端,同时容器停止。
工具类容器多使用基础镜像,例如busybox、debian、ubuntu等。
创建并启动
docker run -it ubuntu /bin/bash
docker run -d --restart=always webserver-image
--restart=always
意味着无论容器因何种原因退出(包括正常退出),都立即重启;该参数的形式还可以是 --restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次
当你使用 Docker 时,你会频繁地需要停止、启动和重启容器。以下是这些操作的详细说明:
停止容器 (docker stop
):
docker stop
启动容器 (docker start
):
docker start
重启容器 (docker restart
):
docker restart
这些命令可以帮助你有效地管理 Docker 容器的生命周期,让你能够灵活地控制容器的运行状态。
当你使用 Docker 时,你可能会需要暂停和恢复容器的运行。以下是 docker pause
和 docker unpause
命令的详细说明:
暂停容器 (docker pause
):
docker pause
docker unpause
命令来恢复它们的运行。恢复容器 (docker unpause
):
docker unpause
这些命令可以帮助你在需要时暂停和恢复容器的运行,让你能够更灵活地控制容器的状态。
docker rm
命令用于删除一个或多个已经停止的容器。以下是该命令的详细说明:
docker rm
docker rm my_container
或 docker rm container1 container2
docker rm
命令删除。这个命令可以帮助你清理不再需要的容器,释放系统资源。在使用之前,请确保你真的不再需要这些容器,因为删除后将无法恢复。
docker rm是删除容器,而docker rmi是删除镜像。
Docker 容器的生命周期包括以下几种状态的切换:
创建(Created):当你使用 docker create
命令创建一个容器时,容器就处于创建状态。在这个阶段,容器已经被创建,但还没有被启动。
启动(Running):当你使用 docker start
命令启动一个已经创建的容器时,容器就会进入运行状态。在这个阶段,容器内的进程正在运行。
暂停(Paused):你可以使用 docker pause
命令来暂停一个正在运行的容器,使得容器内的所有进程都会被挂起。
恢复(Unpaused):使用 docker unpause
命令可以恢复一个被暂停的容器,使得容器内的进程继续运行。
停止(Stopped):当你使用 docker stop
命令停止一个运行中的容器时,容器会进入停止状态。在这个阶段,容器内的进程会被发送 SIGTERM 信号,然后等待一段时间后被强制终止。
删除(Deleted):使用 docker rm
命令可以删除一个已经停止的容器,释放其占用的系统资源。
这些状态之间的切换反映了容器在其生命周期中的不同阶段,理解这些状态的切换有助于更好地管理和维护 Docker 容器。
容器可使用的内存包括两部分:物理内存和swap。
-m或 --memory
:设置内存的使用限额,例如100MB,2GB。默认情况下值为-1,即无上限。
--memory-swap
:设置内存+swap的使用限额。默认情况下值为-1,即无上限。如果在启动容器时只指定 -m而不指定 --memory-swap,那么 --memory-swap默认为 -m的两倍。
--vm
:启动内存工作线程数量。
--vm-bytes
:每个线程分配多大内存
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1--vm-bytes 280M
默认设置下,所有容器可以平等地使用host CPU资源并且没有限制。
Docker可以通过 -c或 --cpu-shares
设置容器使用CPU的权重。如果不指定,默认值为1024。
与内存限额不同,通过 -c设置的cpu share是一个相对的权重值。某个容器最终能分配到的CPU资源取决于它的cpu share占所有容器cpu share总和的比例。
docker run --name "container_A" -c 1024 ubuntu docker run --name "container_B" -c 512 ubuntu
bps是byte per second,每秒读写的数据量。
iops是io per second,每秒IO的次数。
可通过以下参数控制容器的bps和iops:
● --device-read-bps:限制读某个设备的bps。
● --device-write-bps:限制写某个设备的bps。
● --device-read-iops:限制读某个设备的iops。
● --device-write-iops:限制写某个设备的iops。
docker run --device-write-bps=/dev/sda:1mb my_container
还可以通过设置 --blkio-weight
参数来改变容器block IO的优先级。
–blkio-weight与 --cpu-shares类似,设置的是相对权重值,默认为500。
在下面的例子中,containerA读写磁盘的带宽是containerB的两倍。
docker run -it --name container_A --blkio-weight 600 ubuntu docker run -it --name container_B --blkio-weight 300 ubuntu
Docker 使用了 Linux 内核提供的两个重要特性来实现容器化:cgroup(Control Groups)和 namespace。以下是对它们的详细说明:
cgroup(控制组):
namespace(命名空间):
综合起来,cgroup 和 namespace 是 Docker 实现容器化的重要基础,它们使得 Docker 能够实现资源的隔离、管理和容器的隔离运行。
最后,总结一下docker容器的常用命令:
create:创建容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
run:运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
pause:暂停容器
docker pause CONTAINER
unpause:取消暂停继续运行容器
docker unpause CONTAINER
stop:发送SIGTERM停止容器
docker stop [OPTIONS] CONTAINER
kill:发送SIGKILL快速停止容器
docker kill [OPTIONS] CONTAINER
start:启动容器
docker start [OPTIONS] CONTAINER
restart:重启容器
docker restart [OPTIONS] CONTAINER
attach:attach到容器启动进程的终端
docker attach [OPTIONS] CONTAINER
exec:在容器中启动新进程,通常使用"-it"参数
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
logs:显示容器启动进程的控制台输出,用"-f"持续打印
docker logs [OPTIONS] CONTAINER
-f
选项可以持续地打印日志。rm:从磁盘中删除容器
docker rm [OPTIONS] CONTAINER
这些命令涵盖了 Docker 容器的创建、管理、运行和监控等方方面面,是使用 Docker 进行容器化应用开发和部署的重要工具。