一、容器的基本使用
1、docker container命令的参数:
[root@master ~]# docker container
Usage: docker container COMMAND
Manage containers
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
exec Run a command in a running container
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers
logs Fetch the logs of a container
ls List containers
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
run Run a command in a new container
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
Run 'docker container COMMAND --help' for more information on a command.
初次启动一个nginx容器,使用docker run或docker container run,再来了解一下docker run:
[root@master ~]# docker run
"docker run" requires at least 1 argument.
See 'docker run --help'.
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Docker run参数:
-d,-d=true 在后台模式(或者直接使用-d)
-a, --attach=[] 连接容器的stdin、stdout、stderr (默认连接这三个流)
-t, --tty=false 使用终端。经常和 -i一起使用。
--sig-proxy=true 代理所有收到的系统信息(我测试了一下好像没有作用)
-i, --interactive=false 打开STDIN和容器交互。经常和 -t一起使用。
-p 手动指定端口映射,如-p 80:80
-P 系统随机指定端口映射
比如启动一个nginx容器:
[root@master ~]# docker run -itd -P --name nginx docker.io/nginx /bin/bash
19f8da31319adae9d183a7ecca7e9c2e4245ebef126fcf37f9715a847cb5c499
停止一个容器:
[root@master ~]# docker stop nginx
启动一个容器:
[root@master ~]# docker start nginx
重启一个容器:
[root@master ~]# docker restart nginx
删除一个容器:
[root@master ~]# docker rm ID
二、资源控制
1、内存限额
与操作系统类似,容器可使用内存分为物理内存和swap,docker可使用下面两个参数控制容器的内存:
(1)-m或—memory,设置内存限额,比如100M,2GB;
(2)–memory-swap,设置内存+swap的使用限额,只有在—memory设置时才有意义;
例:启动一个容器,内存限额为200M,内存加上swap一共300M
[root@master ~]# docker run -itd -P --name nginx -m 200M --memory-swap 300M docker.io/nginx
若不添加以上两组参数,默认资源没有限制。
如果–memory-swap 设置为0,则忽略该设置,并将该值视为未设置;
如果–memory-swap 设置为与值相同的值–memory,并且–memory设置为正整数,则容器无权访问swap。
若只制定–memory,而不指–memory-swap,则–memory-swap大小默认为–memory的两倍,如:
[root@master ~]# docker run -itd -P --name nginx -m 200M docker.io/nginx
利用progrium/stress景象进行压力测试,资源限额200M,内存+swap为300M,使用一个线程,并且一个线程分配超过300M内存:
[root@master ~]# docker run -it -m 200M --memory-swap 300M progrium/stress --vm 1 --vm-bytes 350M
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogvm worker 1 [6] forked
stress: dbug: [6] allocating 367001600 bytes ...
stress: dbug: [6] touching bytes in strides of 4096 bytes ...
stress: FAIL: [1] (416) <-- worker 6 got signal 9
stress: WARN: [1] (418) now reaping child worker processes
stress: FAIL: [1] (422) kill error: No such process
stress: FAIL: [1] (452) failed run completed in 1s
可以看到–vm-bytes 350M超过了–memory-swap 300M,所以提示kill error: No such process,进程直接结束了。
2、CPU限额
默认情况下,每个容器对主机CPU周期的访问权限是不受限制的。
docker 提供了–cpu-period、–cpu-quota两个参数控制容器可以分配到的 CPU 时钟周期。 --cpu-period是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配。
–cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。跟 –cpu-shares 不同的是这种配置是指定一个绝对值,而且没有弹性在里面,容器对 CPU 资源的使用绝对不会超过配置的值。
使用示例:[ cpu-period 设置为1000000(即1秒),cpu-quota 设置为 200000(0.2秒)]
docker run -tid --cpu-period 100000 --cpu-quota 200000 ubuntu
限制CPU个数:
在 docker 1.13 及更高的版本上,能够很容易的限制容器可以使用的主机 CPU 个数。只需要通过 --cpus 选项指定容器可以使用的 CPU 个数就可以了,并且还可以指定如 1.5 之类的小数。
通过下面的命令创建容器,–cpus=2 表示容器最多可以使用主机上两个 CPU:
docker run -it --rm --cpus=1.5 ubuntu:16.04 /bin/bash
使用特定0-1的cpu:
docker run -idt --name a1 --cpuset-cpus=0-1 ubuntu:18.04 /bin/bash