设为首页 收藏本站
查看: 1232|回复: 0

[经验分享] 【干货】Docker的安装、镜像及容器容器

[复制链接]

尚未签到

发表于 2019-2-21 08:30:29 | 显示全部楼层 |阅读模式
1、Docker概述


  • Docker是在Linux容器中运行应用的开源工具,是一种轻量级的虚拟机。器容器技术可以在一台主机上轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大地提高了工作效率。
  • 作为一种轻量级的虚拟化方式,Docker与传统虚拟机相比具有显著的优势:
  • 1)、Docker容器很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;
  • 2)、Docker核心解决的问题是利用容器来实现类似VM,从而以更加节省的硬件资源提供给用户更多的计算资源,从而在保证应用性能的同时,减小了系统开销,使得一台主机上同时运行数千个Docker容器成为可能;
  • 3)、Docker容器操作方便,还可以通过Dockerfile配置文件支持灵活的自动化创建和部署。
  • Docker容器与传统虚拟化的比较;


特性
Docker容器
虚拟机




启动速度
秒级
分钟级


计算能力损耗
几乎无
损耗50%左右


性能
接近原生
弱于


系统支持量(单机)
上千个
几十个


隔离性
资源限制
完全限制


  • Docker之所以拥有众多优势,跟操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层。而Docker容器是直接在操作系统层面上实现的虚拟化。


2、Docker的核心概念及安装

1)、镜像(Image)


  • Docker的镜像是创建容器的基础,类似于虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如:一个镜像可以是一个完整的CentOS7操作系统环境。称之为以个CentOS镜像;可以是安装了一个MySQL的应用程序,称之为一个MySQL镜像等等。
    -dovker提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用。

2)、容器(Container)


  • Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是互相隔离的、互不可见的,可以保证平台的安全性。还可以吧容器看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用。

3)、仓库(Repository)


  • Docker仓库是用来集中存放镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公共仓库或私有仓库,这样一来当下次要在另一台机器上使用这个镜像时,只需从仓库上pull下来就可以了。

4)、安装Docker


  • 这里使用CentOS7系统,Docker自己的YUM源为例来进行相关安装操作。

  vim /etc/yum.repos.d/docker.repo      #配置YUM仓库


[docker-repo]
name=Docker Repository
baseurl=http://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=http://yum.dockerproject.org/gpg
  yum install docker-engine -y      #安装Docker
  systemctl start docker.service    #开启Docker
  systemctl enable docker.service   #开机自启动
  docker version                    #查看版本信息



  • 安装好的Docker系统中有两个程序:Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,管理着所有的容器。Docker客户端则扮演者Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和Docker客户端运行在一台机器上。


3、Docker镜像操作


  • Docker运行容器前需要本地存在对应的镜像,如果不存在本地镜像Docker就会尝试从默认镜像仓库http://hub.docker.com下载。

1)、搜索镜像


  • 在使用下载镜像前,可以使用docker search命令搜索远端官方仓库中的共享镜像。

命令格式:docker search 关键字

  • 搜索后会返还很多包含关键字的镜像其中返回信息包括镜像名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方创建(OFFICIAL)、是否主动创建(AUTOMATED)。
  • 使用docker search命令只能查找镜像,对镜像的标签无法查找,因此如果需要查找docker标签,则需要从网页上访问镜像仓库http://hub.docker.com进行查找。


2)、获取镜像


  • 搜索到符合需求的镜像,可以使用docker pull命令从网络下载镜像到本地使用。

命令格式:docker pull 仓库名称 [:标签]

  • 对于docker来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版,因此也可通过制定标签来下载指定版本,这里的标签(tag)就是用来区分镜像版本的。镜像文件整个下载过程是由由若干层(Layer)组成,我们称之为AUFS(文件联合系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息。


3)、查看镜像信息


  • 用户可以使用docker images 命令查看下载到本地的所有镜像。

命令语法:docker images 仓库名 :[标签]
#REPOSITORY ---镜像属于的仓库
#TAG ---镜像的标签信息,标记同一个仓库中不同镜像
#IMAGE ID ---镜像的唯一ID号,唯一标识了该镜像
#CREATED ---镜像创建时间
#SIZE ---镜像大小

  • 还可以根据镜像的唯一标识ID号,获取镜像详细信息。

docker inspect 镜像ID号



  • 为了在后续工作中使用这个镜像,使用docker tag命令来为本地的镜像添加新的标签。

docker tag 名称 :[标签] 性名称 :[新标签]


4)、删除镜像


  • 可以使用docker rmi命令删除多余的镜像。

命令格式:docker rmi 仓库名称:标签
docker rmi 镜像ID号

  • 当一个镜像有多个标签的时候,docker rmi命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件。但当该镜像只剩下一个标签的时候,此时删除该标签的时候会彻底删除该镜像。
  • 当使用方法二删除时,必须确保该镜像没有被容器使用才能进行,删除时系统会先删除掉指向该镜像的所有标签,然后删除镜像本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,在删除镜像。


5)、存出镜像和载入镜像


  • 当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这一过程叫做存出镜像。

命令格式:docker save -o 存储文件名 存储的镜像   #会保存到当前文件夹

  • 别的机器通过拷贝的镜像,将该镜像导入到自己的镜像库中,这一过程叫做载入镜像

格式命令:docker load < 存出的文件
docker --input 存出的文件
6)、上传文件


  • 本地存储的镜像文件越来越多,就要一个专门的地方存放这些镜像---仓库。目前比较方便的就是公共仓库,默认上传的是Docker hub官方仓库,需要注册账号完成登录后才能上传。在上传镜像之前还需要对本地镜像添加新的标签,并使用docker login登录,然后再使用docker push命令上传。

命令格式:docker push 仓库名称 :标签
Docker 容器操作

1)、容器的创建与启动


  • 容器的创建就是将镜像加载到容器的过程,新创建的容器处于停止状态,不运行任何程序。需要在其中发起一个进程来启动容器,该进程是容器的唯一进程。该进程结束时,容器也会完全停止。使用docker create 命令可以创建一个新的容器。

命令格式:docker create [选项] 镜像 运行的程序      #创建容器后会返回一个唯一的ID
#-i 让容器的输入保持打开
#-t 让Docker分配一个伪终端

  • 使用docker ps 命令查看所有容器的运行状态,添加-a选项可以列出系统最近一次启动的容器。
  • 启动停止状态的容器可以使用docker start命令

docker start 容器的ID/ 名称             #容器启动后,可以看到容器状态一栏变为UP,表示容器他、已处于启动状态

  • 如果用户想创建并启动容器,可以直接执行docker run命令。需注意的是当后面的命令执行解说后,容器就会停止,和在本地直接执行命令几乎没有区别。
  • 有时候需要在后台执行这个容器,就需要让docker容器以守护态形式在后台运行。可以在docker run命令之后添加-d选项啦实现。但需注意容器所运行的程序不能结束。

例如:执行下面的命令容器会持续在后台运行
docker run -d httpd /usr/bin/bash -c "while true; do echo hello;done"


2)、容器的运行与终止


  • 如果需要终止运行的容器,可以使用docker stop 命令完成。

命令格式:docker stop 容器的ID/名称         #当查看到STATUS状态为Exited时,即状态终止


3)、容器的进入


  • 当不进入容器时,让容器执行任务,一条任务执行完成后容器会自动停止,为了避免繁琐的情况,我们需要进入容器执行,且退出容器后,容器并不会停止。可以使用docker exec命令进入运行着的容器。

命令格式:docker exec -it 容器的ID/名称 /bin/bash
-i 表示让容器的输入保持打开
-t 表示让docker分配一个伪终端


4)、容器的导出与导入


  • 容器的导出为文件,可以使用docker export命令来实现。
  • 使用docker import命令可以将文件导入,成为镜像。

命令格式:docker export 容器ID/名称 &gt; 文件名
cat 文件名 | docker import - 生成的镜像名称:标签
5)、容器的删除


  • 可以使用docker rm命令将一个已经处于停止状态的容器删除。

命令格式:docker rm 容器ID/名称


Docker资源控制

1)、限制cpu使用速率


  • 在docker中可以通过--cpu-quota选项来限制cpu使用率,cpu的百分比是以1000为单位的。

docker run --cpu-quota 20000 e1e05c66ec9c #cpu的使用率限定为20%
#还可以通过Cgroup配置文件立即生效
echo 20000 > /sys/fs/cgroup/cpu/docker/e1e05c66ec9ced2d6290ebe8e3fdea27f439dcbeea70921ec5d9e5b0bcffaf11/cpu.cfs_quota_us
2)、多任务按比例分析CPU


  • 当有多个容器任务运行时,很难计算cpu的使用率,为了使容器合理使用cpu资源,可以通过--cpu-share选项设置cpu按比例共享资源,这种方式还可以实现cpu使用率的动态调整。

例如:运行按个容器A、B、C,占用CPU资源的比例为1:1:2
docker run --cpu-shares 1024 容器A
docker run --cpu-shares 1024 容器B
docker run --cpu-shares 2048 容器C
3)、限制cpu内核使用

如果服务器有16个核心,那么cpu编号为0~15,使容器绑定第1~4个内核使用。
docker run --cpuset-cpus 0,1,2,3 容器名
4)、对内存使用的限制


  • 在docker中可以通过docker run -m 命令来限制内存使用量,相应的配置文件为/sys/fs/cgroup/memory/memory.kmem.limit_in_bytes。需要注意的是,一旦容器cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存控制在限制范围之内,进程就会被杀死。

例如:限制容器的内存为512m
docker run -m 512m 容器名
5)、对blkio的限制


  • 如果是在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以--device-write-iops选项来限制写入的iops,相应的还有--device-read-bps选项可以限制读取的iops,但是这种方法只能针对blkio限制的是设备(device),而不是分区,相应的配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkioo.throttle.write_iops_device

例如:限制容器的/dev/sda1的写入ipos为1MB
docker run --device-write-bps /dev/sda1:1mb 容器名



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675101-1-1.html 上篇帖子: Docker架构、镜像及容器的安装和基本操作 下篇帖子: docker基础笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表