wangyp

博客园 首页 联系 订阅 管理
01.如何运行容器
#启动容器 -d 后台,--name指定容器运行的名称
root@ubuntu:~# docker run   --name "my_httpd_server" -d httpd
8bd623b3e7b88c585f99aeab17e97c597e2e0193d65f581a61d0c58ebb0d6043
#查看容器
root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                    NAMES
8bd623b3e7b8        httpd               "httpd-foreground"       22 seconds ago      Up 20 seconds                     80/tcp                   my_httpd_server
#干掉容器 短ID=长ID的前12位  如何指定容器:1)长ID 2)短ID 3)name
root@ubuntu:~# docker stop 8bd623b3e7b8
8bd623b3e7b8

02.进入容器
#运行一个
docker run -d centos /bin/bash -c "while true;do sleep 1;echo hha;done"
#attached进入 attach 直接进入容器 启动命令 的终端,不会启动新的进程
docker attach a4967bf73180af7f5a02f9fa464bb50d46798060ae57b427e000dfb7d4f03f64
#exec进入 exec 则是在容器中打开新的终端,并且可以启动新的进程
docker exec -it  a4967bf73180af7f5a02f9fa464bb50d46798060ae57b427e000dfb7d4f03f64
#查看log
docker logs -f a4967bf73180af7f5a02f9fa464bb50d46798060ae57b427e000dfb7d4f03f64

03.容器运行的最佳实践
按用途容器大致可分为两类:服务类容器和工具类的容器
A.服务类容器以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d 以后台方式启动这类容器是非常合适的。如果要排查问题,可以通过 exec -it 进入容器。
B.工具类容器通常给能我们提供一个临时的工作环境,通常以 run -it 方式运行,比如

04.docker create start stop restart pause unpause  rm/rmi 
--restart=always 意味着无论容器因何种原因退出(包括正常退出),就立即重启。该参数的形式还可以是 --restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次。

下面是容器的常用操作命令:

create      创建容器  
run         运行容器  
pause       暂停容器  
unpause     取消暂停继续运行容器  
stop        发送 SIGTERM 停止容器  
kill        发送 SIGKILL 快速停止容器  
start       启动容器  
restart     重启容器  
attach      attach 到容器启动进程的终端  
exec        在容器中启动新进程,通常使用 "-it" 参数  
logs        显示容器启动进程的控制台输出,用 "-f" 持续打印  
rm          从磁盘中删除容器

05.限制对内存的使用
内存限额
与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。 Docker 通过下面两组参数来控制容器内存的使用量。

-m 或 --memory:设置内存的使用限额,例如 100M, 2G。

--memory-swap:设置 内存+swap 的使用限额。

当我们执行如下命令:

docker run -m 200M --memory-swap=300M ubuntu

其含义是允许该容器最多使用 200M 的内存和 100M 的 swap。默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。

06.限制对CPU的使用
Docker 可以通过 -c 或 --cpu-shares 设置容器使用 CPU 的权重。如果不指定,默认值为 1024。

与内存限额不同,通过 -c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。

换句话说:通过 cpu share 可以设置容器使用 CPU 的优先级。

比如在 host 中启动了两个容器:

docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu

container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。

07.限制容器的BLOCK IO
Block IO 是另一种可以限制容器使用的资源。Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论。

注:目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。

block IO 权重
默认情况下,所有容器能平等地读写磁盘,可以通过设置 --blkio-weight 参数来改变容器 block IO 的优先级。

--blkio-weight 与 --cpu-shares 类似,设置的是相对权重值,默认为 500。在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。

docker run -it --name container_A --blkio-weight 600 ubuntu   
docker run -it --name container_B --blkio-weight 300 ubuntu

08.底层实现技术
cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。/sys/fs/cgroup/下有container的ID
namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace 实现了容器间资源的隔离。

  

 

posted on 2017-07-23 23:15  wangyp  阅读(243)  评论(0编辑  收藏  举报