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