docker 容器状态 restarting_20分钟极简入门Docker
有错误请指出~
什么是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
应用容器化
这时候归纳一下应用容器化的过程:
- 首先获取和编写应用代码
- 为应用编写Dockerfile
- 通过Dockerfile来构建应用的镜像
- 将镜像交付到物理机和云端
- 最终测试和运行容器化应用。
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相关推荐
- Docker极简入门
原 Docker极简入门 2018年05月22日 20:25:12 阅读数:44 一.Docker概述 Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码.运行时.库 ...
- .Net Core in Docker极简入门(下篇)
点击上方蓝字"小黑在哪里"关注我吧 Docker-Compose 代码修改 yml file up & down 镜像仓库 前言 上一篇[.Net Core in Dock ...
- SkyWalking 极简入门
1. 概述 1.1 概念 SkyWalking 是什么? FROM http://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Do ...
- APISIX 极简入门(国产微服务网关)
1. 概述 APISIX 是基于 OpenResty + etcd 实现的云原生.高性能.可扩展的微服务 API 网关.它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!! OpenRest ...
- Seata 极简入门
1. 概述 Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 1.1 四种事务模式 Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务 ...
- RL极简入门:从MDP、DP MC TC到Q函数、策略学习、PPO
前言 22年底/23年初ChatGPT大火,在写ChatGPT通俗笔记的过程中,发现ChatGPT背后技术涉及到了RL/RLHF,于是又深入研究RL,研究RL的过程中又发现里面的数学公式相比ML/DL ...
- 机器学习极简入门课程
开篇词 | 入门机器学习,已迫在眉睫 大家好,我是李烨.现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师.先后参与过聊天机器人.大数 ...
- [转载]芋道 Soul 极简入门(国产微服务网关)
摘要: 原创出处 http://www.iocoder.cn/Soul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 由于原著写作时间时间有点久了:有部分类容需要更新,后去个人会再发布文章 ...
- 芋道 Apollo 极简入门
点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...
最新文章
- 2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷,73人天团,正式出道!
- 数据库索引类型及实现方式
- Flash完美跨域访问的方法
- Python—自动化部署工具:Fabric
- php-5.4.6-win64,php5.4(64位)+apache2.4(64位)+mysql环境搭建
- Apache Shiro的运行流程和权限控制方式分析
- 以外的文件 删除_原来C盘还可以删除这五个文件,难怪电脑越来越卡!
- Linux调试时常见问题,C程序在linux下调试时经常出现的问题
- jsp 通过cookie 记住用户名
- qpushbutton设置两个图标_宝马显示屏上的各种图标是啥意思,这里分享几个问的最多的!...
- extern 与 #define 使用说明
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之64---BREW 应用的交叉编译...
- Linux安装GIMP
- python处理葵花8 netCDF4(nc格式)数据
- Java等额本息算法实现
- 修复计算机之后东西还在吗,硬盘分区表修复后文件还在吗
- PageOffice 在线打开 word 文件实现痕迹保留、键盘批注、手写批注
- 如何关闭android键盘,软键盘怎么关,教您如何关闭软键盘
- blob写法的浏览器兼容性
- 开门的磁卡在哪里配_门禁卡能配吗?
热门文章
- hdu4515 小模拟
- 【错误记录】Android Gradle 配置报错 ( gradle.properties 配置到 BuildConfig 中需要注意类型转换 | 位置: 类 BuildConfig )
- 【数字信号处理】序列傅里叶变换 ( 基本序列的傅里叶变换 | 求 cosωn 的傅里叶变换 | 复变函数欧拉公式 )
- 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
- 【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
- 【C 语言】文件操作 ( 使用 fread 和 fwrite 实现二进制文件的拷贝 | stat 统计文件大小 | feof 判定文件结尾 )
- 【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )
- 【Flutter】Hero 动画 ( Hero 动画使用流程 | 创建 Hero 动画核心组件 | 创建源页面 | 创建目的页面 | 页面跳转 )
- 小技巧textbox的行数
- java 基础 --静态