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

原文地址:http://blog.51cto.com/13643643/2156982

时间: 2024-10-10 22:54:43

Docker的安装、镜像操作、容器操作及资源控制的相关文章

Docker基础命令详解——镜像及容器操作

Docker基础命令详解--镜像及容器操作 前言 ? 上篇文章介绍了有关Docker的基础与Linux下docker的安装,本文主要讲解安装docker后的基础使用方法以及命令的介绍,主要是docker镜像操作及容器操作命令. ? 当然,docker的相关命令非常多,可以使用docker help命令查看对应目录以及相关提示命令. Docker镜像操作命令 [[email protected] ~]# which docker /usr/bin/docker 1.镜像搜索:docker sear

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,

Docker架构、镜像及容器的基本操作

Docker架构.镜像及容器的基本操作 前言引导 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机,诞生于2013年.Docker的设计宗旨:Build.Ship and Run Any.Anywhere,即通过对应用组件的封装.发布.部署.运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的. Docker概述 如上图所示,Docker的logo设计为蓝色鲸鱼,拖着许多集装箱.其中鲸鱼可以看作为宿主机,而集装箱可以理解为相互隔离的容器,每个集装

Docker架构、镜像和容器

一.Docker概述 Docker是在Linux容器里面运行的开源工具,是一种轻量级的虚拟机.其设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应组件的封装.发布.部署.运行等生命周期的管理,达到组件级别的"一次封装,到处运行"的目的.这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统.Docker的三大核心概念:镜像.容器.仓库,安装Docker以及围绕镜像和容器的具体操作. 二.相比传统虚拟机Dokcer的优势 1.D

docker安装 镜像和容器的操作

目录 1 docker 介绍 3 centos安装docker 2 容器和镜像 3 加速配置 4 镜像操作 5 容器操作 1 docker 介绍 # 1 虚拟化--->虚拟机,硬件虚拟化 # 2 docker:centos系统-->大约90m # 3 开源项目,诞生于2013---->17年以后-->两年多的时间 # 4 基于go语言实现的--->docker ce:免费的 docker ee:收费 # 5 轻量级的操作系统虚拟化解决方案 # 6 Docker 的基础是 Li

docker学习笔记2:容器操作

一.列出主机上已经创建的容器 docker ps -a 二.创建交互式容器 命令: docker run -i -t ubuntu /bin/bash 其中-i -t 表示创建一个提供交互式shell的容器. ubuntu是镜像名,如果本地不存在,回到仓库中下载. /bin/bash 是指定容器创建后立即执行的命令. 注意:每个容器都有一个唯一的ID,作为容器的标识.每个容器也有个唯一的名称,在用docker run命令创建时可以通过 --name 名称 来指定,如果不指定,系统会自动产生一个名

docker一: 镜像与容器管理

Docker的优势: 1.启动非常快,秒级实现. 2.资源利用率高,在机器中以进程的方式存在,一台机器可以跑上百个docker容器. 3.创建和配置后可以在任意地方运行docker,只需将其上传到docker仓库,用到时拉下来就可以 4.易迁移,平台依赖性不强. Docker的主要概念: 1.镜像:只读模板,类似于安装系统用到的iso文件,对于镜像我们可以自定义,比如在一台机器上安装好lnmp环境,然后打包成为一个镜像,那么后期只需要从仓库中把这个镜像拉下来就可以直接使用lnmp环境了,非常方便

详解Docker架构、镜像、容器及资源限制

Docker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口. ? Docker核心 1.镜像(Image):类似与虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统. 2.容器(Container):类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用

Docker中的镜像与容器

docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository): 容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象. docker 的镜像概念类似虚拟机的镜像.是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器.(  docker create <image -id > :为指定的镜像添加一个可读写层,构成一个新的容器:) 例如:一个镜像可以包含一

DOCKER 01:镜像和容器的基础命令使用

本文主要谈谈 docker 命令怎么使用的问题! 关于镜像的操作命令 已经知道,容器是镜像的运行的实例,所以想要运行一个容器,事先得拥有这个容器的镜像. 1. 使用页面搜索镜像: 在默认的注册点 docker hub,不管是官方还是非官方都上传了很多镜像: https://hub.docker.com 可以通过搜索指定的镜像名称找到对象的镜像仓库,如 nginx: 这里只是截图的一部分,可以看到第一个和后面的两个有区别,后面两个名字中间都有斜线. 这个斜线前面的是用户名,比如第二个,前面是 ng