Docker 容器(container)及资源限制

摘要:
在宿主机执行:pkilldockeriptables-tnat-Fifconfigdocker0downsystemctlrestartdocker.service重启docker服务问题即可解决。。可以通过dockercommit命令基于一个container重新生成一个image,但是一般得到image的方式不建议这么做,不然image怎么来的就全然不知咯。Container资源限制:如果不对container的资源做限制,它就会无限制地使用物理机的资源,这样显然是不合适的。

Container:

既然container是由image运行起来的,那么是否可以理解为container和image有某种关系?先来看张图:

Docker 容器(container)及资源限制第1张

其实可以理解为container只是基于image之后的layer而已,也就是可以通过docker run image创建出一个container出来。

底层技术支持:

Container是一种轻量级的虚拟化技术,不用模拟硬件创建虚拟机。Docker是基于Linux Kernel的Namespace、CGroups、UnionFileSystem等技术封装成的一种自定义容器格式,从而提供一套虚拟运行环境。

  1. Namespace:用来做隔离的,比如pid[进程]、net[网络]、mnt[挂载点]等
  2. CGroups: Controller Groups用来做资源限制,比如内存和CPU等
  3. 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

Docker 容器(container)及资源限制第2张

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来查看他的资源占用情况:

Docker 容器(container)及资源限制第3张

我们会发现他的内存占用的LIMIT这里居然能达到1.777个G,但是很显然我们知道他不需要这么大的内存 ,那么我们需要去限制他,根据自己的监控状态来确定他的内存配比。

我们通过docker run -d --memory 100M --name tomcat02 tomcat 来创建下一个容器 ,再查看其状态:

Docker 容器(container)及资源限制第4张

我能看到了他的内存被我们限制在了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

Docker 容器(container)及资源限制第5张

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

Docker 容器(container)及资源限制第6张

Container常见操作:

docker run -d --name -p 9090:8080 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)及资源限制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【苏勇老师Linux 入门笔记】网络基础win7 64 &vs2010 与 opengl配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

虚拟机多了个网卡用ethtool -i查看是veth驱动,是docker 惹得祸

当我通过docker run启动任何容器时,我们得到一个新的veth interface.删除容器后,应删除与容器链接的veth接口.但是,有时它会失败(然后容器启动出错): root@hostname /home # ifconfig | grep veth | wc -l 53 root@hostname /home # docker run -d...

centos7.5-docke安装(2020.9.1)

Centos7上安装docker Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。 社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更...

docker通过dockerfile打java项目镜像

环境:centos7 思路:java -jar 启动的项目打包成docker images进行运行 创建dockerfile——>创建shell脚本——>打包images 1、dockerfile内容如下 [root@k8s-master xxl-execl]# more dockerfile #网上拖取java8的镜像 FROM java:...

K8S Harbor搭建及配置

  一、harbor简介 Habor是由VMWare公司开源的容器镜像仓库,用于存储和分发Docker镜像的企业级Registry服务器,添加一些企业必需的功能特性,例如安全、标识和管理等事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/L...

针对IE浏览器里面CSS的Bug解决方法

IE6双倍边距bug 当页面内有多个连续浮动时,如本页的图标列表是采用左浮动,此时设置li的左侧margin值时,在最左侧呈现双倍情况。如外边距设置为10px, 而左侧则呈现出20px,解决它的方法是在浮动元素上加上display:inline;的样式,这样就可避免双倍边距bug。 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的...

物联网Coap框架 ------- Californium结构分析

  一.Calinfornium简介 Californium 是一款基于Java实现的Coap技术框架,该项目实现了Coap协议的各种请求响应定义,支持CON/NON不同的可靠性传输模。 在同等的Coap协议的技术实现中,Calinfornium框架在众多框架中以性能最优。如下:   二.Californium的项目结构 目前Californium...