一、Docker概述

Docker是基于Go语言实现的云开源项目,诞生于2013年初,目前主流的Linux操作系统已支持Docker,如Redhat RHEL6.5/CentOS6.5、Ubuntu 14.04以上的操作系统,docker的主要目标为:“Build、Ship and Run Any App,Anywhere”,即通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。

Docker引擎的基础是Linux容器技术(LXC)。最早的容器技术可以追溯到1982年Unix系列操作系统的chroot工具(目前主流Linux操作系统仍然支持),相关介绍可以看这篇博文:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/,在了解了chroot的大概之后,我们来看具体的LXC的内核实现。首先,Linux内核提供了基于namespace的六种隔离的系统调用,如下表:

Namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWIPC 信号量、消息队列、共享内存
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络设备、网络栈、端口等等
Mount CLONE_NEWNS 挂载点(文件系统)
User CLONE_NEWUSER 用户和用户组

这样,通过上面的基于namespace的六种资源隔离, 就实现了一个轻量级虚拟化容器服务。详细介绍参考这篇博客,写的很深入:http://www.infoq.com/cn/articles/docker-kernel-knowledge-namespace-resource-isolation?utm_source=tuicool

其次,运用namespace,LXC通过系统调用构建了一个相对隔离的shell环境,这时可以看成一个简单的“容器”,那么如何管理相关的资源呢,这里引入了cgroups的概念:cgroups是Linux内核提供的一种机制,这种机制可以根据特定的行为,把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。通俗的来说,cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石。详细参考这篇博客:http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation/

以上两篇博客,有时间的话还要结合linux内核架构相关书籍进行研读。

Docker与VM比较,如下表: (摘自《Docker技术入门与实践》)

这里说明一下:Docker由于是基于LXC技术的,接近原生OS,所以它的运行自身几乎不产生额外的开销,而VM在运行OS时,VM自身会产生一定的开销。

我们也可以把思维发散一下,docker不仅仅可以和VM对比,它其实也可以胜任rpm的部分功能、openstack的部分功能、saltstack的部分功能,与它们做对比可能会更好的理解docker。

二、Docker的C/S模式

docker是C/S的应用,如下图:

Remote API使用RESTFUL API的风格,与程序语言交互。

docker client与Server之间有多种连接方式:

1.unix:///var/run/docker.sock  (通过Unix套接字)

2.tcp://host:port        (通过tcp方式)

3.fd://sockfd             (通过文件描述符方式)

如果docker client希望通过远程访问docker daemon,需要加启动参数 -H

centos中,启动配置文件在  /etc/sysconfig/docker

----->关于docker守护进程的配置和操作:

启动daemon服务:service docker start   相当于   systemctl start docker    相当于    systemctl start docker.service

三、常用命令

目前接触docker较少,后面遇到会陆续往里面添加:

docker部署:
    centos7环境下:
        yum install -y docker
        systemctl start docker
        docker pull centos 获取镜像
        docker search 搜索镜像

docker常用命令:
    docker images   查看docker镜像
    docker save centos > /opt/centos.tar.gz   导出一个镜像
    docker load < /opt/centos.tar.gz   导入一个镜像
    每个镜像都有一个唯一的image-id
    docker rmi [唯一的image-id]   删除一个docker镜像
    docker run --help       查看帮助

docker创建并启动一个容器:
     docker run -d centos /bin/echo "hello webber"      centos为镜像的名称;-d选项 以后台方式运行容器
docker ps -a    查看所有容器的运行状态
docker start [容器id]     启动在ps -a中的一个停止的容器
docker run --name mydocker -t -i centos /bin/bash      -t分配一个终端,-i让容器的标准IO保持打开
docker attach [容器id]      进入容器中(不推荐)
nsenter -t [容器中进程pid] -u -i -n -p    也可以进入容器中(推荐方式) (没有的话 yum install util-linux)
注意:容器注重单进程的理念,我们应该尽量把每个进程分别封装在不同的容器中,这样才能体现出隔离的优势。

docker inspect [容器id]     查看Docker的底层信息
例如获取容器中进程的pid:
     docker inspect --format "{{.State.Pid}}" [容器id]
docker rm [容器id]     删除一个容器 加 -f选项 可以删除一个正在运行的容器
docker run --rm centos /bin/echo "hello"      当容器停止后自动删除容器,测试时常用
docker kill $(docker ps -a -q)      杀死所有正在运行的容器

docker网络相关:

      docker run -P 随机端口映射
          docker run -p hostPort:containPort
              eg: docker run -d -p 81:80 nginx   把容器内部的80端口映射到宿主机上的81端口上。

docker存储相关:

1.挂载数据卷  -v src:dst
            docker run -it -v /opt:/opt centos 物理机的/opt目录下的文件映射到容器的/opt目录中。
         2.数据卷容器   --volumes-from
            docker run -d --name nfs -v /data centos
            docker run -it --name test1 --volumes-from nfs centos nfs  把物理机和容器做了映射,之后,当我们创建了多个容器之后,多个容器可以同时去test1容器中去取数据,达到数据共享的目的。

docker学习笔记(1)概述、原理学习、常用命令的更多相关文章

  1. Docker基础修炼2--Docker镜像原理及常用命令

    通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...

  2. Linux学习笔记(一):常用命令

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  3. Linux学习笔记(一):常用命令(1)

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  4. Linux学习笔记(二)Linux常用命令:权限、目录操作以及常见目录作用

    一.Linux命令格式 命令 [选项] [参数] 注:(1)简化选项和完整选项 -a --all (2)当有多个选项是可以写在一起 -l -a 可以写为-la 二.权限 -rw-r--r--.&quo ...

  5. Linux学习笔记 - Linux快捷操作及常用命令

    一.快捷键 剪切光标前的内容 Ctrl + u 剪切光标至行末的内容 Ctrl + k 粘贴 Ctrl + u 或 Ctrl +k 的内容 Ctrl + y 移动光标到行末 Ctrl + e 移动光标 ...

  6. Linux学习笔记(一):常用命令(2)

    3.帮助命令 A,帮助命令:man    B,其他帮助命令 3.1,格式:man [命令名] 查看命令拥有哪个级别的帮助:                                       ...

  7. Linux学习笔记(六)Linux常用命令:关机、重启以及系统运行级别

    一.shutdown命令 shutdown [选项] [时间] 常用选项 -c 取消前一个关机命令 -h 关机 -r 重启 shutdown命令关机或重启会保存当前系统正在使用的资源,因此关机或重启最 ...

  8. Linux学习笔记(9)Linux常用命令之关机重启命令

    (1)shutdown shutdown命令用于关机重启,其语法格式为: shutdown [选项] 时间 其中,-c选项表示取消前一个设置的shutdown命令,-h命令表示关机,-r命令表示重启 ...

  9. Linux学习笔记(8)Linux常用命令之网络命令

    (1)write write命令用于给指定用户发信息,以Ctrl+D保存结束,所在路径为/usr/bin/write,其语法格式为: write [用户名] 注:只能给在线用户发送. 例:新建ws用户 ...

  10. Linux学习笔记(7)Linux常用命令之压缩解压命令

    (1)gzip gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件] 压缩后的文件格式为.gz. 例:将/etc目录下的services文 ...

随机推荐

  1. .Net——实现IConfigurationSectionHandler接口定义处理程序处理自己定义节点

    除了使用.net里面提供的内置处理程序来处理我们的自己定义节点外,我们还能够通过多种方法,来自己定义处理类处理我们的自己定义节点,本文主要介绍通过实现IConfigurationSectionHand ...

  2. HTML--百度百科

    超文本标记语言,标准通用标记语言下的一个应用. “超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 超文本标记语言的结构包括“头”部分(英语:Head).和“主体”部分(英语:Bo ...

  3. IOS 代理模式 DELEGATE

    代理模式:将我(类或结构体)需要来完成的工作交给另一个具备我所要求的能力的人(实现协议的对象)来执行 协议:具备哪些能力 例子:我要去买火车票,没时间买,委托黄牛买票 协议:买票 //: Playgr ...

  4. JSON——JavaScript 中的使用

    由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准.几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解 ...

  5. LoadRunner+Java接口性能测试

    想必各位小伙伴们会对LR还可以调用java感到好奇,之前我也这么一直认为LR只支持C语言.其实LR脚本支持的语言有:C.Java.Visual Basic.VbScript.JavaScript,只不 ...

  6. 利用pandas进行数据分析之一:pandas数据结构Series

    Series是一种类似于一维数组的对象,又一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即是索引)组成. 可以将Series看成是一个定长的有序字段,因为它是索引值到数据值的一个映射. ...

  7. PHP多线程处理问题

    近日工作中涉及到项目同时处理多个线程问题时,在网上找到了PHP的pthreads扩展以及curl_multi_init函数,具体如下: 一 .windows下安装php真正的多线程扩展pthreads ...

  8. spring学习笔记(六)

    1.配置环绕通知 需要实现的接口为  MethodInterceptor   代码举例 package com.huawei.aop; import org.aopalliance.intercept ...

  9. 从零開始学Java之线程具体解释(1):原理、创建

    Java线程:概念与原理 一.操作系统中线程和进程的概念 如今的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中执行的应用程序.每一个进程都有自己独立的一块内存空间.一个进 ...

  10. CF 316div2 E.Pig and Palindromes

    E. Pig and Palindromes Peppa the Pig was walking and walked into the forest. What a strange coincide ...