Docker (1) 基本概念和安装

Docker简介

什么是容器?

  一种虚拟化的方案,操作系统级别的虚拟化。容器是一个轻量的、独立的、可执行的包,包含了执行它所需要的所有东西:代码、运行环境、系统工具、系统库、设置。很长一段时间中,容器是专门用于Linux内核的,但微软和Docker的密切合作将容器带到了微软平台上,现在可以再Linux、windows、Azure、Mac等等操作系统上使用。

 

虚拟机和容器的区别

  磁盘占用空间更少(虚拟机除了应用的运行环境外,还需要安装操作系统。几个G,而容器只需要包含应用程序和它依赖的库)

  资源占用减少(虚拟机需要模拟硬件的行为,对内存和CPU的损耗特别大,同样配置的服务器使用容器要比使用虚拟机服务更多的客户)

  没有docker前,容器技术很复杂,不容易安装,也不容易管理实现自动化,而docker就是为了改变些。

 

什么是Docker?

   是一个由GO语言编写的程序运行的“容器”,目前容器服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、操作但愿,由直接操作虚拟主机,转换到操作程序运行的“容器”上来。

  Docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的十集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App装在Container内,通过Linux Container技术的包装将App变成一种标准化的、可移植的、自管理的组件,这种组件可以再你的Laptop上开发、调试、运行,最终非常方便和一致地运行在生产环境下。Docker的核心底层技术是(Linux Container)LXC,Docker在其上面加了薄薄的一层,添加了许多有用的功能。

  Docker不仅是历史上最流行的开源项目之一,而且也从跟上上改变了人们构建应用程序的思维方式,它可以把程序集依赖的二进制文件、第三方库等封装在一起,运行在任何安装Docker Deamon的服务器上,它有望成为未来软件自动化部署的标准。

  

Docker的目标

  “Build, Ship And Run Any APP, Anywhere” 编译,装载任何APP,在任何地方都可以运行。

  大概就是一个容器,实现了对应用的封装,部署,运行等声明周期管理,只要在(go语言依赖的环境)glibc的环境下,导出都可以运行。

 

Docker与虚拟机的区别

可见每一个虚拟机包括应用、必要的二进制文件和库、完整的客户端操作系统,大小总计十几个GB。容器包括应用和应用的所有依赖,每个容器都使用容器自身选择的发型版本,但是与其他容器共享宿主操作系统的内核。在宿主操作系统的用户空间内,他们以隔离的进程方式运行。另外,他们并不像客户端操作系统正常运行那样运行所有的进程。而且容器也补绑定任何特别的硬件基础设施,Docker容器在任何计算机任何硬件基础设施任何云上都可以运行。

更重要的是,虚拟机需要耗时几分钟才能启动,而且对资源敏感,然后容器只需要几秒启动,在资源较少负载过大时也能应付的了。所以,可以再本地计算机运行很少的几个虚拟机用于开发目的,但是可以运行很多很多的容器。

 

Docker的使用场景

  1.使用Docker容器开发、测试、部署服务

  2.创建隔离的运行环境

  3.搭建测试环境

  4.构建多用户的平台即服务(PaaS)基础设施

  5.提供软件即服务(Saas)应用程序

  6.高性能、超大规模的宿主机部署

 

Docker的基本组成

Docker是C/S架构的程序, 由下面三部分组成:

  Docker Client 客户端:Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon(守护进程 服务端)

  Docker Daemon 守护进程:Docker 守护进程,也就是Server端,Server端可以部署在本地,也可以部署在远程,因为Server端与客户端是通过Rest Ful API进行通信的。

  Docker Image 镜像:镜像是一个层叠的只读文件,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container,镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。

  Docker Container 容器:容器是Dcoker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。容器基于镜像启动和运行。

  Docker Registry 仓库:共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为:https://registry.hub.docker.com/ 也可以搭建自己私有的Docker registry

 

 

Docker的优点

  Docker提供了一种可移植的配置标准化机制,允许你一致性地在不同的机器上运行同一个Container,而LXC(Linux Container)本身可能因为不同机器的不同配置而无法方便的移植运行。

    Docker以App为中心,为应用的部署做了很多优化,而LXC的帮助脚本主要是聚焦于如何使机器启动地更快和小号更少的内存。

  Docker为App提供了一种自动化构建机制(Dockerfile),包括打包,基础设施管理和安装等。

  Docker提供了一种类似git的Container版本化的机制,允许你对你创建过的容器进行版本管理,依靠这种机制,你还可以下载别人的Container,甚至像git那样合并。

  Docker Container 是可重用的,依赖于版本化机制,你很容易重用别人的Container,作为基础版本进行扩展

  Docker Container 是共享的,有点类似github一样,Docker有自己的Index,你可以创建自己的DOcker用户并上传和下载Docker Image

  Docker提供了很多的工具链,形成了一个生态系统,这些工具的目标是自动化、个性化和集成化,包括对PASS平台的支持等。

  速度快:运行时的性能可以获取极大提升,管理操作(启动、停止、开始、重启等)都是以秒为单位的,将应用和系统容器化,不添加额外的操作系统。

  敏捷:比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到于和仍与分发灵活。

  轻量:你会拥有足够的操作系统,仅需添加或减小镜像即可。在一台服务器上可以部署100~1000个Containers容器。

  便宜:开源的、免费的、低成本的。由现代Linux内核支持驱动,轻量的Container必定可以再一个物理机上开启更多容器,注定比VM要便宜。

 

Docker的安装

官网地址:https://docs.docker.com/install/

首先要***,才能加载出google的验证码,注册 登陆后 才可以下载。

这里是下的mac版的.安装后登陆账号就可以了

打开终端输入 docker --version 检查是否安装成功

docker --version Docker version 18.03.1-ce, build 9ee9f40

 

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。

在任务栏点击 Docker for mac 应用图标 -> Perferences... -> Daemon -> Registry mirrors。在列表中填写加速器地址即可。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。

之后我们可以通过 docker info 来查看是否配置成功。

$ docker info
...
Registry Mirrors: http://hub-mirror.c.163.com Live Restore Enabled: false

转载于:https://www.cnblogs.com/baidawei/p/9198308.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[js] 写一个获取页面中所有checkbox的方法

[js] 写一个获取页面中所有checkbox的方法 function getAllCheckbox() {return [...document.querySelectorAll(input[typecheckbox])] }个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌…

vue获取浏览器地址栏参数(?及/)路由+非路由实现方式

1、? 参数 浏览器参数形式&#xff1a;http://javam4.com/m4detail?id1322914793170014208 1.1、路由取参方式 this.$route.query.id前端跳转方式&#xff1a; 一、onclick方式 <a title"测试数据"click"test(row.id)"target"_blank"&g…

python3.X 使用pip 离线安装whl包(转载)

转载https://blog.csdn.net/wangyaninglm/article/details/54177720 0. 绪论 断网的环境下配置python开发环境非常讨厌&#xff0c;本文旨在优雅暴力的解决这一问题。 生产环境 &#xff1a; windows 7 windows10 python 3.5.2 pip 1.5.2 友情提示&#xff1a;出现问题时候&…

[js] XML与JSON有什么的区别?

[js] XML与JSON有什么的区别&#xff1f; xml 可以设 id&#xff0c;用 include 之类的可以直接引用过来&#xff0c;甚至可以约定内容格式。 但 json 不依赖 js 等语言就很难完成了。好吧&#xff0c;广义上来讲&#xff0c; json 编译更简单易懂&#xff0c;体积更小&#x…

@RequestParam,@RequestBody,@PathVariable注解还分不清吗?

前言 在使用 SpringMVC 开发时&#xff0c;经常遇到前端传递的各种参数&#xff0c;比如 form 表单&#xff0c;JSON 数据&#xff0c;String[] 数组&#xff0c;再或者是最常见的 String 字符串等等&#xff0c;总之大部分场景都是在标题这三个注解来回切换&#xff0c;所以搞…

Android | Sqlite3

Android 数据库创建及使用: 创建: package he3.sd.dao;import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;/*** Created by asd25 on 2018/6/11 0011.*/public clas…

[js] flash如何与js交互?

[js] flash如何与js交互&#xff1f; 当Flash置于HTML容器中时&#xff0c;经常会遇到AS与JS的通信问题&#xff0c;例如&#xff1a;JS能否调用AS中的变量、方法&#xff0c;AS能否调用JS中的变量、方法等等。答案是肯定的。随着技术的不断发展&#xff0c;解决方案也是多种多…

PHP文件下载

步骤 //流的方式发送给浏览器 header("Content-Type: application/octet-stream"); //按照字节的返回给浏览器 header("Accept-Ranges: bytes"); //告诉浏览器文件的大小 header("Accept-Length: ".filesize(文件地址)); //以附件的形式发送给浏…

面试官:了解二叉树吗,平衡二叉树,红黑树?

前言 面试过程中&#xff0c;多多少少会问一点数据结构&#xff08;二叉树&#xff09;的问题&#xff0c;今天我们来复习一下二叉树的相关问题&#xff0c;文末总结。 1. 二叉树的由来 在 jdk1.8 之前&#xff0c;HashMap 的数据结构由「数组链表」组成&#xff0c;数组是 …

[js] 说说你对js对象生命周期的理解

[js] 说说你对js对象生命周期的理解 一切皆对象 咱们经常听到JS中“一切皆对象”&#xff1f;有没有问想过这是什么意思&#xff1f;其它语言也有“一切皆对象”之说&#xff0c;如Python。但是Python中的对象不仅仅是像JS对象这样的存放值和值的容器。Python中的对象是一个类…

(理论)数据库建模三步骤:概念模型-逻辑模型-物理模型

概念模型就是在了解了用户的需求&#xff0c;用户的业务领域工作情况以后&#xff0c;经过分析和总结&#xff0c;提炼出来的用以描述用户业务需求的一些概念的东西。如销售业务中的“客户”和“定单”&#xff0c;还有就是“商品”&#xff0c;“业务员”。 用USE CASE来描述…

java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘

执行内容&#xff1a; String a "select * from j_question j where j.status %s and j.title like %java%"; String format String.format(a, 1); System.out.println(format);拼接SQL时&#xff0c;最后需要 format 替换字符串中的 %s 占位符。 预期效果&…

[js] 在DOM上同时绑定两个点击事件(一个用捕获,一个用冒泡),事件总共会执行几次,先执行哪个事件?

[js] 在DOM上同时绑定两个点击事件&#xff08;一个用捕获&#xff0c;一个用冒泡&#xff09;&#xff0c;事件总共会执行几次&#xff0c;先执行哪个事件&#xff1f; 两次 先捕获&#xff0c;后冒泡个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易…

Jenkins: QQ/Wechat机器人群消息通知Job构建结果

简介 Jenkins是持续化集成的一个核心部件&#xff0c;它上游从仓库&#xff08;gitlab&#xff09;等拉取代码&#xff0c;经编译构建&#xff0c;将应用发布至下游目标环境&#xff1b;构建结果通知的方式有很多&#xff0c;现成的插件有邮件和钉钉方式&#xff0c;但是就方便…

[js] json和对象有什么区别?

[js] json和对象有什么区别&#xff1f; JSON 是对象&#xff0c;但对象不一定是 JSON。对象是由属性和属性值组成&#xff0c;也就是 KEY->VALUE 对。 对象中的 value 可以是任意的数据类型&#xff0c;包括函数。而 JSON 中的 value 不能为函数。个人简介 我是歌谣&…

Java中的Set对象去重

前言部分 Set<T> 去重相信大家一定不陌生&#xff0c;尤其是在 Set<String>、Set<Integer> 等等&#xff0c;但是在使用 Set<实体> &#xff0c;在不重写 equals()、hashCode() 方法情况下&#xff0c;直接使用貌似并不能生效。 所以想要 Set<实体…

openfalcon架构及相关服务配置详解

一&#xff1a;openfalcon组件 1.falcon-agent 数据采集组件 agent内置了一个http接口&#xff0c;会自动采集预先定义的各种采集项&#xff0c;每隔60秒&#xff0c;push到transfer。 2.transfer agent与transfer建立长连接&#xff0c;将数据汇报给tarnsfer transfer默认监听…

DBeaver连接达梦|虚谷|人大金仓等国产数据库

前言 工作中有些项目可能会接触到「达梦、虚谷、人大金仓」等国产数据库&#xff0c;但通常这些数据库自带的连接工具使用并不方便&#xff0c;所以这篇文章记录一下 DBeaver 连接国产数据库的通用模版&#xff0c;下文以达梦为例&#xff08;其他国产数据库连接操作方式一样&…

[js] script所在的位置会影响首屏显示时间吗

[js] script所在的位置会影响首屏显示时间吗 会&#xff0c;如果script放在头部&#xff0c;js的执行会阻塞dom树的构建个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

luogu4462 异或序列

题目大意 给出n,m,k&#xff0c;有n个数的序列&#xff0c;m次询问一段区间&#xff0c;问异或和等于K的子区间的个数。 题解 本题一看就是莫队。但要解决该题需要以下性质&#xff1a; 定理&#xff1a; $$a\oplus bc\Leftrightarrow a\oplus cb\Leftrightarrow b\oplus ca$$ …