有错误请指出~


什么是Docker

首先来介绍一下什么是Docker,Docker是早于2013年发布的开源项目,它借助操作系统的虚拟化技术来实现应用间的资源隔离,从而应用能更加快速方便地打包和部署在任何地方。根据官网描述,Docker是一个借助容器进行开发,部署和运行应用的工具,通俗来说,Docker容器好比一个集装箱一样,里面存放了应用所需要的文件和依赖,这种把应用标准化的过程被叫做为“容器化”。

Docker适合做什么

对于开发人员来说,容器技术为应用的部署提供了沙盒环境,开发者可以在独立的容器运行和管理应用程序进程,Docker提供的抽象层使得开发人员之间可以保持开发环境相对的一致,因此Docker适合用于应用隔离,搭建沙箱环境,此外,由于Docker容器的轻量化,它也被适用于进行持续集成和持续部署。

Container VS VM

人们经常用虚拟机和容器来做比较,那么它们两之间有什么区别呢?其实它们最核心的区别在于虚拟化资源的层面不一样,虚拟机是在硬件层之上实现虚拟化的,而容器则直接在操作系统之上实现虚拟化,从图中可以看出,每个虚拟机都需要在一个Guest OS之上,而容器则可以都处在同一个宿主机之上。

因为容器没有虚拟机造成的额外损耗,所以与虚拟机对比,容器不仅运行效率更高,而且部署速度也更快。

Docker Engine

Docker Engine是用于运行和编排容器的基础设施工具,我们平时说到的Docker大多数指的是Docker Engine,也就是在命令行和Docker进行交互的时候打交道的后台进程。

这是Docker Engine目前的架构,Docker客户端通过REST API与Docker Daemon来进行交互,Daemon把命令下发给containerd,containerd负责容器的生命周期管理以及镜像管理等,而runc负责创建容器。

Docker首次发布时,Docker Engine由两个核心组件构成:LXC和Docker Daemon。Docker Daemon是单一的二进制文件,包含诸如 Docker客户端、Docker API、容器运行时、镜像构建等。LXC提供了对Namespace(资源隔离)和CGroup(资源限制)等基础工具的操作能力,它们是基于Linux内核的容器虚拟化技术。

安装Docker

安装好Docker后,可以执行两条命令查看Docker环境以及版本信息:

  • docker version
  • docker info

Docker镜像

如果说Docker容器本质上是一个运行的进程以及它需要的一些依赖,而Docker镜像则是定义容器的一个"模版",容器则是镜像运行的一个实例。镜像是一个打包好的文件,里面包含了应用程序运行所需的所有库、配置和依赖。

Docker镜像结构

所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。以Dockerfile为例,每一行指令都产生一个新层。

镜像由一个或多个只读的镜像层构建而成,每个镜像层拥有独立的哈希值,Docker在拉取或推送镜像时,会判断哪几层在本地或远端已存在,避免不必要的操作。

Docker镜像命令

我们可以通过下面这些命令进行一些Docker镜像相关的基本操作。

Docker容器

容器是镜像的一个运行的实例,用户可以从单个镜像上启动一个或多个容器。

Docker容器的生命周期

容器在创建时进入Created状态,运行后进入Running状态,接着会进入到Pause状态或Exited状态,对已经退出的容器执行重启操作会使容器进入Restarting状态,随后转为Running状态。

Docker容器操作

创建一个Docker容器https://www.zhihu.com/video/1166455714251264000

Dockerfile

Dockerfile是一个用以构建镜像的文本文件,它包括了一系列的执行用来表示当前应用的描述、依赖以及该如何运行这个应用,Docker Engine通过解析Dockerfile里的指令,来构建一个Docker镜像。

执行docker build命令会从顶层开始解析Dockerfile中的指令并逐行执行。而对每一条指令,Docker都会检查缓存中是否已经有与该指令对应的镜像层。

编写一个Dockerfilehttps://www.zhihu.com/video/1166455944463732736

多阶段构建

当Dockerfile中包含多个FROM语句时,触发多阶段构建。使用多阶段构建可以文件从另一个阶段复制到另一个阶段,生成的镜像将会是最后一个阶段构建的结果。

这个功能在某些情况下会十分有用,比如我们在编译应用时需要用到许多依赖,但想要保持镜像尽可能地小,这时候就可以通过多阶段构建来将编译环境和运行环境分离,在最终生成的镜像中只保留编译好的可执行文件。

Dockerfile多阶段构建https://www.zhihu.com/video/1166456122667143168

应用容器化

这时候归纳一下应用容器化的过程:

  1. 首先获取和编写应用代码
  2. 为应用编写Dockerfile
  3. 通过Dockerfile来构建应用的镜像
  4. 将镜像交付到物理机和云端
  5. 最终测试和运行容器化应用。

Docker Registry

Docker Registry是镜像存储和分发的仓库,以完成镜像的搜索、拉取和推送等操作。

推送一个镜像:

  • docker push ubuntu(http://docker.io)
  • docker push myregistrydomain:port/foo/bar(myregistrydomain:port)

拉取一个镜像:

  • docker pull ubuntu(http://docker.io)
  • docker pull myregistrydomain:port/foo/bar(myregistrydomain:port)

Docker数据管理

下面介绍一下Docker是怎么管理和存储数据的,Docker提供了3种方法将数据从宿主机挂载到容器:volumes,bind mounts和tmpfs mounts。其中volume适合在不同的容器中共享数据和数据迁移,bind mount适合宿主机与容器之间共享配置和代码,tmpfs适合不需要持久化数据的场景。

Docker网络

Docker基于CNM实现了网络模型,CNM模型由三个部分组成:Sandbox,Endpoint,Network。

Docker内置了以下几种网络驱动,其中bridge桥接网络是Docker默认的网络驱动,在这种模式下,连接到同一个网桥的容器会使用同一个DNS解析服务,容器间可以使用这个解析服务来相互通信,而overlay是swarm模式下默认的网络驱动。

Docker DNShttps://www.zhihu.com/video/1166460676783669248

Docker Machine

Docker Machine是一个用来在虚拟机安装Docker Engine的工具,以及通过命令行来管理和登录这些主机。

Docker Compose

Docker Compose是一个定义和运行多容器应用的工具,通过编写Compose文件来定义和配置应用,只需要用docker-compose一条命令就可以一次把所有定义好的服务启动起来。

Docker Compose部署应用https://www.zhihu.com/video/1166457477158903808

Docker Swarm

Docker Swarm是Docker原生的集群管理和调度工具,它把多个Docker主机抽象成单个虚拟的系统,开发者方便地可以通过Docker Swarm在多个主机上来调度和部署Docker容器。

在Swarm中有几个概念,Node代表着Swarm集群中的一个Docker主机,其中每个主机可以是Manager或者Worker两个角色,他们分别代表管理节点和工作节点。Task可以理解为一个Docker容器以及其运行的命令,Service是一组Task的集合与定义,即运行在Node上的服务。

Docker Swarm提供了多种调度策略,来按需选择将容器分配到不同的节点上。

使用Swarm部署应用https://www.zhihu.com/video/1166463996525010944

好了,希望看到这后你对Docker可以有一个了解。

docker 容器状态 restarting_20分钟极简入门Docker相关推荐

  1. Docker极简入门

    原 Docker极简入门 2018年05月22日 20:25:12 阅读数:44 一.Docker概述 Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码.运行时.库 ...

  2. .Net Core in Docker极简入门(下篇)

    点击上方蓝字"小黑在哪里"关注我吧 Docker-Compose 代码修改 yml file up & down 镜像仓库 前言 上一篇[.Net Core in Dock ...

  3. SkyWalking 极简入门

    1. 概述 1.1 概念 SkyWalking 是什么? FROM http://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Do ...

  4. APISIX 极简入门(国产微服务网关)

    1. 概述 APISIX 是基于 OpenResty + etcd 实现的云原生.高性能.可扩展的微服务 API 网关.它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!! OpenRest ...

  5. Seata 极简入门

    1. 概述 Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 1.1 四种事务模式 Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务 ...

  6. RL极简入门:从MDP、DP MC TC到Q函数、策略学习、PPO

    前言 22年底/23年初ChatGPT大火,在写ChatGPT通俗笔记的过程中,发现ChatGPT背后技术涉及到了RL/RLHF,于是又深入研究RL,研究RL的过程中又发现里面的数学公式相比ML/DL ...

  7. 机器学习极简入门课程

    开篇词 | 入门机器学习,已迫在眉睫 大家好,我是李烨.现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师.先后参与过聊天机器人.大数 ...

  8. [转载]芋道 Soul 极简入门(国产微服务网关)

    摘要: 原创出处 http://www.iocoder.cn/Soul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 由于原著写作时间时间有点久了:有部分类容需要更新,后去个人会再发布文章 ...

  9. 芋道 Apollo 极简入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...

最新文章

  1. 2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷,73人天团,正式出道!
  2. 数据库索引类型及实现方式
  3. Flash完美跨域访问的方法
  4. Python—自动化部署工具:Fabric
  5. php-5.4.6-win64,php5.4(64位)+apache2.4(64位)+mysql环境搭建
  6. Apache Shiro的运行流程和权限控制方式分析
  7. 以外的文件 删除_原来C盘还可以删除这五个文件,难怪电脑越来越卡!
  8. Linux调试时常见问题,C程序在linux下调试时经常出现的问题
  9. jsp 通过cookie 记住用户名
  10. qpushbutton设置两个图标_宝马显示屏上的各种图标是啥意思,这里分享几个问的最多的!...
  11. extern 与 #define 使用说明
  12. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之64---BREW 应用的交叉编译...
  13. Linux安装GIMP
  14. python处理葵花8 netCDF4(nc格式)数据
  15. Java等额本息算法实现
  16. 修复计算机之后东西还在吗,硬盘分区表修复后文件还在吗
  17. PageOffice 在线打开 word 文件实现痕迹保留、键盘批注、手写批注
  18. 如何关闭android键盘,软键盘怎么关,教您如何关闭软键盘
  19. blob写法的浏览器兼容性
  20. 开门的磁卡在哪里配_门禁卡能配吗?

热门文章

  1. hdu4515 小模拟
  2. 【错误记录】Android Gradle 配置报错 ( gradle.properties 配置到 BuildConfig 中需要注意类型转换 | 位置: 类 BuildConfig )
  3. 【数字信号处理】序列傅里叶变换 ( 基本序列的傅里叶变换 | 求 cosωn 的傅里叶变换 | 复变函数欧拉公式 )
  4. 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
  5. 【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
  6. 【C 语言】文件操作 ( 使用 fread 和 fwrite 实现二进制文件的拷贝 | stat 统计文件大小 | feof 判定文件结尾 )
  7. 【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )
  8. 【Flutter】Hero 动画 ( Hero 动画使用流程 | 创建 Hero 动画核心组件 | 创建源页面 | 创建目的页面 | 页面跳转 )
  9. 小技巧textbox的行数
  10. java 基础 --静态