003.Docker容器管理
一 docer运行应用
1.1 常见容器运行
root@docker:~# docker #查看docker相关命令
root@docker:~# docker run -d -p 80:80 httpd #从docker hub下载httpd镜像,启动httpd容器,并将容器的80端口映射到宿主机的80端口
root@docker:~# docker run centos:7 echo "hello world"
hello world
root@docker:~# docker ps #查看运行的容器情况
- CONTAINER ID:容器ID
- NAMES:自动分配的容器名称
root@docker:~# docker logs 634cf027ad85 #查看容器内的标准输出
root@docker:~# docker stop 634cf027ad85 #停止容器
root@docker:~# docker ps #再次查看
1.2 交互式运行容器
root@docker:~# docker run -i -t centos:7 /bin/bash
- -t:在新容器内指定一个伪终端或终端。
- -i:允许你对容器内的标准输入 (STDIN) 进行交互。
二 运行Web应用及其他操作
2.1 容器后端运行
root@docker:~# docker pull training/webapp
root@docker:~# docker run -d -P training/webapp python app.py
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口映射到我们使用的主机上。
root@docker:~# docker ps
2.2 指定端口运行容器
root@docker:~# docker run -d -p 8080:5000 training/webapp python app.py #使用-p参数来绑定指定端口。
root@docker:~# docker run -d -p 9090:5000/tcp --name web training/webapp python app.py #使用--name标记可以为容器命名
root@docker:~# docker ps
root@docker:~# docker port 25cbcff93d56
5000/tcp -> 0.0.0.0:8080
root@docker:~# docker port 95b731acd6b5
5000/tcp -> 0.0.0.0:32768
2.3 进入容器
root@docker:~# docker exec -it 5e7ad2db2304 /bin/bash
root@docker:~# docker exec -it web /bin/bash
2.4 容器其他操作
root@docker:~# docker logs -f 95b731acd6b5 #查看运行日志
root@docker:~# docker inspect web #查看Docker容器的配置和状态信息
root@docker:~# docker restart 5e7ad2db2304 #重启docker
root@docker:~# docker stop 95b731acd6b5 #停止docker
root@docker:~# docker kill 25cbcff93d56 #停止docker
root@docker:~# docker ps -a #查看所有容器情况
root@docker:~# docker start 95b731acd6b5 #运行已停止的docker
root@docker:~# docker rm 95b731acd6b5 #删除该docker
root@docker:~# docker pause 5e7ad2db2304 #暂停容器
root@docker:~# docker unpause 5e7ad2db2304 #恢复容器
三 容器生命周期管理
3.1 容器生命周期
四 docker资源限制
4.1 资源限制意义
五 docker内存限制
5.1 内存限制
- 容器能使用的内存和交换分区大小。
- 容器的核心内存大小。
- 容器虚拟内存的交换行为。
- 容器内存的软性限制。
- 是否杀死占用过多内存的容器。
- 容器被杀死的优先级。
5.2 内存限制相关参数
选项
|
描述
|
-m,--memory
|
内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为4M
|
--memory-swap
|
内存+交换分区大小总限制,格式同上,必须比-m设置的值大
|
--memory-reservation
|
内存的软性限制,格式同上
|
--oom-kill-disable
|
是否阻止 OOM killer 杀死容器,默认没设置
|
--oom-score-adj
|
容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0
|
--memory-swappiness
|
用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
|
--kernel-memory
|
核心内存限制。格式同上,最小为 4M
|
5.3 内存设置方式
- 设置-m,--memory,不设置--memory-swap
root@docker:~# docker run -d --name ubuntu_01 -m 1G --memory-swap 0 ubuntu:16.04
- 设置-m,--memory=a,--memory-swap=b,且b > a
root@docker:~# docker run -d --name ubuntu_02 -m 1G --memory-swap 3G ubuntu:16.04
- 设置-m,--memory=a,--memory-swap=-1
root@docker:~# docker run -d --name ubuntu_03 -m 1G --memory-swap -1 ubuntu:16.04
root@docker:~# vi /etc/default/grub
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
root@docker:~# update-grub #重启系统
5.4 内存软性限制
root@docker:~# docker run -d --name ubuntu_04 -m 2G --memory-reservation 1G ubuntu:16.04
5.5 OOM killer
root@docker:~# docker run -d --name ubuntu_05 -m 1G --oom-kill-disable ubuntu:16.04
5.6 --memory-swappiness
root@docker:~# docker run -d --name ubuntu_06 --memory-swappiness=0 ubuntu:16.04
六 CPU限制
- 当多个 CPU 密集型的容器竞争 CPU 时,设置各个容器能使用的 CPU 时间相对比例。
- 以绝对的方式设置容器在每个调度周期内最多能使用的 CPU 时间。
6.1 CPU限制相关参数
选项
|
描述
|
--cpuset-cpus=""
|
允许使用的 CPU 集,值可以为 0-3,0,1
|
-c,--cpu-shares=0
|
CPU 共享权值(相对权重)
|
cpu-period=0
|
限制 CPU CFS 的周期,范围从 100ms~1s,即[1000, 1000000]
|
--cpu-quota=0
|
限制 CPU CFS 配额,必须不小于1ms,即 >= 1000
|
--cpuset-mems=""
|
允许在上执行的内存节点(MEMs),只对 NUMA 系统有效
|
6.2 CPU集
root@docker:~# docker run -d --name ubuntu_07 --cpuset-cpus="1,3" ubuntu:16.04
6.3 CPU 资源的相对限制
PID container CPU CPU share
100 {C0} 0 100% of CPU0
101 {C1} 1 100% of CPU1
102 {C1} 2 100% of CPU2
6.4 CPU 资源的绝对限制
七 Block IO限制
选项
|
描述
|
--blkio-weight
|
设置的都是资源使用的权重
提示:该设置都是资源紧张的情况下才会起到权重的作用,正常情况下,都是平等的。
--blkio-weight-device 针对特定的设备设置权重
|
--device-read-bps
|
限制读某个设备的bps(数据量)
|
--device-write-bps
|
限制写入某个设备的bps(数据量)
|
--device-read-iops
|
限制读某个设备的iops(次数)
|
--device-write-iops
|
限制写入某个设备的iops(次数)
|
7.1 block IO 权重
root@docker:~# docker run -d --name ubuntu_10 --blkio-weight 600 ubuntu:16.04
root@docker:~# docker run -d --name ubuntu_11 --blkio-weight 300 ubuntu:16.04
7.2 限制 bps 和 iops
root@docker:~# docker run -d --name ubuntu_12 --device-write-bps /dev/sda:30MB ubuntu:16.04
003.Docker容器管理的更多相关文章
- docker 容器管理常用命令
Docker 容器管理: docker create -it centos //这样可以创建一个容器,但该容器并没有启动: create Create a new container 创建一个容器: ...
- docker 容器管理上
Docker 容器管理: docker create -it centos //这样可以创建一个容器,但该容器并没有启动: docker start container_id //启动容器后,可以使用 ...
- Docker-compose 多个Docker容器管理:以MYSQL和Wordpress为例
搬砖的陈大师版权所有,转载请注明:http://www.lenggirl.com/tool/docker-compose.html Docker-compose 多个Docker容器管理:以MYSQL ...
- Docker系列三:Docker容器管理
Docker容器管理 1. 单一容器管理 1) 容器的启动 $ docker run --name gitlab-redis -d --volume /srv/docker/gitlab/redis: ...
- docker容器管理及网络管理
防火墙规则—— INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包示例:禁止10.180.100.141这个机器访问我本机的web服务iptables -t filter -A INPU ...
- docker容器管理-含静态Ip(10)
docker run命令详解 docker run -t #表示分配一个伪终端 -i #表示让容器的标准输入打开,不跟这个参数容器启不来 -d #后台运行 -P #dockerfile中EXPOSE ...
- Docker学习第二天(Docker容器管理)
简介 emmmm Docker 容器管理 推荐文章:容器技术概述 run里面的子选项 1.使用run命令创建容器 docker container run -it ubuntu /bin/bash / ...
- 四、docker容器管理
一.docker容器管理 1.1 容器查看-ps命令 显示本地容器列表,但是默认不显示关闭的容器,只显示运行中的容器,除非加上命令选项 -a 用法:docker ps [-a 显示所有容器,默认只显示 ...
- [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务
转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...
随机推荐
- 【Python学习笔记】调整matplotlib的图例legend的位置
有时默认的图例位置不符合我们的需要,那么我们可以使用下面的代码对legend位置进行调整. plt.legend(loc='String or Number', bbox_to_anchor=(num ...
- windows命令行中英文切换
Windows下cmd命令提示符窗口的语言设置(中英) 打开cmd命令提示窗口 输入 chcp 936 使用ping 命令 显示中文 2 同样 输入chcp 437 3 使用ping 命令
- 使用C#进行应用程序间通信(WPF与Unity通信)
首先程序主体来自网络,我只是应用在我自己的项目中,其中出现了一系列的问题,有些已经解决,有些使用了折中的方案,如果有大神能够给予知道,感激不尽! 首先是发送端程序: 这是我的程序任务执行主界面,此处已 ...
- BZOJ 3498: PA2009 Cakes 一类经典的三元环计数问题
首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vect ...
- 转载:abstract的方法是否可同时是static,是否可同时是native,是否可同时是synchronized?
原文:http://blog.csdn.net/fhm727/article/details/5222965 1.abstract与static (what) abstract:用来声明抽象方法,抽象 ...
- javascript 类型比较方法
不要使用new Number().new Boolean().new String()创建包装对象: 用parseInt()或parseFloat()来转换任意类型到number: 用String() ...
- 转:MySQL如何修改密码
转:https://www.cnblogs.com/yang82/p/7794712.html. 第一种方式: 最简单的方法就是借助第三方工具Navicat for MySQL来修改,方法如下: 1. ...
- citySelect省市区jQuery联动插件
参考地址:http://blog.csdn.net/qq_33556185/article/details/50704446 参考地址:http://www.lanrenzhijia.com/jque ...
- 从零开始自己搭建复杂网络2(以Tensorflow为例)
从零开始自己搭建复杂网络(以DenseNet为例) DenseNet 是一种具有密集连接的卷积神经网络.在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集, 而 ...
- Java基础94 分页查询(以MySQL数据库为例)
1.概述 分页查询,也可叫做分批查询,基于数据库的分页语句(不同数据库是不同的). 本文使用的事MySql数据库. 假设:每页显示10条数据. Select * from c ...