Docker 入门

Posted Eric_Xiett

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 入门相关的知识,希望对你有一定的参考价值。

Docker 入门

Docker 定义

Docker is a platform for developers and sysadmins to develop, ship, and run applications.


1. 不是容器,是管理容器的引擎
2. 不是虚拟化技术,是基于容器技术的应用开发、移植和运行的平台
3. 支持在Linux OS上安装,如在Windows、OS X上安装,需借助Linux VM

Docker VS VM


直观感受:VM架构比Docker架构多Hypervisor和Guest OS

Docker生态系统


Docker应用场景


解决应用开发和运行的问题:

  • 缺少依赖包?
  • 编译出错了?
  • 操作系统的版本号不对?
  • 如何配置?
  • 应用的版本号怎么维护?
  • 物理机关机了怎么办?

应用场景:

  • web应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
  • Dies、Flynn

优势:

  • 简化程序:Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,便可以实现虚拟化。
  • 避免选择恐惧症:如果你有选择恐惧症,还是资深患者。Docker帮你打包你的纠结!比如Docker镜像;Docker镜像中包含了运行环境和配置,所以Docker可以简化部署多种应用实例工作。比如Web应用、后台应用、数据库应用、大数据应用比如Hadoop集群、消息队列等等都可以打包成一个镜像部署。
  • 节省开支:一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker 技术架构

总体架构 C/S

逻辑架构

  • Union FS: 是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统
  • Cgroups:实现对资源的配额和度量
  • Namespaces:LXC所实现的隔离性,主要来自kernel的namespaces,其中PID、NET、IPC、MNT、UTS等namespace将container的进程、网络、消息、文件系统、UTS和用户空间隔离开
  • LXC: Linux Container,提供了一种操作系统级的虚拟化方法。借助namespaces和cgroups来管理container

Docker on Linux

  • libcontainer :是Docker中用于容器管理的包,它基于Go语言实现,通过管理 namespaces 、 cgroups 、 capabilities 以及文件系统来进行容器控制
  • Systemd-nspawn:chroot命令的增强,用于在一个容器内执行命令或OS

元素

  • 镜像:含有启动Docker容器所需的文件系统结构及其内容,采用分层的结构构件,最底层是bootfs,之上的部分是rootfs。Rootfs是只读的,利用联合挂载技术再挂载一个读写层。
  • 仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。
  • 容器:容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台,Docker利用容器来运行应用。

安全


  • 文件系统级保护:只读
  • Capability机制:权限检查
  • Namespace机制:进程级隔离,但管理员可直接杀死进程
  • Cgroups机制:“恶意进程会通过占有系统全部资源来进行系统攻击”,拒绝服务攻击
  • SELinux: MAC

总体来讲,Docker的安全性能还不错,只是这还是一项年轻的技术、因此目前尚未积累起能够满足实际生产需求的完整工具生态系统。

Docker 工作方式

技术支柱
Docker通过作系统如下功能来提高容器技术效率

  • Namespaces 充当隔离的第一级。确保一个容器中运行一个进程而且不能看到或影响容器外的其它进程。
  • Cgroups是LXC的重要组成部分,具有资源核算与限制的关键功能。
  • UnionFS(文件系统))作为容器的构建块。为了支持Docker的轻量级以及速度快的特性,它创建层与用户。

安装
支持Linux、windows和OS X
以 CentOS 7 为例:
前提:64位,内核版本最低3.10

# yum install docker-engine
# systemctl start docker
# systemctl enable docker
# docker version

使用whalesay镜像创建容器

# docker search whalesay
# docker pull docker/whalesay
# docker run docker/whalesay cowsay boo

工作流程

组件:Docker Client、Docker Daemon、Docker Registry

基于Docker的PaaS项目

  • Dies

    Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon Docker and CoreOS to provide a lightweight PaaS with a Heroku-inspired workflow.

  • Flynn

    Flynn 是一个开源的PaaS平台,可自动构建部署任何应用到Docker容器集群上运行,其功能特性与组件设计大量参考了传统的PaaS平台 Heroku 。

附录

docker官网
Dies官网
Flynn官网
入门资料
Flynn初探

以上是关于Docker 入门的主要内容,如果未能解决你的问题,请参考以下文章

机器人微控制器编程(CoCube)-破除定势

《高效能人士的七个习惯》读后感

Docker的安装 与 环境配置 及 阿里云镜像仓库配置常用命令等

复式记账Beancount入门

Docker入门教程Docker安全

Docker入门教程Docker API