zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    ArcGIS为面要素生成邻接矩阵
    图片整理备份
    导出CityGML
    [ML] 数据处理
    微信公众号开发之access_token的全局共用
    DataReader转Dictionary数据类型之妙用
    标准化接口系统改造
    利用通用权限管理系统底层解决数据从不同库的导入导出问题
    通用权限管理系统中数据权限功能开发及使用说明
    常用API接口签名验证参考
  • 原文地址:https://www.cnblogs.com/37yan/p/6879063.html
Copyright © 2011-2022 走看看