zoukankan      html  css  js  c++  java
  • Docker入门

    虚拟机与容器虚拟机化技术

    虚拟机可以在一个操作系统里面运行另一种操作系统。对于底层系统来说,虚拟机就是一个普通文件。虚拟机占用资源多,冗余步骤多,启动慢。

    为了解决虚拟机存在的缺点,Linux发展出了虚拟化技术,Linux容器。Linux容器不是模拟一个完整的操作系统,而是对进行进行隔离。容器不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。

    容器没有自己的内核,也没有进行硬件虚拟。因此要比传统虚拟机更加轻便。

    每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会互相影响,能区分计算资源

    Docker三要素

    镜像(image)

    镜像就是一个只读的模板,用来创建Docker容器,一个镜像可以创建多个容器

    容器(container)

    独立运行的一个或一组应用。容器是用镜像创建的运行实例。

    它可以被启动、开始、停止、删除。每个容器相互隔离。

    可以将容器看做是一个简易版的Linux环境和运行在其中的应用程序。

    容器的定义和镜像几乎一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

    仓库(repository)

    存放镜像的地方。国内仓库有阿里云和网易云。

    Docker运行原理

    Docker是一个Client-Serve结构的系统,Docker守护进行运行在主机上,然后通过Socket连接从客户端访问,守护进行从客户端接收命令并管理运行在主机上的容器。

    Docker容器 虚拟机
    操作系统 与宿主机共享OS 宿主机OS上运行虚拟机OS
    存储大小 镜像小,便于存储与传输 镜像庞大
    运行性能 几乎无额外性能损失 操作系统额外的CPU、内存消耗
    移植性 轻便、灵活、适应与Linux 笨重,与虚拟化技术耦合度高
    硬件亲和性 面向软件开发者 面向硬件运维者

    Docker命令

    帮助指令docker --help

    镜像命令

    • docker images:列出本地镜像。参数:
      • -q列出镜像ID
      • -a列出所有镜像(含中间映像层)
      • --digests:显示镜像的摘要信息
      • --no-trunc:显示完整镜像信息
    • docker search 镜像名:搜索镜像。参数:
      • -s 10:列出收藏数不小于指定值的镜像
      • --no-trunc:显示完整的镜像描述
      • --automated:只列出automate build类型的镜像
    • docker pull 镜像名:Tag:下载镜像,默认Tag为latest
    • docker rmi 镜像名1:Tag 镜像名2:Tag:删除镜像,Tag默认为latest。参数:
      • -f:强制删除
      • $():组合命令,例如,删除所有镜像docker rmi -f ${docker images -qa}

    容器命令

    • docker run [OPTIONS] 镜像名 [COMMAND] [ARG...]:新建容器并运行
      • OPTIONS说明:
        • --name=容器新名字:为容器指定一个名称
        • -d:后台运行容器,并返回容器ID,也即启动守护式容器
        • -i:以交互模式运行容器,通常与-t同时使用
        • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
        • -P:随机端口映射
        • -p:指定端口映射,有以下几种形式
          • ip:hostPort:containerPort
          • ip::containerPort
          • hostPort:containerPort
          • containerPort
    • docker ps:列出当前正在运行的容器。参数:
      • -a:列出当前正在运行和+历史上运行过的
      • -l:显示最近创建的容器
      • -n num:显示最近num个创建的容器
      • -q:静默模式,只显示容器编号
      • --no-trunc:不截断输出
    • docker start/stop/restart/kill 容器ID或容器名:启动、停止、重启、强制停止容器
    • docker rm 容器ID或容器名:删除容器,参数-f强制删除。
      • 一次性删除多个容器
        • docker rm -f $(docker ps -aq)
        • docker ps -aq | xargs docker rm

    重点

    • 启动守护式容器:docker run -d 镜像名。Docker容器运行的命令如果不是那些一直挂起的命令,会自动退出。例如后台启动centos,使用docker ps -a查看会发现容器已经退出,这样的容器启动后,会立即自杀。最佳解决方案是,将要运行的程序以前台进程形式运行
    • 查看容器日志:docker logs 容器ID。参数:
      • -t:加入时间戳
      • -f:跟随最新的日志打印
      • -tail num:显示最后多少条
    • 查看容器内运行的进程:docker top 容器ID
    • 查看容器内部细节:docker inspect 容器ID
    • 进入正在运行的容器并以命令行交互:
      • docker exec -it 容器ID bashShell
      • 重新进入docker attach 容器ID
      • 区别:attach直接进入容器启动命令的终端,不会启动新的进程。exec是在容器中打开新的终端,并且可以启动新的进程。docker exec -it 容器ID 命令:不进入容器直接返回结果;docker exec -it 容器ID /bin/bash进入容器
    • 从容器内拷贝文件到主机上:docker cp 容器ID:容器内文件路径 主机路径

    镜像原理

    UnionFS

    UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为以提交来一层层的叠加。同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行集成,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

    特性:一次同时加载多个文件系统,但是外面看起来,只能看淡一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

    镜像加载原理

    docker 镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

    bootfs(boot file system)主要包含bootloadder和kernel,bootloader主要是引导加载kernel,linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

    rootfs(root file system),在bootfs之上,包含典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等。

    镜像是包括了其运行环境的,例如tomcat镜像,要有kernel内核,centos系统,java8环境再加上tomcat共同组成一个镜像。

    Docker镜像采用分层结构,可以将每一层资源共享。

    特点:Docker镜像都是可读的,当容器启动时,一个新的可写层加载到镜像的顶部。这一层通常被称作容器层,容器层之下的都叫镜像层。

    镜像commit

    与git相通,docker commit提交容器副本使之成为一个新的镜像

    docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名:[Tag]

  • 相关阅读:
    fullCalendar改造计划之带农历节气节假日的万年历(转)
    Linked List Cycle
    Remove Nth Node From End of List
    Binary Tree Inorder Traversal
    Unique Binary Search Trees
    Binary Tree Level Order Traversal
    Binary Tree Level Order Traversal II
    Plus One
    Remove Duplicates from Sorted List
    Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/ylcc-zyq/p/13275644.html
Copyright © 2011-2022 走看看