Docker(1)- 什么是 Docker
如果你还想从头学起 Docker,可以看看这个系列的文章哦!
https://www.cnblogs.com/poloyy/category/1690628.html
备注
这里的概念直接引用官方的,咱们提取关键字信息来熟记即可
学习 Docker 前的必备知识
环境配置的烦恼
- 软件开发最大的麻烦事之一,就是环境配置
- 相信每位编程初学者都会在环境配置上倒腾很久,而作为老师也会因为不同机器出现五花八门的环境配置问题而烦恼
- 想要软件正常运行,那么系统的设置和各种库、组件正确的安装才能如期运行
- 举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量
- 当你需要换机器的时候,你之前所配置的环境又要重头来一遍,非常麻烦
很久以前的应用部署方式
介绍

在一个物理服务器上面安装系统,直接部署应用
缺点
- 部署非常慢
- 成本非常高
- 资源浪费:部署的应用并不会占满服务器资源,会有大部分的空闲资源
- 难于迁移和扩展:像上面说到的,换台服务器,环境又要重新配
- 可能会被限定硬件厂商:底层系统架构不同
虚拟化技术出现后的应用部署方式
虚拟化介绍

- 一个主机部署多个虚拟机,每个虚拟机可以部署多个应用
- 比如在 Windows 系统里面运行 Linux 系统的 VM
- 对于底层系统(主机)来说,虚拟机就是一个普通文件,不需要就删掉,对主机没有影响
虚拟化优点
- 资源池:一个物理机的资源分配到了不同的虚拟机
- 易扩展:添加物理主机或虚拟机
- 易云化:阿里云、AWS 提供虚拟化技术
虚拟化局限性
- 资源占用多:每一个虚拟机都是一个完整的操作系统,要给其分配资源,当虚拟机数量增多时,物理主机本身消耗的资源势必增多
- 冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录
- 启动慢:启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行
容器的基础知识
容器为什么会出现
- 上面也讲述了单机部署应用和虚拟机技术的局限性
- 容器的诞生就是为了解决这些局限性的
什么是容器
- 对应用软件和其依赖的包进行标准化打包
- 应用之间相互隔离
- 共享同一个 OSKernel
- 可以运行在很多主流操作系统上
- 可以理解成:标准化软件单元
容器解决了什么问题
- 解决了开发和运维之间的矛盾
- 在开发和运维之间搭建了一个桥梁,是实现 devops 的最佳解决方案
容器和虚拟机的区别

容器和虚拟机都具有相似的资源隔离和分配特点,但是功能不同,因为容器虚拟化了操作系统,而不是硬件,所以更加便携和高效
| 容器 | VM |
| 应用程序层的抽象,将代码和依赖项打包在一起【容器是应用层面的隔离】 | 将一台服务器转变为多台服务器的物理硬件的抽象【虚拟化是物理资源层面的隔离】 |
|
多个容器可以在同一台计算机上运行,并与其他容器共享OS内核 |
也允许多个VM在单台计算机上运行,但需要启动单独的虚拟机 OS |
|
仅有一个物理机的OS,多个容器共享物理机的资源 |
多个OS(物理机一个OS,每个 VM 一个 OS),均独享资源 |
| 一台物理机可以运行数百个容器 | 一台物理机最多可以运行十来个虚拟机 |
| 容器镜像的大小通常为几十 MB | 包含操作系统、二进制文件、库,至少也要几个 GB |
| 可以在数秒内完成启动 | 和物理机启动时间一样慢,可能要几分钟 |
| 可以处理更多的应用程序,消耗的资源比 VM 少 | |
| 每个容器在用户空间中作为隔离的进程运行 |
虚拟化 + 容器
- 其实就是 一台物理机上部署多个 VM,每个 VM 上又可以有多个容器
- 容器和 VM 一起结合使用,在部署和管理应用程序时提供了很大的灵活性

Docker 的详细介绍
Docker 简介
- Docker 是一个开源的应用容器引擎,基于 Go 语言
- 可以打包应用以及依赖包到一 个轻量级、可移植的容器中
- Docker 打包好了的容器,可以发布到任何流行的 Linux 机器上,也可以实现虚拟化
- 容器是完全使用沙箱机制,相互之间不会有任何接口(独立)
- 容器性能开销极低
- Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器
- Docker 是实现容器技术的一种工具
- Docker 容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
工作中的应用场景
- Web 应用的自动化打包和发布
- 自动化测试和持续集成、发布(我们的重点)
- 组建微服务架构,通过多个容器,一台机器可以跑多个服务,因此在本机可以模拟出微服务架构
将软件打包到容器中,以进行开发,运输和部署
- 容器是打包代码及其所有依赖项的软件的标准单元,所以该软件可以从一个计算机环境快速可靠地在另一个计算机环境进行运行
- Docker 容器镜像是一个轻量级、独立的、可执行的软件包,它包含运行应用程序所需的一切:运行环境、系统工具、系统库、配置
- 容器镜像在运行时成为容器
- 容器化软件都可用于基于 Linux 和 Windows 的应用程序,始终运行相同
- 容器将软件与其环境隔离开来,即使存在差异,但软件仍然可以运行
在 Docker 镜像上运行的 Docker 容器的优势
- 标准:Docker 创建了容器的行业标准,因此它们可以在任何地方移植
- 轻巧:容器共享机器的操作系统内核,因此不需要每个应用程序都用操作系统,从而提高了服务器效率,并降低了服务器资源的消耗
- 安全:容器中的应用程序更安全,Docker 提供业界最强大的默认隔离功能
Docker 的组成

Docker 架构图

架构图箭头的意思大概是
- 在 Docker Client 敲 Docker 命令调用 Docker API 来操作 Host 上的 Docker 服务
- Docker 服务可以从仓库拉镜像到本机,也可以用本机镜像创建一个容器并运行
仓库(Registry)
- 集中存放镜像文件的场所
- 每个镜像文件有不同的标签(不同的版本)
- 最大的开放仓库是Docker Hub: https://hub.docker.com/ 存放了数量庞大的镜像供用户下载
- 国内的公开仓库包括阿里云,网易云等
- 仓库分为公开仓库(public)和私有仓库(private)两种形式
镜像(Images)
- 创建容器的模板
- 一个镜像可以创建很多容器
容器(Containers)
- 容器是镜像生成的运行实例
- Docker 利用容器独立运行一个或一组应用(服务)
- 每个容器之间是相互隔离的
- 它可以被启用、开始、停止、删除
主机(HOST)
- 一个物理机或虚拟机
- 用于运行 Docker 守护进程和多个容器
- 可存放多个镜像
- 也称为宿主机,node节点
Docker 服务端(daemon)
Docker 守护进程,运行 Docker 容器
Docker 客户端(client)
- 客户端使用 Docker 命令或其他工具调用 Docker API
- 当然也可以在 HOST 直接敲 Docker 命令
Docker(1)- 什么是 Docker的更多相关文章
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- docker使用阿里云Docker镜像库加速
官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 官方帮助 阿里云Docker镜像库 阿里云容器Hub服务:http://dev.aliyun.com/search.html 来自云端的容器Hub服 ...
- Docker - 配置DaoCloud的Docker加速器(国内registry-mirror)
由于众所周知的原因,从Docker Hub难以高效地下载镜像. 除了使用VPN或代理之外,最为有效的方式就是使用Docker国内镜像. DaoCloud是首个提供国内免费Docker Hub镜像的团体 ...
- Docker学习总结之docker安装
Ubuntu安装指南 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译 Docker 支持多种平台下的安装运行,现在我们选取结合度最高的ubuntu来说明安装过程. 首先需要明确Do ...
- Docker学习总结之docker入门
Understanding Docker 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译. What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发, ...
- docker专题(2):docker常用管理命令(上)
http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...
- Docker学习笔记(1) — docker 常用命令
1. docker version显示 Docker 版本信息.2. docker info显示 Docker 系统信息,包括镜像和容器数.3. docker searchdocker search ...
- docker 1.12 版本 docker swarm 集群
博客已经迁移到 个人博客中 个人博客 更新地址: http://www.xf80.com/2016/10/25/docker-swarm-1.12/ docker 1.12 版本 的新特性 (1)do ...
- docker 内部组件结构 -- docker daemon, container,runC
Docker, Containerd, RunC : 从 Docker 1.11 开始, docker 容器运行已经不是简单地通过 Docker Daemon 来启动, 而是集成了Container, ...
- jenkins+docker 持续构建非docker in docker jenkins docker svn maven
工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...
随机推荐
- 嘿!Mybatis
简介 什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL.存储过程以及高级映射. MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作. My ...
- Java面试题之计算字符/字符串出现的次数
一.计算字符在给定字符串中出现的次数 二.计算字符串在给定字符串中出现的次数 1 import java.util.HashMap; 2 import java.util.Map; 3 4 publi ...
- Python-属性描叙符协议ORM实现原理依据- __set__ __get__ __delete__
class CheckString: def __init__(self, variable_type): self.variable_type = variable_type def __set__ ...
- MySQL系列:Docker安装 MySQL提示错误:Access denied for user'root'@'localhost' (using password:yes)
问题: 解决方法: 在my.conf文件里配置 [mysqld] skip-grant-tables
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- Linux 下 svn 场景实例及常用命令详解
一.SVN使用场景实例 问题: 在使用svn做为版本控制系统的软件开发中,经常会有这样的需求:在工作复本目录树的不同目录中增加了很多文件,但未纳入版本控制系统,这时如果使用svn add命令一个一个的 ...
- Redis安装使用以及可能的算法实践
layout: post title: 2017-12-05-Redis 入门 tags: - Redis - 实时特征 - UCB, Tompson sampling Redis 是什么? Redi ...
- Vue 全宇宙最浪 VSCode 配置、插件
别人的那一堆配置.插件我就不写了- 首先进入官网下载并安装. 基本配置 在编译器 文件 >> 首选项 >> 设置,可以拷贝相面的选项后搜索相关配置 设置制表符等于空格数为 2: ...
- RabbitMQ消息队列总结
AMQP[高级消息队列协议] 是一个异步消息传递所使用的应用层协议规范(是线路层协议)AMQP 客户端能够无视消息的来源任意发送和接受信息 队列的使用场景: 1.与业务的主要逻辑无关,但又需要执行,就 ...
- 【应用服务 App Service】如何移除App Service Response Header中包含的服务器敏感信息
问题描述 有些情况下,当应用部署到App Service上后,在有些Response Header中,可以看见关于服务器的一些信息,这样会导致隐藏的安全问题,所以可以在web.config中移除某些关 ...