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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的安装镜像操作容器操作及资源控制相关的知识,希望对你有一定的参考价值。

Docker概述

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

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

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

Docker核心概念

镜像(image)

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

容器(container)

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

仓库(repository)

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

docker安装

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

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

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

Docker镜像操作

查看版本

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

技术分享图片

搜索镜像

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

docker search httpd

技术分享图片

下载镜像

docker pull httpd

从下载的过程可以看出,镜像文件由若干层(layer)组成,这种组成方式称之为AUFS(联合文件系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息。
技术分享图片

查看镜像信息

docker images         //查询系统中所有镜像的信息

参数信息:

  • REPOSITORY——镜像属于的仓库
  • TAG——镜像的标签信息
  • IMAGE ID——镜像的唯一id号,镜像的唯一标识
  • CREATED——镜像创建时间
  • VIRTUAL SIZE——镜像大小
    技术分享图片

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

    命令格式:docker inspect 镜像id号

    docker inspect 11426a19f1a2

    镜像添加新标签

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

    docker tag httpd httpd:lamp

    技术分享图片

    镜像删除

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

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

    技术分享图片

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

    技术分享图片

    存出和载入镜像

    存出镜像

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

    docker save -o nginx nginx:latest

    技术分享图片

    载入镜像

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

    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 [email protected] 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 start 9ced2c379b0b         //可以是容器的id或者是容器名称

    技术分享图片

    一键创建并启动容器

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

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

    技术分享图片

    若是需要让docker容器以守护态形式在后台运行,可以添加 -d 选项来实现

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

    技术分享图片

    容器的终止

    docker stop 9ced2c379b0b

    技术分享图片

    容器的进入

    想要进入容器,要确保容器处于up状态
    技术分享图片

    容器的导出与导入

    用户可以将任何一个docker容器从一台机器迁移到另一台机器,在迁移过程中首先要将已经创建好的容器导出为文件,无论容器是处于运行状态还是关闭状态均可导出,导出之后将文件传输到其他机器上,使用导入命令,实现容器的迁移。

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

    技术分享图片

    容器的删除

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

    docker rm cc10d2c6a7b3

    技术分享图片

    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

以上是关于Docker的安装镜像操作容器操作及资源控制的主要内容,如果未能解决你的问题,请参考以下文章

Linux——Docker安装及镜像容器基本操作

Docker------Docker基本管理(镜像,容器,网络,资源控制)

Docker的安装及操作

Docker数据管理网络通信以及资源控制

Docker基础理论及安装部署(镜像与容器的基本操作注解)

Docker基础理论及安装部署(镜像与容器的基本操作注解)