Docker学习笔记

容器VS虚拟机

     

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

虚拟机需要模拟硬件行为对CPU和内存消耗相当大

Docker简介

Docker是把开发的应用程序自动部署到容器的开源引擎,使用go语言编写

Github地址:https://github.com/docker/docker

容器是一种虚拟化的方案

与虚拟机不同的是虚拟机是虚拟运行在物理硬件之上,而容器直接运行在操作系统之上

因此容器虚拟化也称之为操作系统虚拟化

容器只能运行与宿主操作系统相同或相似内核的操作系统,依赖Linux内核的Namespace和Cgroups(Control Group)特性

Docker 的目标是:

1、提供简单轻量的建模方式

2、职责的逻辑分离

3、快速高效的开发生命周期

Docker的使用场景:

1、创建隔离的允许环境

2、搭建测试环境

3、使用Dockerk开发、测试、部署服务

4、构建多用户的平台即服务(PaaS)基础设施

5、提供软件即服务(SaaS)应用程序

6、高性能、超大规模的宿主机部署

Docker的基本组成

Docker Image镜像:

容器的基石

层叠的只读文件系统

联合加载(union mount)

Docker Container 容器

通过镜像启动

启动和执行阶段

写时复制(copy on write)

Docker Registry 仓库

公用

私有

包含了多个镜像

Docker 相关技术介绍

Docker依赖Linux内核特性 Namespace和Cgroups

Namespace 命名空间

编程语言

    封装  - 代码分离

操作系统

     系统资源的隔离

     进程、网络、文件系统等

1、PID 进程隔离

2、NET 管理网络接口

3、IPC   管理跨进程通信的访问

4、MNT 管理挂载点

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

Cgroups 控制组

用来分配资源

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

功能:

资源限制

优先级设定

资源计量

资源控制

Docker 容器的能力

1、文件系统隔离:每个容器都有自己的root文件系统

2、进程隔离:每个容器都运行在自己的进程环境中

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

4、资源隔离和分组:使用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

  

原文地址:https://www.cnblogs.com/37yan/p/6879063.html