1. 前提知识

强制:熟悉Linux各种命令和相关背景知识

建议:了解Maven和Git相关知识

Docker: 使用go语言,与K8/mesos/Machine/Compose/Swarm集群部署,与CI/CD jenkins 集成

2. 为什么会出现

Docker的出现是为了开发与运维之间的矛盾与尴尬。

开发在自己开发环境调试修改好代码,交给运维War包,或者Jar包,可是在运维那十之八九是不会那么顺利的,因为一些配置和环境的不同,导致的不同环境的兼容问题。

解决这个问题的过程往往花费大量的时间和精力。

此时Docker也就出现了,包含代码,配置,数据,运行环境等,把开发人员等运行环境,一摸一样的复制过来。消除了开发人员回答“在我机器上可以工作”的尴尬。

 

docker 运维实践 docker运维所需技能_Docker

 

3.理念

Docker的主要目标“Build,Ship and Run Any App Anywhere”,也就是通过对应用组件的分装,分发,部署,运行等生命周期的管理,使用户使用的app做到“一次封装,到处运行”

docker 运维实践 docker运维所需技能_运维_02

 

4. Docker是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

 

5. Docker能干什么

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

 

6. Docker 包括三个基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

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

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

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

Docker

面向对象

容器

对象

镜像


 

7. Docker的架构图 

 

docker 运维实践 docker运维所需技能_docker_03

 

概念

说明

Docker 镜像(Images)

Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。

Docker 容器(Container)

容器是独立运行的一个或一组应用,是镜像运行时的实体。

Docker 客户端(Client)

Docker 客户端通过命令行或者其他工具使用 Docker SDK (Redirecting…) 与 Docker 的守护进程通信。

Docker 主机(Host)

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

Docker Registry

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

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

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Docker Machine

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

 

9. 虚拟机和docker的区别 

虚拟机就是带环境安装的一种解决方案,它可以在一种操作系统上运行另一种操作系统,比如Window操作系统里可以运行linux操作系统,应用程序对此毫无感知,虚拟机看上去和真实的机器一摸一样,面对底层系统来说,虚拟机就是一个普通文件,不需要就删掉,对其他毫无影响。这类虚拟完美的运行了另一套系统,能够使应用程序,操作系统,和硬件三者之间逻辑不变。

因为虚拟机是虚拟了整个操作系统,包括硬件和网络等等,size非常大。

缺点:资源占有多,冗余步骤多,启动慢。

而Docker不是模拟完整的操作系统,只是需要软件所需要库资源和设置的核心的部分,容器内的应用只是运行于宿主的内核,容器内没有自己的内核,也没有进行硬件虚拟机更快,传统虚拟机启动就需要几分钟,而docker是秒级别的启动。

10.Docker的好处

  • 更快速的应用交付和部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的计算机资源应用

docker 运维实践 docker运维所需技能_docker_04

  

11. 业界趋势 

大佬们都在用

docker 运维实践 docker运维所需技能_自动化_05