Docker教程前端有这篇就够了!!!
Docker
前言
日趋复杂的运维开发环境,对虚拟服务器及应用服务的要求更加的多元化。我们需要更加容易扩展、性能优越、方便监控的管理服务,容器化应用、容器化运维应运而生。
【工欲善其事,必先利其器】需要准备的环境(三选一):
- Linux环境(Centos 7以上/Debian 8以上/Ubuntu 16.04LTS以上版本)
- Windows 64位专业版/企业版/教育版(Build 15063以上)
- macOS Sierra 10.12以上的版本
如果,你有了上面的环境,就可以很快速的学习。
【收获什么】:
- 理解/安装docker容器技术
- 秒级快速部署mysql、nginx、tomcat等服务
- 搭建自己的git服务器
- 使用容器技术发布nodejs + mongodb + koa + vue的应用
概念
1. 什么是容器化?
容器化是将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像的一种软件开发方法。
软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。 按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。
容器化应用程序在容器主机上运行,而容器主机在 OS(Linux 或 Windows)上运行。因此,容器的占用比虚拟机 (VM) 映像小得多。
【容器化的特点】:
- 一致的运行环境
- 可伸缩性
- 更方便的移植
- 隔离性
2. 了解Docker
Docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可适用于自动化测试、打包,持续集成和发布应用程序等场景,包括阿里云,亚马逊在内的云计算服务商都采用了docker来打造serverless服务平台。它不仅仅可以部署项目,还可以用于数据库搭建,nginx服务搭建,nodejs、php等编程语言环境搭建。
PS: docker现已改名为moby
Docker中的三个重要概念:
镜像(image):
分片的(只读)文件系统,由Dockerfile创建,它独立、易扩展、更效率
容器(container):
由Docker进程创建和管理的:文件系统 + 系统资源 + 网络配置 + 日志管理 Docker是docker镜像的运行环境,所以容器的概念就比较好理解了
仓库(registry):
用来远端存储docker镜像版本控制、变更管理、为持续集成与快速部署提供便利
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
3. Docker vs 虚拟机
【区别】:
- 容器是应用层的抽象,它将代码和依赖关系打包在一起。 多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。 容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。
- 虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。 管理程序允许多台VM在单台机器上运行。 每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库 - 占用数十GB。 虚拟机也可能很慢启动。
【总结】:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB |
一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
开发/环境定制 | 方便(命令行、面向对象式) | 进入虚拟机 |
【相同点】:
- 文件隔离/文件共享(沙箱)
- 资源隔离
- 网络隔离
- 支持多种宿主环境(扩展)
- 快照/镜像(版本控制/变更管理)
【不同点】:
- 不同的资源管理/依赖//释放(虚拟机占用更多的系统资源)
- 不同的应用运行环境
- Docker是写时复制
- 不同的日志方式(Docker收集日志,而虚拟机需要在虚拟系统里面看日志)
- 不同的交互方式(D