docker容器引擎

 

Docker概述

 

Docker从诞生到目前为止几年的光景,已经成为开源社区最火爆的项目,风头已经远远盖过了很流行的 Puppet Openstack。那么它到底是跟风炒作,还是名副其实呢?接下来就揭开它的神秘面纱,一探究竟。

 

1. Docker是什么

 

Docker是在 Linux容器里运行应用的开源工具,是一种轻量级的虚拟机诞生于2013,最初的发起者是 dotCloud公司,后来改名为 Docker Inc,专注于 Docker相关技术和产品的开发。 Docker项目目前已经加入了 Linux基金会,全部开源代码均在https://www. github.com/ docker上进行相关维护官网地址为为https://www.docker.com/,有相关文档可以参考。现在DockerOpenstack同为最受欢迎的云计算开源项目。

 

DockerLogo设计为蓝色鲸鱼,拖着许多集装箱。如图1.1所示,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。正如 Docker的设计宗旨一样:Buid Ship and Run  Any  App Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的一次封装,到处运行的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

 

 
 

 

 

 

2. Docker和虚拟机的区别

 

作为一种轻量级的虚拟化方式, Docker与传统虚拟机相比具有显著的优势。

 

Docker容器很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker核心解决的问题是利用容器来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源,所以 Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,从而在保证应用性能的的同时,减小系统开销,使得在一合主机上同时运行数千个 Docker容器成为可能; Docker操作方便,还可以通过 Dockerfile配置文件支持灵活的自动化创建和部署。下表对使用 Docker容器技术与传统虚拟化技术的特性进行了比较。

 

特性

Docker容器

虚拟机

启动速度

秒级

分钟级

计算能力损耗

几乎无

损耗50%左右

性能

接近原生

弱于

系统支持量(单机)

上千个

几十个

隔离性

资源限制

完全隔离

 

 

 
 

 

 

3. Docker的使用场景

 

  1. 必须要脱离底层的硬件,现在开发者需要能方便地创建运行在云平台上的应用,
  2. 同时还需要任何时间地点可获取这些资源,这正是 Docker所能提供的。
  3. Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
  4. 通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大地提高了工作效率。
  5. 例如,服务器从腾讯云迁移到阿里云,如果采用 Docker容器技术,迁移只需要在新的服务器上启动需要的容器器即可。

 

Docker的核心概念及安装

 

1.镜像

 

Docker镜像 ( image ) 创建容器的基础,类似虚拟机的快照,可以理解为是一个面向 Docker容器引擎的只读模板。比如一个镜像可以是一个完整的 Centos操作系统环境,称为一个 Centos镜像:可以是一个安装了MySQL的应用程序,称为一个MySQL镜像,等等。

 

Docker提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用。

 

2.容器

 

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

 

3.仓库

 

Docker仓库 ( Repository ) 用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到

  1. 公有仓库( Public)
  2. 者私有仓库( Private)

这样一来当下次要在另外一台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。

 

  1. 仓库注册服务器器( Registry)

是存放仓库的地方,其中包含了多个仓库,每个仓库集中存放某类镜像,并且使用不同的标签(Tag)来区分它们。

  1. Docker Hub,目前最大的公共仓库,存放了数量庞大的镜像供用户下载使用。

 

4.安装 Docker

 

  1. Docker支持在主流的操作系统平台上进行使用,包括
  2. Windows系统、linux系统及 MacOS系统等。
  3. 目前前最新的 Redhat RHEL CentOSUbuntu系统官方软件源中都已经默认自带了 Docker,可直接安装使用
  4. 也可以用 Docker自己的YUM源进行配置。
  5. Centos系统下安装 Docker可以有两种方式:
  • 一种是使用用curl获得 Docker的安装脚本进行安装
  • 另一种是使用YUM仓库来安装 Docker。需要注意的是,
  • 目前 Docker只能支持64位系统

 

本课程使用 Centos7.3系统, Docker自己的YUM源为例来进行相关安装操作。

 

一、安装docker并管理镜像

1.关闭selinux和firewalld防火墙,安装docker并启动

#yum  -y  install  docker

#systemctl  start docker

#systemctl  enable docker

2.下载dhcp镜像

# docker  search  dhcp

# docker pull docker.io/networkboot/dhcpd

#[root@node3 ~]# docker images

  1. 为/docker.io/networkboot/dhcpd重新命名

格式:docker  tag  原镜像   新名

[root@node3 ~]# docker  tag  docker.io/networkboot/dhcpd  dhcp:centos

  1. 导出镜像

格式:docker  save  -o   导出名    原镜像

[root@node3 ~]# docker save -o  dhcp   dhcp:dhcp

  1. 删除镜像

格式:docker  rmi   镜像

[root@node3 ~]# docker   rmi   centos:dhcp

  1. 导入镜像

格式:docker  load   --input   镜像 或docker  load  <镜像

[root@node3 ~]# docker  load   --input  dhcp 或docker  load  <镜像

7.登录https://hub.docker.com  注册docker账户,并上传镜像

二、容器管理

1.添加允许ipv4

[root@node3 ~]# vim  /usr/lib/sysctl.d/00-system.conf

net.ipv4.ip_forward=1

  1. 创建容器.

格式:docker  create  [选项]   镜像    命令

常用的选项:-i输入一直处于打开状态,-t分配一个伪终端

[root@node3 ~]# docker  create  -it  centos:dhcp  /bin/bash

说明:创建容器时的命令,是容器的唯一主进程,容器会随着这个进程的启动而启动/停止而停止

3.查看容器

[root@node3 ~]# docker   ps   -a

CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES

d44f4cd21974        zhangchunhai/centos:dhcp   "/entrypoint.sh /b..."   3 minutes ago

4.启动容器、停止容器

[root@node3 ~]# docker  start  d44f4cd21974

[root@node3 ~]# docker  stop  d44f4cd21974

5.创建并启动容器的另一种方法:

Docker  run  [选项]  -p 容器内端口:本机端口  命令  镜像

-d:在后台运行

[root@docker ~]# docker run  -d  -p 80:80   httpd:linux

6.再次查看容器

[root@node3 ~]# docker ps -a

CONTAINER ID  IMAGE                  COMMAND        CREATED            STATUS  PORTS       NAMES

d44f4cd21974 zhangchunhai/centos:dhcp   "/entrypoint.sh /b..."   5 minutes ago       Up  42 seconds    

  1. 进入容器

格式:docker  exec   [选项]  容器名或id   命令

[root@node3 ~]# docker  exec  -it  d44f4cd21974   /bin/bash

  1. 导出容器

格式:docker  export  容器名或id  >导出的文件

[root@node3 ~]# docker  export  d44f4cd21974  >centos7dhcp 

9.停止容器

[root@node3 ~]# docker stop d44f4cd21974 

10.删除容器

  [root@node3 ~]# docker rm d44f4cd21974

11导入容器(将成为镜像)

格式:cat  导出的容器   |docker  import  -   生成的镜像:标签

[root@node3 ~]# cat centos7dhcp |docker import  -  zhangchunhai/centos:dhcp

三、限制资源使用

1.限制cpu使用率

[root@node3 ~]# cd   /sys/fs/cgroup/

[root@node3 cgroup]# ls

[root@node3cgroup]#cd cpu,cpuacct/system.slice/docker-3364d6aee72d0c01e606c047737683790ccfe2a1df14933e172cfcaf8ba2b820.scope/

[root@node3 docker-3364d6aee72d0c01e606c047737683790ccfe2a1df14933e172cfcaf8ba2b820.scope]# echo 20000 >cpu.cfs_quota_us

说明:

我们看到 /sys/fs/cgroup 目录中有若干个子目录,我们可以认为这些都是受 cgroups 控制的资源以及这些资源的信息。

  • blkio — ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/​​​​​​​​​​​​,比​​​​​​​​​​​​​​​​​​(磁​​​​​​,固​​​​​​​​​​​​,USB 等​​​​​​)。
  • cpu — ​​​​​​​​​​​​​​​使​​​​​​​​​​​​​​​​​​​​​​​​​​​ CPU ​​​ cgroup ​​​​​​访​​​​​​​​​
  • cpuacct — ​​​​​​​​​​​​​​​​​​​​​​​​​​​ cgroup ​​​​​​​​​​​​使​​​​​​​​​ CPU ​​​​​​​​​
  • cpuset — ​​​​​​​​​​​​​​​​​​ cgroup ​​​​​​​​​​​​​​​​​​​​​​​​ CPU(在​​​​​​​​​​​​​​​)和​​​​​​​​​​​​​​​​​​
  • devices — ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ cgroup ​​​​​​​​​​​​访​​​​​​​​​​​​​​​
  • freezer — ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ cgroup ​​​​​​​​​​​​​​​
  • memory — ​​​​​​​​​​​​​​​​​​​​​ cgroup ​​​​​​​​​使​​​​​​​​​​​​​​​​​​​​​,并​​​​​​​​​​​​​​​​​​​​​​​​​​源使用​​​​​​​​​​​​
  • net_cls — ​​​​​​​​​​​​​​​使​​​​​​​​​​​​​​​​​​​​​(classid)标​​​​​​​​​​​​​​​​​​​​​,可​​​​​​​​​ Linux ​​​​​​​​​​​​​​​​​​(tc)识​​​​​​​​​​​​​​​ cgroup ​​​​​​​​​​​​​​​​​​​​​​​​
  • net_prio — 这个子系统用来设计网络流量的优先级

hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。

2.多任务按比例分享cpu

[root@node3 ~]# docker images

REPOSITORY       TAG        IMAGE ID            CREATED             SIZE

zhangchunhai/centos   dhcp    56c1dba24f3e        23 hours ago        96.6 MB

[root@node3 ~]# docker run  -tid  --cpu-shares 1024 56c1dba24f3e /bin/bash -c ls

3.限制cpu内核使用:限制新建的容器使用1号内核

[root@node3 ~]# cat /proc/cpuinfo| grep "processor"| wc -l

2

[root@node3 ~]# docker run  -tid  --cpuset-cpus 1  56c1dba24f3e /bin/bash -c ls

4.对内存使用的限制:限制新建的容器使用内存512MB

[root@node3 ~]# docker run -tid  -m 512MB  56c1dba24f3e  /bin/bash  -c  ls

5.对blkio的限制:限制新建的容器的/dev/sda的写入速度为1MB

[root@node3 ~]# docker run  -tid  -device-write-bps  /dev/sda:1MB  56c1dba24f3e /bin/bash -c ls

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值