运维篇Docker之灵魂拷问2-2

关注微信公众号 Java书友会 获取更多好文哟

上节中,我们已经对Docker核心组件image进行了剖析,这节我们将对image层之上的container进行拷问。从下图中,我们可以看出container是基于Image层产生的。而image与container的关系 ,我们可以类比类和对象的关系进行理解。在docker的世界中,image是只读的,而container是可读写的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F4upvkEa-1585221146076)(E:\architect\markdown\图库\docker-container.png)]

docker初见本尊篇我们已经介绍了如何创建一个容器,例如创建tomcat命令如下

docker run -d --name my-tomcat -p 9090:8080 tomcat

从container反推image

灵魂拷问1:既然我们知道container是基于image创建的,那么我们是否可以通过container反推得到image呢?

下面我们看看个例子实践一波

#1.拉取centos镜像
docker pull centos 
#2.根据centos镜像创建出centos container
docker run -d -it --name my-centos centos
#3.进入my-centos容器中
docker exec -it my-centos bash 
#4.输入vim命令,显示
bash: vim: command not found
#5.我们要做的是 对该container进行修改,也就是安装一下vim命令,然后将其生成一个新的centos #6.在centos的container中安装vim 
yum install -y vim
#7.退出容器(exit或者Ctrl+d),将其生成一个新的centos,名称为"vim-centos-image"
docker commit my-centos vim-centos-image
#8.查看镜像列表,并且基于"vim-centos-image"创建新的容器
docker run -d -it --name my-vim-centos vim-centos-image
#9.进入到my-vim-centos容器中
docker exec -it my-vim-centos bash
#10.检查vim命令是否存在
vim

经过以上操作之后,我们发现,我们通过container反向创建的image,再将其生成新的container就继承了原来容器的特性。不过这种方式,并不推荐使用。因为我们常规的操作是利用Docker file生成image,这样做的话,我们无法得知image的创建过程 。更加推荐的方式是上节内容中的自定义image

container常用命令

上面我们用了几个操作容器的命令,这里做一个总结:

#1.根据镜像创建容器
docker run -d --name -p 9090:8080 my-tomcat tomcat
#2.查看运行中的container
docker ps
#3.查看所有的container[包含退出的]
docker ps -a 
#4.删除container
docker rm containerid 
#5.删除所有container
docker rm -f $(docker ps -a)
#6.进入到一个container中
docker exec -it container bash
#7.根据container生成image
docker commit my-centos vim-centos-image
#8.查看某个container的日志
docker logs container
#9.查看容器资源使用情况
docker stats
#10.查看容器详情信息
docker inspect container
#11.停止/启动容器
docker stop/start container

补充:删除image和container命令

#1.杀死所有正在运行的容器
docker kill $(docker ps -a -q)
#2.删除所有已经停止的容器
docker rm $(docker ps -a -q)
#3.删除所有未打 dangling 标签的镜
docker rmi $(docker images -q -f dangling=true)
#4.删除所有镜像
docker rmi $(docker images -q)
#5.强制删除 无法删除的镜像
docker rmi -f <IMAGE_ID>
docker rmi -f $(docker images -q)
 ~/.bash_aliases
	#1.杀死所有正在运行的容器.
	alias dockerkill='docker kill $(docker ps -a -q)'
 	#2.删除所有已经停止的容器.
	alias dockercleanc='docker rm $(docker ps -a -q)'
	#3.删除所有未打标签的镜像.
	alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
 	#4.删除所有已经停止的容器和未打标签的镜像.
	alias dockerclean='dockercleanc || true && dockercleani'

Container的资源监控

顾名思义,作为容器,他必然是有自己的“大小”,只有合理的利用好容器的资源,才能让他更好地发挥作用。

上面,我们了解了Container的基本操作命令,可以执行docker stats来具体看一下docker容器的状态信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rR0EM63R-1585221120686)(E:\architect\markdown\图库\Container-resource.png)]

扫描二维码关注公众号,回复: 11828516 查看本文章

我们可以看到,默认内存分配使用了宿主机的最大内存,这样的话会让我们的资源不可控。

对于资源的限制,我们主要可以通过两方面来进行处理:

  • 内存限制

    #--memory memory limit
    docker run -d --memory 100M --name tomcat1 tomcat
    
  • cpu限制

    #--cpu-shares cpu权重
    docker run -d --memory 100M --cpu-shares 10 --name tomcat02 tomcat
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ecT1Ba7E-1585221120687)(E:\architect\markdown\图库\container-sourceLimit.png)]

从上图我们可以看出,已经设置成功啦。具体的大小可以根据实际情况灵活调整。

命令行我们自己玩玩看看还行,但是在生产环境,海量容器的时候,就捉襟见肘了。这时候,得请出我们强大的容器监控工具

Weavescope

github地址:https://github.com/weaveworks/scope

这个工具很强大,搭建也很简单,不过可能会存在一点小障碍,但也容易解决。

#1.配置weavescope环境
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch 192.168.110.164
#2.页面访问http://192.168.110.164:4040/,此时可能会出现页面无法访问的问题.我们要检查下4040端口是否启用。
	#2.1 查看端口状态
	firewall-cmd --query-port=4040/tcp
	#2.2 添加端口
	firewall-cmd --add-port=4040/tcp --permanent
	#2.3 端口重载
	firewall-cmd --reload

针对weave的详细介绍:

​ 可以参考官网: https://www.weave.works/docs/

​ 也可以看看这篇文章: https://www.jianshu.com/p/1155b97bfdd8

Container的技术支撑

上面我们说了一些container比较重要的点,那么总结下来说

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

Namespace:用来做隔离的,比如pid[进程]、net[网络]、mnt[挂载点]等

CGroups: Controller Groups用来做资源限制,比如内存和CPU等

Union file systems:用来做image和container分层

想要进一步探究,就看我下一篇文章运维篇Docker之网络剖析吧,敬请期待~

猜你喜欢

转载自blog.csdn.net/aiwaston/article/details/105125798
2-2
今日推荐