容器比虚拟机更节省硬盘空间,由于虚拟机需包含一个完整操做系统,而容器只包含应用和其依赖的库nginx
虚拟机须要模拟硬件行为对CPU和内存消耗至关大git
Docker是把开发的应用程序自动部署到容器的开源引擎,使用go语言编写github
Github地址:https://github.com/docker/dockerweb
容器是一种虚拟化的方案docker
与虚拟机不一样的是虚拟机是虚拟运行在物理硬件之上,而容器直接运行在操做系统之上编程
所以容器虚拟化也称之为操做系统虚拟化ubuntu
容器只能运行与宿主操做系统相同或类似内核的操做系统,依赖Linux内核的Namespace和Cgroups(Control Group)特性windows
Docker 的目标是:centos
一、提供简单轻量的建模方式bash
二、职责的逻辑分离
三、快速高效的开发生命周期
Docker的使用场景:
一、建立隔离的容许环境
二、搭建测试环境
三、使用Dockerk开发、测试、部署服务
四、构建多用户的平台即服务(PaaS)基础设施
五、提供软件即服务(SaaS)应用程序
六、高性能、超大规模的宿主机部署
Docker Image镜像:
容器的基石
层叠的只读文件系统
联合加载(union mount)
Docker Container 容器
经过镜像启动
启动和执行阶段
写时复制(copy on write)
Docker Registry 仓库
公用
私有
包含了多个镜像
Docker依赖Linux内核特性 Namespace和Cgroups
Namespace 命名空间
编程语言
封装 - 代码分离
操做系统
系统资源的隔离
进程、网络、文件系统等
一、PID 进程隔离
二、NET 管理网络接口
三、IPC 管理跨进程通讯的访问
四、MNT 管理挂载点
五、UTS 隔离内核和版本标示
Cgroups 控制组
用来分配资源
来源于google 整合Linux Kernrl2.6.24@2007
功能:
资源限制
优先级设定
资源计量
资源控制
Docker 容器的能力
一、文件系统隔离:每一个容器都有本身的root文件系统
二、进程隔离:每一个容器都运行在本身的进程环境中
三、网络隔离:容器间的虚拟网络接口和IP地址都是分开的
四、资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每一个Docker容器
支持ubuntu centos os x windows
官方安装文档 https://docs.docker.com/
由于国内网络访问Docker镜像源速度太慢 这里采用阿里云的镜像源加速安装
安装请访问https://cr.console.aliyun.com/(须要有阿里云帐号)
windows
微软在windows 2016 中原生支持了Docker
https://msdn.microsoft.com/zh-cn/virtualization/windowscontainers/containers_welcome
其余版本windows 可使用boot2docker 建议windows7以上
boot2docker 项目地址
https://github.com/boot2docker/boot2docker
$docker info #查看Docker信息 $docker pull ubuntu #从仓库下载ubuntu镜像 $docker run -i -t ubuntu /bin/bash #建立一个交互式的容器 $docker run --name [容器名] -i -t ubuntu /bin/bash #定义容器名 $docker run --name [容器名] -d ubuntu /bin/bash #建立一个守护方式容器 $docker attach [容器名] #进入在后台运行的容器 $docker ps #查看正在运行的容器 $docker ps -a #查看全部容器 $docker inspect [容器名] #查看容器信息 $docker start -i [容器名] #启动容器 $docker [stop][kill] [容器名] #sotp是发送结束信号 kill是强制关闭 $docker rm [容器名] #删除容器 $docker rmi [镜像名] #删除镜像 $docker rmi ubuntu $(docker images -q) #删除ubuntu镜像的全部标签 $docker images #查看本地镜像 -a 查看所有镜像 -f 过滤条件 --no-trunc 不截断ID -q 只显示镜像惟一ID $Ctrl+P Ctrl+Q #退出交互式容器的bash 容器在后台运行 $docker logs -f -t --tail [容器名] #查看容器日志 -f跟踪日志变化 -t加上时间戳 --tail 指定日志返回结尾的数量 $docker top [容器名] #查看运行中容器的进程 $docker exec -d -i -t [容器名] /usr/sbin/service nginx start #在运行中的容器运行一个命令 $docker run -p [80] [8080:80][0.0.0.0:80][0.0.0.0:8080:80] -i -t ubuntub /bin/bash #映射端口 不指定宿主机端口宿主机会随机映射端口
制做镜像
$docker commit [容器名] -a -m -p [仓库名]:[标签] #使用commit构建镜像 a 指定做者 -m 记录镜像构建的信息 -p 不暂停正在运行的容器
使用Dockerfile文件制做镜像
$docker bulid -t="ubuntu/web" . #须要在dockerfile文件目录下执行
dockerfile文件指令
FORM <imgage> <imgage>:<tar> #必须是已经存在的镜像 MAINTAINER <做者信息> #做者信息 RUN /bin/sh -c 命令 #sell模式 RUN命令是镜像建立过程当中启动 EXPOSE 80 #告诉docker 容器开放的端口 CMD