docker概述和基本命令

命名空间

  Docker使用一种称为namespaces提供隔离工作空间的技术来称为容器。当您运行容器时,Docker会为该容器创建一组 名称空间。

  这些命名空间提供了一层隔离。容器的每个方面都在一个单独的命名空间中运行,其访问权限仅限于该命名空间。

Docker Engine在Linux上使用以下命名空间:

  • pid命名空间:进程隔离(PID:进程ID)。
  • net命名空间:管理网络接口(NET:网络)。
  • ipc命名空间:管理访问IPC资源(IPC:进程间通信)。
  • mnt命名空间:管理文件系统挂载点。
  • uts命名空间:隔离内核和版本标识符。(Unix分时系统)。

对照组

  Linux上的Docker Engine还依赖于另一种称为控制组 (cgroups)的技术。

  cgroup将应用程序限制为特定的一组资源。

  控制组允许Docker Engine将可用的硬件资源共享给容器,并可选择强制执行限制和约束。

  例如,可以限制特定容器的可用内存。

 

容器技术已经成为应用程序封装和交付的核心技术

  •  容器技术的核心有以下几个内核技术组成:

    –  CGroups(Control Groups)-资源管理

    –  NameSpace-进程隔离

    –  SELinux安全

  •  由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速

 

Docker是完整的一套容器管理系统

  •  Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术 

 

Docker特性

Docker优点:

  削减高峰,填堵低峰

  相比于传统的虚拟化技术,容器更加简洁高效

  传统虚拟机需要给每个VM安装操作系统

   容器使用的共享公共库和程序

 

Docker的缺点

  容器的隔离性没有虚拟化强

  共用Linux内核,安全性有先天缺陷

  SELinux难以驾驭

  监控容器和容器排错是挑战

 

docker应用场景

  Web 应用的自动化打包和发布。 

  自动化测试和持续集成、发布。

  在服务型环境中部署和调整数据库或其他的后台应用。

  从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

八个Docker的真实应用场景

docker-use-cases.png
Docker提供了轻量级的虚拟化,它几乎没有任何额外开销.
首先你在享有Docker带来的虚拟化能力的时候无需担心它带来的额外开销。其次,相比于虚拟机,你可以在同一台机器上创建更多数量的容器。
Docker的另外一个优点是容器的启动与停止都能在几秒中内完成。

1. 简化配置

  这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

2. 代码流水线(Code Pipeline)管理

  前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

3. 提高开发效率

  这就带来了一些额外的好处:Docker能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。

  不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。

  理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。

4. 隔离应用

  有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。

  我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊做了比较。

5. 整合服务器

  正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。

6. 调试能力

  Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。你可以在《Docker拯救世界》的文章中找到这一点的例证。

7. 多租户环境

  另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。

  使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。

8. 快速部署

  在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。这正是Google和Facebook都看重的特性。

  你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。
 

Docker 架构 

  Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

  Docker 容器通过 Docker 镜像来创建。

  容器与镜像的关系类似于面向对象编程中的对象与类。

Docker面向对象
容器 对象
镜像

 

 

Docker 镜像(Images)

Docker 镜像是用于创建 Docker 容器的模板。

Docker 容器(Container)

容器是独立运行的一个或一组应用。

Docker 客户端(Client)

Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。

Docker 主机(Host)

一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker 仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

 

Docker Machine

Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

 

镜像

在Docker中容器是基于镜像启动的

  镜像是启动容器的核心

  镜像采用分层设计

  使用快照的COW技术,确保底层数据不丢失

 

docker镜像管理

 

 

 

镜像常用命令

命令列表

–  docker images //查看镜像列表

–  docker history //查看镜像制作历史

–  docker inspect //查看镜像底层信息

–  docker pull //下载镜像

–  docker push //上传镜像

–  docker rmi //删除本地镜像

–  docker save //镜像另存为tar包

–  docker load //使用tar包导入镜像

–  docker search //搜索镜像

–  docker tag //修改镜像名称和标签(相当于软连接)

–  docker images -f dangling=true //显示虚悬镜像

–  dcoker rmi $(docker images -q -f dangling=true)  //删除虚悬镜像

    docker images -a //显示包括中间层镜像

 

docker images

•  查看镜像列表

–  镜像仓库名称  –  镜像标签  –  镜像ID  –  创建时间  –  大小

 

容器常用命令

•  命令列表

–  docker run //运行容器

–  docker ps //查看容器列表,正在运行中的镜像,-a所有

–  docker stop //关闭容器

–  docker start //启动容器

–  docker restart //重启容器

–  docker attach|exec //进入容器

–  docker inspect //查看容器底层信息

–  docker top //查看容器进程列表

–  docker rm //删除容器

•  列出容器列表  docker ps

–  docker ps 查看正在运行的容器

–  docker ps -a 查看所有容器列表

–  docker ps -aq 仅显示容器id

•  管理容器docker stop|start|restart

–  docker stop 关闭容器

–  docker start 开启容器

–  docker restart 重启容器

进入容器 docker attach|exec

–  docker attach 进入容器,exit会导致容器关闭(进入当前解释器)

–  docker exec 进入容器,退出时不会关闭容器(新建一个解释器)

显示容器详细信息

docker inspect 容器id

crtl+pq //把容器放在后台运行

docker commit //容器制作镜像

 

 

 

 

posted @ 2018-07-01 16:54  wwchihiro  阅读(237)  评论(0编辑  收藏  举报