一、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"

   

docker基础入门之二的更多相关文章

  1. PHP基础入门(二)【PHP函数基础】

    PHP基础入门(二)--函数基础 了解 PHP基础入门详解(一) 后,给大家分享一下PHP的函数基础. 这部分主要讲的就是: 函数的声明与使用.PHP中变量的作用域.静态变量.函数的参数传递.变量函数 ...

  2. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  3. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  4. MyBatis基础入门《二》Select查询

    MyBatis基础入门<二>Select查询 使用MySQL数据库,创建表: SET NAMES utf8mb4; ; -- ---------------------------- -- ...

  5. Docker快速入门(二)

    上篇文章<Docker快速入门(一)>介绍了docker的基本概念和image的相关操作,本篇将进一步介绍image,容器和Dockerfile. 1 image文件 (1)Docker ...

  6. Docker基础入门

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  7. 小白学 Python 爬虫(4):前置准备(三)Docker基础入门

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  9. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

随机推荐

  1. verilog中=和<=的区别

    一般情况下使用<=,组合逻辑使用=赋值,时序逻辑使用<=赋值: 举个例子:初始化m=1,n=2,p=3:分别执行以下语句 1.begin m=n:n=p:p=m: end 2.begin ...

  2. 数组初始化(c, c++, gcc, g++)

    这是很基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定曾经了解过,但现在,我不敢确定,由此可见纪录的重要性,这世界没有什么捷径,找对方向,然后不停重复.所以从今天开始,我会比较详细的纪录这 ...

  3. 使用MySQL处理百万级以上数据时,不得不知道的几个常识

    最近一段时间参与的项目要操作百万级数据量的数据,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍.之前数据量小的时候,查询语句的好坏不会对执行时间有什么明显的 ...

  4. delphi 线程池基础 TSimplePool

    1. TSimpleThread 2. TSimpleList 3. 以1,2构成 TSimplePool 用法 先定义: TDoSomeThingThread=class(TSimpleThread ...

  5. SendMessage基本认识

    SendMessage基本认识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数PostMessage不同,将一个消息寄送到一个线 ...

  6. uva 10129 poj 1386 hdu 1116 zoj 2016 play on words

    //本来是想练一下欧拉回路的,结果紫书上那题是大水题!!!!! 题意:给出n个单词,是否可以把单词排列成每个单词的第一个字母和上一个单词的最后一个字母相同 解:欧拉通路存在=底图联通+初度!=入度的点 ...

  7. 限制div高度当内容多了溢出时显示滚动条

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"content= ...

  8. mysql 权限控制具体解释

    概述 mysql权限控制在不同的上下文和不同的操作水平上都能够进行控制,他们包括例如以下几个 ** 管理权限能够同意用户管理mysql server的操作. 这些权限控制是全局的,不是针对某个特定的数 ...

  9. 解决.net中截取字符串的汉字与数字还有静态扩展方法

      转载 http://blog.163.com/cn_dreamgo/blog/static/52679452200961033212407/ 这两天在C#编程中应用到C#代码与C的代码信息交互,但 ...

  10. 利用Socket实现的两个程序的通信

    写的也很简单,自己觉得挺有意思了 程序如图 主要代码 public class Message { Form1 mainfrom = null; public Message() { } public ...