• 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
    

      

  • 相关阅读:
    查看mysql版本的四种方法及常用命令
    newInstance和new的区别(good)
    Citrix 服务器虚拟化之六 Xenserver虚拟机创建与快照
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 前缀表达式
    Java实现 蓝桥杯 算法训练 前缀表达式
  • 原文地址:https://www.cnblogs.com/37yan/p/6879063.html
Copyright © 2020-2023  润新知