Docker的安装、镜像操做、容器操做及资源控制

Docker概述

Docker是在linux容器里运行应用的开源工具,是一种轻量级的虚拟机。Docker包含三大核心概念,分别是:镜像、容器和仓库。Docker的容器技术能够在一台主机上轻松的为任何应用建立一个轻量级的、可移植的、自给自足的容器。经过这种容器打包应用程序,意味着简化了从新部署、调试这些琐碎的重复工做。极大地提升了工做效率。linux

Docker容器与传统虚拟化的比较nginx

特性 Docker容器 虚拟机
启动速度 秒级 分钟级
计算能力消耗 几乎无 消耗50%
性能 接近原生 弱于
单机系统支持量 上千个 几十个
隔离性 资源限制 彻底隔离

Docker核心概念

镜像(image)

Docker的镜像是建立容器的基础,相似虚拟机的快照,能够理解为一个面向Docker容器的只读模板。例如,一个镜像能够是一个完整的centos操做系统环境,成为一个centos镜像;也能够是一个安装了MySQL的应用程序,称为一个MySQL镜像。docker

容器(container)

Docker的容器是从镜像建立的运行实例,它能够被启动、中止和删除。所建立的每个容器都是相互隔离、互不可见的,能够保证平台的安全性。能够把容器看做是一个简单的linux环境,Docker利用容器来运行和隔离应用。json

仓库(repository)

Docker仓库是用来集中保存镜像的地方,当建立了本身的镜像以后,可使用push将它上传到公共仓库或者私有仓库,这样,当你下次要在另外一台机器上使用镜像时,只须要pull下来便可。vim

docker安装

Docker支持在主流的操做平台上使用,包括Windows、Linux、MacOS等,本次使用Docker的yum源来进行安装。centos

yum仓库配置

vim /etc/yum.repo.d/docker.repo
[docker]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

安装Docker

yum -y install docker-engine

开启服务

systemctl start docker.service                //开启服务
systemctl enable docker.service            //设置为开机自启

配置阿里云镜像加速器

在使用Docker的过程当中涉及到从仓库下载镜像,利用国外的源下载镜像时,有时下载速度会特别慢,这里我使用的阿里云的镜像加速服务。安装安装1.10.0以上版本的Docker客户端安全

配置镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://j0bdjvov.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

参考:阿里云容器镜像服务bash

Docker镜像操做

查看版本

docker version      //查看所使用Docker版本

Docker的安装、镜像操做、容器操做及资源控制

搜索镜像

使用docker search + 关键字的方式,搜索远端仓库中的镜像,搜索返回不少包含关键字的镜像,其中返回信息包含镜像名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方建立(OFFICIAL)、是否主动建立(AUTOMATED)。默认的输出信息会按照星级进行排序,星级表示了镜像的受欢迎程度,越高越好用。这里我以httpd为例搜索。服务器

docker search httpd

Docker的安装、镜像操做、容器操做及资源控制

下载镜像

docker pull httpd

从下载的过程能够看出,镜像文件由若干层(layer)组成,这种组成方式称之为AUFS(联合文件系统),是实现增量保存与更新的基础,下载过程当中会输出镜像的各层信息。
Docker的安装、镜像操做、容器操做及资源控制ide

查看镜像信息

docker images         //查询系统中全部镜像的信息

参数信息:

  • REPOSITORY——镜像属于的仓库
  • TAG——镜像的标签信息
  • IMAGE ID——镜像的惟一id号,镜像的惟一标识
  • CREATED——镜像建立时间
  • VIRTUAL SIZE——镜像大小
    Docker的安装、镜像操做、容器操做及资源控制

    使用镜像id,查看镜像详细信息

    命令格式:docker inspect 镜像id号

    docker inspect 11426a19f1a2

    镜像添加新标签

    镜像名称的改变包括镜像名称和镜像标签,使用 docker tag进行修改,httpd(修改后名称,自定义):lamp(修改后标签,自定义)

    docker tag httpd httpd:lamp

    Docker的安装、镜像操做、容器操做及资源控制

    镜像删除

    使用docker rmi删除多余的镜像,可使用镜像的标签或者是镜像id删除镜像,当一个镜像有多个标签时,删除命令只会删除该镜像多个标签中的指定标签,并不会影响镜像文件。

    当镜像未在容器中运行时,可直接删除镜像

    Docker的安装、镜像操做、容器操做及资源控制

    当镜像在容器中运行时,则需先删除容器,方可删除镜像

    Docker的安装、镜像操做、容器操做及资源控制

    存出和载入镜像

    存出镜像

    当须要将一台机器上的镜像迁移到另外一台机器使用时,需将镜像保存为本地文件,这一过程叫作存出镜像,镜像存出保存在当前目录。

    docker save -o nginx nginx:latest

    Docker的安装、镜像操做、容器操做及资源控制

    载入镜像

    将存出的镜像拷贝到另外一台机器上使用,而后将该导出文件导入到该机器的镜像库中,这一过程叫作载入镜像,这里载入的方式有两种,使用的方式也不尽相同。

    docker load < nginx   //方式一
    docker --input nginx  //方式二

    上传镜像

    使用官方的镜像仓库(Docker Hub),或者采用阿里云镜像仓库。

    登陆阿里云Docker Registry

    $ sudo docker login --username=[用户名] registry.cn-qingdao.aliyuncs.com
    用于登陆的用户名为阿里云帐号全名,密码为开通服务时设置的密码。

    从Registry中拉取镜像

    $ sudo docker pull registry.cn-qingdao.aliyuncs.com/[命名空间/仓库名称]:[镜像版本号]

    将镜像推送到Registry

    $ sudo docker login --username=46877806@qq.com registry.cn-qingdao.aliyuncs.com
    $ sudo docker tag [ImageId] registry.cn-qingdao.aliyuncs.com/[命名空间/仓库名称]:[镜像版本号]
    $ sudo docker push registry.cn-qingdao.aliyuncs.com/[命名空间/仓库名称]:[镜像版本号]
    //请根据实际镜像信息替换示例中的[ImageId]、[镜像版本号]和[命名空间/仓库名称]参数。

    参考:阿里云容器镜像服务

    Docker容器操做

    容器的建立与启动

    容器的建立是将镜像加载到容器的过程,Docker的容器十分轻量级,用户能够随时建立或者删除。新建立的容器默认处于中止状态,不运行任何程序,须要在其中发起一个进程来启动容器,这个进程是该容器的惟一进程,因此当该进程结束的时候,容器也会彻底中止。中止的容器从新启动并保留原来的修改。在建立完成容器时会返回惟一的ID。

    容器的建立

    docker create -it nginx:latest  /bin/bash    
    //-i 让容器的输入保持打开 -t 让Docker分配一个伪终端
    docker ps -a       //查看全部容器的运行状态 -a 显示系统最近一次启动的容器

    Docker的安装、镜像操做、容器操做及资源控制

    容器的启动

    docker start 9ced2c379b0b         //能够是容器的id或者是容器名称

    Docker的安装、镜像操做、容器操做及资源控制

    一键建立并启动容器

    用户能够直接执行docker run,直接建立并启动容器,等同于先执行docker create,再执行docker start。须要注意的是,一旦命令执行结束,容器也会中止。当运用docker run来建立容器时,Docker在后台的标准过程是:

  • 检查本地是否存在指定镜像,若不存在,则会从公共仓库下载
  • 利用镜像建立并启动一个容器
  • 分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层
  • 从宿主主机的网桥接口中桥接一个虚拟机接口到容器中
  • 分配一个地址池中的IP地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止运行
    docker run centos /usr/bin/bash -c ls /

    Docker的安装、镜像操做、容器操做及资源控制

    如果须要让docker容器以守护态形式在后台运行,能够添加 -d 选项来实现

    docker run -d centos /usr/bin/bash -c "while true;do echo hello;done"

    Docker的安装、镜像操做、容器操做及资源控制

    容器的终止

    docker stop 9ced2c379b0b

    Docker的安装、镜像操做、容器操做及资源控制

    容器的进入

    想要进入容器,要确保容器处于up状态
    Docker的安装、镜像操做、容器操做及资源控制

    容器的导出与导入

    用户能够将任何一个docker容器从一台机器迁移到另外一台机器,在迁移过程当中首先要将已经建立好的容器导出为文件,不管容器是处于运行状态仍是关闭状态都可导出,导出以后将文件传输到其余机器上,使用导入命令,实现容器的迁移。

    docker export cc10d2c6a7b3 > centos7
    cat centos7 | docker import - centos7:test

    Docker的安装、镜像操做、容器操做及资源控制

    容器的删除

    对于容器的删除,通常是对处于关闭状态的容器操做,可是也可对处于运行状态的容器进行,使用-f选项,不推荐。

    docker rm cc10d2c6a7b3

    Docker的安装、镜像操做、容器操做及资源控制

    Docker资源控制

    Cgroup是Control group的简写,是Linux内核提够的一种限制使用物理资源的机制,主要包括CPU、内存、blkio。

    对CPU的控制

    限制cpu使用速率

    使用 --cpu-quota 选项来限制cpu的使用率,cpu的百分比是以1000为单位

    docker run --cpu-quota 20000 容器名   //cpu的使用率限定为20%

    多任务按比例分享CPU

    docker run --cpu-shares 1024 容器A
    docker run --cpu-shares 1024 容器B
    docker run --cpu-shares 1024 容器C    //此时cpu的分配比例为1:1:2

    限制cpu内核使用

    使用 --cpuset-cpus选项来使某些程序独享cpu内核,以便提升其处理速度,选项0表示第一个内核,依次第二个,第三个。

    docker run --cpuset-cpus 0,1,2,3 容器名   //使容器绑定1~4内核使用

    对内存使用的限制

    docker容器中经过命令来限制内存使用量,当容器Cgrop使用的内存超过了限制的容量,Linux内核将会尝试回收这些内存,若是依旧没法控制内存使用在限制范围以内,进程将会被杀死。

    docker run -m 1024m 容器名     //限制使用内存为1G

    对blkio的限制

    若是在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的状况,这时能够经过--device-write-iops选项来限制写入的iops,相应的还有--device-read-bps选项限制读取的iops。该方法只针对blkio限制的是设备,而不是分区。

    docker run --device-write-bps /dev/sda1:1mb 容器名   //限制容器的/dev/sda1的写入ipos为1MB
相关文章
相关标签/搜索