Docker学习笔记

容器VS虚拟机

     

 

容器比虚拟机更节省硬盘空间,由于虚拟机需包含一个完整操做系统,而容器只包含应用和其依赖的库nginx

虚拟机须要模拟硬件行为对CPU和内存消耗至关大git

 

Docker简介

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的基本组成

Docker Image镜像:

容器的基石

层叠的只读文件系统

联合加载(union mount)

 

Docker Container 容器

经过镜像启动

启动和执行阶段

写时复制(copy on write)

 

Docker Registry 仓库

公用

私有

包含了多个镜像

Docker 相关技术介绍

Docker依赖Linux内核特性 Namespace和Cgroups

Namespace 命名空间

编程语言

    封装  - 代码分离

操做系统

     系统资源的隔离

     进程、网络、文件系统等

一、PID 进程隔离

二、NET 管理网络接口

三、IPC   管理跨进程通讯的访问

四、MNT 管理挂载点

五、UTS    隔离内核和版本标示

Cgroups 控制组

用来分配资源

来源于google 整合Linux Kernrl2.6.24@2007

功能:

资源限制

优先级设定

资源计量

资源控制

Docker 容器的能力

一、文件系统隔离:每一个容器都有本身的root文件系统

二、进程隔离:每一个容器都运行在本身的进程环境中

三、网络隔离:容器间的虚拟网络接口和IP地址都是分开的

四、资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每一个Docker容器

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 基本命令

$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
相关文章
相关标签/搜索