Docker 容器(container)及资源限制
Container:
既然container是由image运行起来的,那么是否可以理解为container和image有某种关系?先来看张图:

其实可以理解为container只是基于image之后的layer而已,也就是可以通过docker run image创建出一个container出来。
底层技术支持:
Container是一种轻量级的虚拟化技术,不用模拟硬件创建虚拟机。Docker是基于Linux Kernel的Namespace、CGroups、UnionFileSystem等技术封装成的一种自定义容器格式,从而提供一套虚拟运行环境。
- Namespace:用来做隔离的,比如pid[进程]、net[网络]、mnt[挂载点]等
- CGroups: Controller Groups用来做资源限制,比如内存和CPU等
- Union file systems:用来做image和container分层
Container到 Image:
既然container是基于image之上的,想想是否能够由一个container反推出image呢?肯定是可以的,比如通过docker run运行起一个container出来,这时候对container对一些修改,然后再生成一个新的image,这时候image的由来就不仅仅只能通过Dockerfile咯。
1.拉去一个 centos 的镜像 docker pull centos。
2.通过该镜像生成一个 container 并且是交互式运行的:docker run -d -it --name my-centos1 centos。
3.进入容器中:docker exec -it my-centos1 bash。
4.输入vim命令:bash: vim: command not found 。我们发现官方所提供的centos镜像生成的容器中没有vim命令。
5.我们要做的是对该container进行修改,也就是安装一下vim命令,然后将其生成一个新的centos。在centos的container中安装vim :yum install -y vim
6.退出容器(exit),将其生成一个新的centos,名称为"vim-centos-image" :docker commit my-centos1 vim-centos-image
7.查看镜像列表,并且基于"vim-centos-image"创建新的容器 docker run -d -it --name my-vim-centos vim-centos-image

8.进入到my-vim-centos容器中,检查vim命令是否存在:docker exec -it my-vim-centos bash ,输命令 vim 发现该镜像生成的容器拥有该命令。
我在这里遇到了容器网络有点问题,我们可以这么做:
先停掉宿主机上运行的docker容器,然后执行以下命令。在宿主机执行:
pkill docker
iptables -t nat -F
ifconfig docker0 down
systemctl restart docker.service 重启docker服务 问题即可解决。。
可以通过docker commit命令基于一个container重新生成一个image,但是一般得到image的方式不建议这么做,不然image怎么来的就全然不知咯。
Container资源限制:
如果不对container的资源做限制,它就会无限制地使用物理机的资源,这样显然是不合适的。
我们通过 docker run -d --name tomcat01 -p 9991:8080 tomcat创建的容器,我们通过docker stats tomcat01来查看他的资源占用情况:

我们会发现他的内存占用的LIMIT这里居然能达到1.777个G,但是很显然我们知道他不需要这么大的内存 ,那么我们需要去限制他,根据自己的监控状态来确定他的内存配比。
我们通过 docker run -d --memory 100M --name tomcat02 tomcat 来创建下一个容器 ,再查看其状态:

我能看到了他的内存被我们限制在了100M以内。这样我们就能更合理的运用机器的内存。除了这个内存的设置 --cpu-shares 设置权重 docker run -d --cpu-shares 10 --name tomcat03 tomcat .
我们还可以通过官方推荐的图形化界面来看到我们的容器运行情况,资源利用情况,https://github.com/weaveworks/scope 只需要3个步骤
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch 192.168.1.101
停止scope:scope stop
同时监控两台机器,在两台机器中分别执行如下命令:scope launch ip1 ip2

然后会映射到虚拟机 4040 的端口上,可以通过192.168.1.101:4040 来访问:

Container常见操作:
docker run -d --name -p : my-tomcat tomcat 根据镜像创建容器
docker ps 查看运行中的container
docker ps -a 查看所有的container[包含退出的]
docker rm containerid 删除container
docker rm -f $(docker ps -a) 删除所有container
docker exec -it container bash 进入到一个container中
docker commit my-centos vim-centos-image 根据container生成image
docker logs container 查看某个container的日志
docker stats 查看容器资源使用情况
docker inspect container 查看容器详情信息
docker stop/start container 停止/启动容器
Docker 容器(container)及资源限制的更多相关文章
- 查看 docker 容器使用的资源
在容器的使用过程中,如果能及时的掌握容器使用的系统资源,无论对开发还是运维工作都是非常有益的.幸运的是 docker 自己就提供了这样的命令:docker stats. 默认输出 docker sta ...
- docker——容器(container)
容器相关命令一览表: docker create docker run docker start/stop/restart docker attach/exec docker rm docker ex ...
- [转]查看 docker 容器使用的资源
作者:sparkdev 出处:http://www.cnblogs.com/sparkdev/ 在容器的使用过程中,如果能及时的掌握容器使用的系统资源,无论对开发还是运维工作都是非常有益的.幸 ...
- 如何获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 如何获取 docker 容器(container)的 ip 地址(转)
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 014-docker-终端获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 获取 docker 容器(container)的 ip 地址
获取单个IP docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-ID> 获取所有容器IP doc ...
- docker 容器container运行后,如何进入容器内部?
docker exec -ti 容器ID /bin/bash
- Docker容器学习与分享01
1.什么是容器? 容器技术是一种虚拟化的方案,与传统的虚拟机不同,传统的虚拟机是通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器是直接运行在操作系统内核之上的用户空间. 所以容器虚拟化又 ...
随机推荐
- vue interceptors(拦截器)
拦截器 顾名思义: 就是半路个您劫持, 拦截器 其实在项目和自己写demo中,总会遇到请求方面需要在请求头里面做判断或者添加一些东西, 这时候 vue 中应用中axios的 interceptors ...
- golang初识 和 变量,常量,iota
目录 一.go语言与python 1. go语言 2. python 二.变量相关 1. go语言的基本语法 2. 标识符和关键字 3. 变量声明 (1)声明变量时未指定初始值 (2)声明变量时指定初 ...
- IDC机房跳线
服务网卡口与配线架 这里有一根网线 记录方式 签 A:23FM-23U-T07 (配线架网线) B:23FM-23U-NIC1(服务器网线) 在配线架的机柜旁边一定写明了 跳线的对面的 交换和配线 ...
- QT 问题提问网站
https://stackoverflow.com/questions/tagged/qt
- Netty 介绍和应用场景(一)
1.为什么选择Netty 需要了解了Socket通信(IO/NIO/AIO)编程,对于通信模型已经有了一个基本的认识.,果想把这些真正的用于实际工作中,那么还需要不断的完善.扩展和优化.比如经典的TC ...
- css使用1
一.引入css的三种方式 一.CSS(Cascading Style Sheet):层叠样式表 二.CSS样式由两个组成部分:选择器和声明.声明又包括属性和属性值.每个声明之后用分号结束 语法结构 选 ...
- c#翻页效果
用c#和GDI+实现杂志翻页动画效果时间:2010-01-13 blog.csdn.net 周公 - 说明:以前本人参与个一个电子杂志项目,当时要求实现模拟现实生活中的杂志翻页动画效果,别人推荐了这篇 ...
- 响应式布局@media screen and ( max-width: 像素值 ) {}
设计思路很简单,首先先定义在标准浏览器下的固定宽度(假如标准浏览器的分辨率为1024px,那么我们设置宽为980px),然后用Media Query来监测浏览器的尺寸变化,当浏览器的分辨率小于1024 ...
- JS中集合对象(Array、Map、Set)及类数组对象的使用与对比(转载)
在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型,Array ...
- 使用私有仓库(Docker Registry 2.0)管理镜像
1. 执行以下命令新建并启动一个Docker Registry 2.0 docker run -d -p 5000:5000 --restart=always --name registry2 reg ...