zoukankan      html  css  js  c++  java
  • Docker入门与实践

    Docker 背景

    • Docker是基于容器技术的轻量级虚拟化解决方案
    • Docker是容器引擎,把Linux的cgroup、 namespace等容器底层技术进行封装抽象(后面会介绍此两种技术),为用户提供了创建和管理容器的便捷界面(包括命令行和API)
    • Docker 是一个开源项目,诞生于 2013 年初,基于Google 公司推出的 Go 语言实现
    • 微软,红帽Linux, IBM, Oracle等主流IT厂商已经在自己的产品里增加对Docker的支持。
    • Google 每周启动超过20亿个容器进行业务服务,于上个世纪90年代已经开始大规模使用容器技术

    发展示例图

    传统的开发部署流程

    传统VM虚拟化环境存在的问题  

    1. 虚拟机资源利用效率低
    2. 单物理机多应用无法有效隔离(进程空间, cpu
    资源,磁盘)
    3. 运维部署不便,环境依赖性强
    4. 测试、版本管理复杂
    5. 迁移成本高
    6. 传统虚拟机,空间占用大,启动慢,管理复杂


    Docker - 轻量级虚拟化容器优点

    1. 秒级启动和停止,空间资源占用极少
    2. 实现进程级别的隔离
    3. 可在普通服务器上建立上百个docker实例
    4. 加快开发测试部署的速度
    5. 简化版本管理

    开发和运维的有效隔离

    一个IT系统应该包含如下几个层次:
    • 应用程序
    • 运行时平台(bin/framework/lib)
    • 操作系统
    • 硬件(基础设施)
    开发人员的主要工作是应用程序的编码、构建、测试和发布,涉及应用
    程序和运行时平台这两层。
    而运维人员的工作则涉及从硬件、操作系统到运行时平台的安装、配置、
    运行监控、升级和优化等工作。
    Docker提供了一种运行时环境,隔离了上层应用于下层操作系统和硬件的
    关联,使得术业有专攻。

    Docker之helloworld

    1. 安装Docker
        在ubuntu 下 执行一条命令即可安装
         apt-get install docker-io

    2. 运行
        docker run busybox /bin/echo "HelloWorld"

    Docker 背后干了什么

    • 我们创建了一个容器
    • 它拥有:
        文件系统(基于busybox镜像)
        网络栈(具有私有网络服务)
        进程空间
    • 自动安装
        docker会自动检查本地是否有busybox镜像(一个测试版本的linux系统),如果没有则自动下载并启动
    • 通过调用宿主机上的bash启动进程,并打印Helloworld

    Docker 技术基础-namespace实现资源隔离

    Docker的技术基础-CGROUP

    计算机资源使用上的隔离,通常我们叫做使用限额
        • Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。
        • Prioritization: 优先级控制,比如: CPU利用和磁盘IO吞吐。
        • Accounting: 一些审计或一些统计,主要目的是为了计费。
        • Control: 挂起进程,恢复执行进程

    Docker的技术基础-Union文件系统

    • 功能类似diff命令,通过分层的方式记录文件的累积变化情况。
    • 例如 Tomcat, Oracle, Weblogic镜像都可以共享同一个Linux基础镜像,每一个镜像保存的只是在
    基础镜像上他们修改的部分
    • Docker的镜像可以非常多,但是每个都很小,而且加载启动非常快

    Docker的重要概念

    • 镜像(image)
    • 容器(container)
    • 数据卷(volumes)
    • 链接(links)
    • 仓库(Repository)

    Docker之镜像

    • Docker 的镜像类似虚拟机的快照,但是更轻量
    • 例如:一个镜像可以包含一个完整的 Linux 操作系统环境,里面仅安装了 Tomcat或用户需要的其
    它应用程序
    • 镜像可以用来创建容器

    Docker之容器

    • 等同于从快照中创建虚拟机
    • 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
    • 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

    从同一个镜像启动多个容器

    数据卷

    数据卷是一个可供一个或多个容器使用的特殊目录
    • 进程和数据的分离
    • 实际保存在容器之外,从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器
    • 可用于数据持久化
    • 数据卷的使用,类似于 Linux 下对目录或文件进行 mount。
    • 数据卷的共享, 可以在多个容器之间共享数据卷

    链接

    • 容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式
    • 在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息
    • Docker 在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿
    主主机上。从而避免了暴露关键系统(如数据库)端口到外部网络上.

    这里实际上1521端口只有web容器和myapp_db容器是可见的,对其他容器是不可见的。


    仓库及仓库注册服务器

    • 仓库是集中存放镜像文件的场所
    • 仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
    • 仓库分为公开仓库(Public)和私有仓库(Private)两种形式
    • push 镜像到仓库,从仓库pull下镜像

    Docker 操作与使用

    Docker常用命令归纳总结

    •容器生命周期管理
        docker [run|start|stop|restart|kill|rm|pause|unpause]
    •容器操作运维
        docker [ps|inspect|top|attach|events|logs|wait|export|port]
    •容器rootfs命令
        docker [commit|cp|diff]
    •镜像仓库
        docker [login|pull|push|search]
    •本地镜像管理
        docker [images|rmi|tag|build|history|save|import]
    •其他命令
        docker [info|version]

    Docker - 应用方向

    1. 简化配置
    应用配置能够无缝运行在任何平台,将应用环境和底层环境实现了解耦;
    2. 代码管道化管理
    代码从开发者的机器到生产环境机器进行管道化管理,能够平滑迁移;
    3. 应用隔离
    多个应用服务部署在多个Docker中,实现应用之间的解耦;
    4. 服务合并
    合并多个服务,减少机器占用;
    5. 快速部署
    快速的启动速度,极小空间占用;
    6. 开发人员的生产化
    能够在单机上搭建分布式集群服务,用以测试在真正生产环境下的代码


    以Docker为单位的开发部署流程设计

    • 以docker为单位的开发测试部署流程,简化了环境搭建的步骤,提高了资源利用效率和开发测试环境部署的速度,降低了迁移的成本,提升项目进度。

    基于Docker自动化发布构建流程图

    DockerUI - Docker图形化管理工作

    Harbor – 企业级docker仓库

    Docker Compose -简化复杂容器应用的利器

    更多Docker工具
    • Docker For Windows and MAC
    https://download.docker.com/win/stable/InstallDocker.msi
    • Eclipse for Docker has arrived on Mars
    https://www.eclipse.org/community/eclipse_newsletter/2015/june/article3.php
    http://www.oschina.net/news/63789/eclipse-for-docker-has-arrived
    • Eclipse Docker Tooling for Neon
    https://www.eclipse.org/community/eclipse_newsletter/2016/july/article2.php

  • 相关阅读:
    APMServ5.2.6 无法启动Apache的一个问题
    【转】流媒体技术笔记(视频编码相关)
    用APMServ一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP运行平台
    java swing 基础
    python class 类
    python 经验
    python 导入(转)
    kernel ipv4/ip_output.c
    python+正则表达式(转)
    Eclipse中如何快速添加、删除jar包
  • 原文地址:https://www.cnblogs.com/libingbin/p/6905830.html
Copyright © 2011-2022 走看看