zoukankan      html  css  js  c++  java
  • docker基础入门之二

    一、docker文件系统:

      linuxFS包括boot file system 和 root file system

      boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载;

      root file system(rootfs),包括类似/bin,/usr, /lib等目录,这些和kernel无关,这也是不同linux发行版本的差异所在;

             

             Linux  FS                  Linux FS in Docker 

      

    • 传统Linux启动时,将rootfs设置为readonly并检查完整性,然后设置成read-write
    • Docker在启动container的时候,也是把rootfs设置为readonly,然后通过aufs把一个read-write的文件系统挂载到rootfs之上,并且把下层文件系统设置成readonly,这样构建一个完整的操作系统;          

    二、Layer FS  

                     

    • 对于每层readonly的FS,在docker中成为image
    • 对于顶上read-write的FS,成为container
    • 对于readonly中内容的修改,采用的是COW的技术,把文件复制到read-write层并修改,实际用户看到的是当前container层中的文件,image中的文件是不受影响的;

      Image:

      • 除了base image之外,每一层image都有一个parent image
      • 没有parent image的镜像叫base image
      • 基于cow的技术,image部分是不会被修改的,因此container可以共享image的FS,提高了存储效率;      

       storage  dirver

      • 除了默认的aufs之外,docker通过对于storage的抽象,可以支持一些其他的storage driver; 例如:vfs, devicemapper, btrfs
      • 修改docker启动时候的参数设置,增加——storage-driver = {storage plugin}在配置文件中;       

      docker hub:

        docker官方提供的用来共享image的平台;

      镜像命名和版本管理:

      • base image是docker官方提供的基础镜像;
      • 普通镜像的命名规范{namespace}/{repository name}:{tag}
      • namespace是docker hub的用户名,实际是起namespace作用
      • repository,类似于github的项目,例如ubuntu, mysql等;
      • tag,表示版本信息,例如cp/mysql:5.5,  tag是可选的,默认值是latest      

       查找Image: docker search {repository name}    #默认是在docker hub上进心搜索

       获取Image: docker pull {image name}       #如果不指定tag的话,会把该image的所有tags都会download下来;

       上传Image:

          1、docker login      #登录到docker hub中

          2、把container通过docker commit的命令转化成一个Image

          3、通过docker tag来命名新生成的Image

          4、docker push到docker hub中;

    三、基本操作:

      运行container:

      • 运行一个container的本事就是开启一个具有独立namespace的进程
      • docker 通过run的命令来启动一个container
      • 运行一个container必须要指定一个image作为初始化的文件系统;  

       sudo docker run [OPTIONS]  IMAGE[:TAG]   [COMMANG][ARG....]

      Image:

        对于不存在的Image,Docker会自动会Registry里面下载对于的Image,然后再运行container 

      COMMAND:

        command标志的是container中实际运行的首进程;

        如果Image里面包含了CMD的指令,那么在启动container的时候,不需要指定command,否则会使用指向command来覆盖Image的cmd

      前台运行or后台运行:

      • 默认的Container是在前台运行的,会绑定command进程的STDIN、STDOUT、STDERR到console上;
      • 可以通过-d的选项让container运行在后台;  
      • 如果是前台运行,也可以通过指定-a {STDOUT、STDIN、STDERR}选择需要绑定的IO
      • 前后台切换;通过attach命令可以重新attache一个后台运行的container 

       在后台运行的情况下,run命令会返回一下UUID,唯一标识container

       可以通过docker ps来查看container的UUID和运行信息

       可以通过指定——name的方式来指定container的名字,名字必须唯一

      inspect:

        通过docker  inspect {Container ID}来获取container的更多的信息,包括网络、volume,实际在HOST上的进程ID等信息;

      Log:

        通过Logs命令可以看到Container中的Command所指向进程的STDOUT、STDERR数据;

      环境变量:

        通过-e参数,可以在运行container的时候添加环境变量;

      Network架构:

      • 在Host主机上的一个veth{id}的虚拟网卡和一个container里面的eth0网卡一一映射
      • Host上的bridge负责把数据流在不同的veth间转发,实现网络的IO
      • bridge(docker0)使用RFC1918私有网络,给每一个container分配ip

          

      网络设置:

      • 通过——net参数来修改container的网络设置,默认是bridge的方式;  --net host 
        • none表示关闭container的网络连接
        • host表示使用主机的网络栈,这个时候host主机不会创建veth虚拟网卡映射
        • container:{name|id}, 使用另外一个container的网络栈  

      端口映射:

        Docker通过采用端口映射的方式,允许把内部container的服务端口暴露到外部;

        使用-p参数可以指定需要暴露的container的内部端口,在不指定特定的Host的对应端口的情况下,docker会自动分配(49000-49900)在一个Host上的端口与其映射;

        使用-p参数,表示暴露所有在Image中通过expose指定的端口;

     volume绑定:

        通过-v参数,可以把Host上的一个目录绑定到container中,允许container对其进行读写;

        docker run -v /home/test:/vagrant  -t  ubuntu ls -al /vagrant

     容器间通信:

        通过link参数,把container的端口信息暴露到另一个container中,实现container之间的通信;

        docker run --link redis:db  -t ubuntu  sh -c "export"

       

  • 相关阅读:
    《软件需求十步走》读书笔记二
    《软件需求十步走》读书笔记一
    FJUTOJ-周赛2016-12-16
    FJUTOJ-周赛2016-11-25
    网络爬虫
    树链剖分讲解
    HDU 5266 pog loves szh III
    HDU 3518 Boring counting
    HDU 5929 Basic Data Structure
    HDU 1055 Color a Tree
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4830780.html
Copyright © 2011-2022 走看看