Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机,诞生于2013年。Docker的设计宗旨:Build、Ship and Run Any、Anywhere,即经过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,处处运行”的目的。nginx
如上图所示,Docker的logo设计为蓝色鲸鱼,拖着许多集装箱。其中鲸鱼能够看做为宿主机,而集装箱能够理解为相互隔离的容器,每一个集装箱中都包含本身的应用程序。docker
Docker容器与传统虚拟的比较json
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力耗损 | 几乎无 | 损耗50%左右 |
性能 | 接近原生 | 弱于 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源限制 | 彻底隔离 |
Docker之因此拥有众多优点,跟操做系统虚拟化自身的特色是分不开的。传统虚拟机须要有额外的虚拟化管理程序和虚拟机操做系统层。而Docker容器是直接在操做系统层面之上实现的虚拟化。以下图centos
Docker的镜像是建立容器的基础,相似虚拟机的快照,能够理解为是一个面向Docker容器引擎的只读模板。安全
Docker容器是从镜像建立的运行实例,容器能够被启动、中止和删除。所建立的每个容器都是相互隔离的,互不可见的,能够保证平台的安全性。bash
Docker仓库是用来集中保存镜像的地方,当建立了本身的镜像以后,可使用push命令将它上传到公共仓库(Public)或者私有仓库(Private)。服务器
仓库注册服务器(Registry)是存放仓库的地方,其中包括了多个仓库,每一个仓库集中存放某一类镜像,而且使用不一样的标签(tag)来区分它们。目前最大的公共仓库是Docker Hub,其中存放了数量庞大的镜像供用户下载使用。架构
systemctl stop firewalld.service setenforce 0
yum -y install docker
yum安装好docker以后,就能够直接启动服务了。ide
systemctl start docker.service //开启服务 systemctl enable docker.service //设置开机自启动
安装好的Docker系统有两个程序:Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,管理着全部的容器。Docker客户端则扮演着Docker服务端的远程控制器,能够用来控制Docker的服务端进程。通常状况下,Docker服务端和客户端运行在一台机器上。工具
能够经过查看docker版本信息检查docker服务。
docker search nginx //搜索远端官方仓库中的共享nginx镜像
docker pull docker.io/nginx //获取上面搜索到的星级最高的镜像
从整个下载过程当中能够看出,镜像文件由若干层(Layer)组成,称之为AUFS(联合文件系统),是实现增量保存与更新的基础。
下载到本地的镜像文件保存在/var/lib/docker/image/overlay/文件下的repositories.json文件
docker images //查看下载到本地的全部镜像
图中各个参数的释义:
REPOSITORY: 镜像属于的仓库
TAG: 镜像的标签信息,标记同一个仓库中的不一样镜像
IMAGE ID: 镜像的惟一ID号,惟一标识了该镜像
CREATED: 镜像建立时间
VIRTUAL SIZE: 镜像大小
docker inspect c82521676580 //获取镜像惟一标识号为c82521676580的镜像的详细信息
docker tag docker.io/nginx nginx:test //本地镜像docker.io/nginx添加新的名称为nginx,新的标签为test docker images | grep test //过滤查看新添加的标签信息
使用docker rmi命令删除多余的镜像
删除镜像的方法有两种:1、使用镜像的标签删除镜像;2、使用镜像的ID删除镜像
命令格式:
docker rmi 仓库名称:标签 docker rmi 镜像ID号
把一台机器上的镜像迁移到另外一台机器上时,将镜像保存成本地文件的过程叫作存出镜像;将存出的镜像从A机器拷贝到B机器,须要在B机器上使用该镜像,能够将该导出文件导入到B机器的镜像库中,这个过程叫作载入镜像。
docker save -o nginx docker.io/nginx //存出镜像 docker load < nginx或者docker --inputnginx //导入镜像
当本地镜像越存越多的时候,就须要指定一个专门的地方存放镜像——仓库。目前比较方便的就是公共仓库,默认上传到Docker Hub官方仓库,可是这个方法必须先注册使用公共仓库的帐号。可使用docker login命令输入用户名、密码和邮箱来完成注册和登陆。登陆以后可使用“docker push 仓库名称:标签”进行上传镜像。
docker push li(帐号)/nginx:centos //上传镜像
docker create -it docker.io/nginx /bin/bash //建立容器 docker ps -a //查看全部容器 docker start 1ad3c22a5e36 //开启容器 docker stop 1ad3c22a5e36 //关闭容器 参数详解: -i:让容器的输入保持打开 -t:让Docker分配一个伪终端 /bin/bash : 表示启动容器时要运行的命令
docker exec -it 1ad3c22a5e36 /bin/bash //进入容器 参数详解: -i:表示让容器的输入保持打开 -t:表示让Docker分配一个伪终端
docker export 1ad3c22a5e36 > nginxtar //容器的导出 cat nginxtar | docker import - nginx:test //容器的导入
要删除正在运行的容器能够添加 -f 选项强制删除,建议先关闭容器在删除。
docker rm 1ad3c22a5e36 //删除时指定 ID
docker run -d jasonlix/docker-cobbler /usr/bin/bash -c "while true;do echo hello;done"
注意:docker run ,等于执行了docker create ,在执行docker start 。就是说:在使用docker run建立容器的时候 若是检查镜像,若没有镜像,会从公共仓库下载,而后在建立容器,运行容器。
docker run -itd --name c7 --network bridge --ip 172.16.10.135 centos:latest /bin/bash
下载资源 名字c7 网卡桥接 本地IP 镜像仓库centos 最新latest
docker run --cpu-quota 20000 centos(容器名) //cpu的使用率限定为20%
docker run --cpu-shares 1024 centos
限制CPU内核使用
docker run --cpuset-cpus 0,1 centos //容器centos独享 第1和第2个内核
docker run -m 512m centos //限制cents容器内存512M 对blkio限制
例如:限制容器的/dev/sda1 的写入ipos为1MB docker run --device-write-bps /dev/sda1:1mb centos