zoukankan      html  css  js  c++  java
  • Docker的学习

    一  Docker 的介绍和安装

    二 镜像管理

    三 容器管理

    四 管理应用程序数据

    五 使用Docker知识部署简易的LNMP站点

    六 网络管理

    七 Dockerfile

    八 企业级镜像仓库Harbor

    九 图形化界面管理

    十 构建容器监控系统

    一 Docker 的介绍和安装

    1.1 Docker是什么

    1.2 Docker的体系结构

    1.3 内部组件

    1.4 虚拟机和容器的区别

    1.5 Docker的应用场景

    1.6 Linux 安装Docker

    1. 1 Docker是什么:

    Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup, namespace, Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。Docker早起版本实现是基于LXC,并进一步对其封装,包括文件系统、网络互联、镜像管理等方面,极大简化了容器管理。从0.7版本以后开始去除LXC,转为自行研发的libcontainer,从1.11版本开始,进一步演进为使用runC和containerd。Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序,程序之间相互隔离。

    它是通过内核虚拟化技术来提供容器的资源的隔离和安全保证等等,因为docker是通过操作系统层的虚拟化实现隔离,所以docker容器在运行的时候是不需要额外的虚拟化管理程序,他是内核级别的虚拟化,可以实现更加高效的性能,同事对资源的额外的需求很低,他的最本质的特征,docker是通过隔离来进行创建容器。

      

    1. 2 Docker的体系结构:

    我们通过Docker 客户端发送指令,通过Docker引擎来分发指令,是下载镜像或者是创建容器,如果本地有镜像直接引用,如果本地没有就从仓库拉取,通知Containerd 创建容器,Containerd在收到Engine的请求之后会启动一个shim,shim 会让runc提供一个容器的运行环境,runC就会去挂载文件系统,最后runC就会在文件系统启动一个进程。

    Containerd:是一个简单的守护进程,使用runC管理容器。向Docker Engine提供接口
    Shim:只负责管理一个容器。
    runC:是一个轻量级的工具,只用来运行容器。

     

    1.  3 Docker 的内部组件

    Namespace

      命名空间,Linux内核提供的一种对进程资源隔离的一种机制,例如进程、网络、挂载点等资源,把他们封装在一个名称空间中,只能看到本容器内的资源

    CGroups

      控制组,LInux内核提供的一种限制进程资源的机制:例如CPU、内存等资源

      我们可以在宿主机上通过 ls /sys/fs/cgroup 看到我们队哪些资源进行了限制,限制的资源有   blkio  cpu  cpuacct  cpu,cpuacct  cpuset  devices  freezer  hugetlb  memory  net_cls  net_cls,net_prio  net_prio  perf_event  pids  systemd

    UnionFS:

      联合文件系统,支持将不同位置的目录挂载到同一个虚拟文件系统,形成一种分层的模型

    1.  4 虚拟机和容器的区别

     以KVM为例和Docker相比

    启动时间:

      Docker 秒级启动,KVM分钟级别启动

    轻量级:

      容器镜像大小通常以M为单位,虚拟机以G为单位

      容器资源占用小,要比虚拟机部署更加的快速

     性能:

      资源共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机

      虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好

    安全性:

      由于共享宿主机内核,只是进程级隔阂,因此隔离性和稳定性不如虚拟机,容器具有一定权限范根宿主机内核,存在一定安全隐患

     使用要求:
      KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持

      容器共享宿主主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术

    应用场景:(http://blog.51cto.com/lizhenliang/1978081)

      节省橡胶木环境部署时间

        单项目打包

        整套项目打包

        新开源技术试用

      环境一致性

      持续集成

      微服务

      弹性伸缩

    Linux 安装Docker

    就我的环境看一下文档的安装方式:
    https://docs.docker.com/install/linux/docker-ce/centos/

    我们这里安装ce 版本

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    sudo yum install docker-ce

    这里我们现在要是启动的话,我们用的仓库源的地址就是官方的,可能用起来不太方便,我们可以给企改成国内的,然后在启动

    systemctl start docker

    卸载的方式:

    yum remove docker-ce

    rm -rf /var/lib/docker

     博客总结来源于:http://edu.51cto.com/course/10659.html

  • 相关阅读:
    [转]使用@Test 也可以从spring容器中获取依赖注入
    idea/ecipse中使用maven集成springmvc相关jar包时候,出错:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    mongodb 权限设置--用户名、密码、端口
    java中import static和import的区别【转】
    python 数字的四舍五入的问题
    数据库——索引(面试、笔试必会)
    Python 中的那些坑总结——持续更新
    python2和python3的区别——持续更新
    常用的排序算法的时间复杂度和空间复杂度
    Libpacp 深度剖析
  • 原文地址:https://www.cnblogs.com/smail-bao/p/9605265.html
Copyright © 2011-2022 走看看