Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
本人引鉴了他人写的一个很形象的比喻描述来说明一下Docker:
首先你有一个 100 平方的房子(服务器),已知你(PHP 应用)需要吃喝拉撒睡觉,所以整个房子划分了卧室、厨房、卫生间等,然后供你一个人享用,但其实挺浪费的,你一个人并不需要 100 平方这么大,可能需要 20 平方(服务器占用 20%)就好了。
后来又来了个别人(Java 应用)也被安排到了这个房子里生活,他也需要吃喝拉撒睡,所以你们挤在了一个床上,用一个卫生间(比如 http 服务器)。如果你改了你的习惯(例如 http 服务配置项)同样会影响别人的生活。
后来又来了人(Node 应用),这时候房东发现房子不够大了,所以搬家(迁移、升级服务器)到另一个 150 平的房子,但是搬家成本好高。由于户型不同(系统版本、环境等)需要装修好久,此外还要把住户(应用代码)搬过来,还需要把住户自定义的习惯都带过来简直麻烦死了。
这时候,房东了解到了一个叫 Docker 的产品。
Docker 是一个可自由伸缩的集装箱房屋。
这个集装箱房屋虽小但是五脏俱全,而且可以满足一切用户需求,并支持高度自定义,比如 Node 这位住户不需要厨房,那么他的集装箱房子就小一点,当然房租(服务器消耗)也便宜一些。
房东用了 Docker 这个产品之后,发现租房这个事情变简单了:
(1)房东不需要划分卫生间、厨房、卧室并进行装修了,一切由用户自己定制集装箱。房东只需要把集装箱放到房间里即可。
(2)住户也不需要打架了,以前一起付房租(消耗服务器资源),现在按照自己集装箱大小付费。而且你可以在你集装箱里面随便折腾,爱怎么改配置就怎么改,也不会影响到别人。
(3)集装箱对于空间的使用,更加直观,房东可以更轻松了解到当前房间的空间使用率等,以便升级房间。
(4)房东搬新家的时候也开心了,只要把一面墙炸开,把里面一个个集装箱直接移过去新房子就好了,啥也不需要配置,都在集装箱里面呢。
你就是房东。房间是服务器,空间大小表示服务器硬件配置。
住户就是你的业务、应用,提供服务的。
伸缩集装箱房屋,就是 Docker 容器,里面是完全分离、独立、自由的环境和业务代码。你可以在里面装一个 Ubuntu(消耗大)或者简版的、可以跑业务代码的环境(消耗低)。
Docker 抹平系统差异,相当于把你多个房间都砸成长方形方便存放集装箱。这样你可以快速把独立容器丢到各个配置了 Docker 的不同系统、硬件配置的服务器上面。
因此也可以得到很高的伸缩性,可以瞬间部署很多服务器很多容器,然后负载均衡来提供大促服务等。
通过cgroups和namesapce进行实现资源隔离,实现一台机器运行多个容器互不影响。
使用docker,开发人员可以利用镜像快速构建一套标准的研发环境;开发完成后,测试和运维人员可以直接通过使用相同的环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。
docker容器的运行不需要额外的虚拟化管理程序的支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
docker容器几乎可以在任意的平台上运行,包括乌力吉、虚拟机、公有云、私有云、个人电脑、服务器等,这种兼容性让用户可以在不同平台之间轻松的迁移应用。
yum install docker
service docker start
查看docker版本:
docker version
测试:
docker run hello-world
查看docker的安装包
yum list installed | grep docker
Docker的镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 centos操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
创建镜像有多种方式。
镜像可以用来创建 Docker 容器。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
Docker 利用容器来运行应用。
镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
容器 = 镜像 + 读写层。
一个镜像可创建多个容器,每个容器都有各自的一个可读写层,这些容器又相互独立,但共享一个的镜像。
仓库是集中存放镜像的地方。
目前Docker官方仓库维护了一个公共仓库https://hub.docker.com,其中已经包括15000多个的镜像。
大部分需求都可以通过在Docker Hub中直接下来镜像来实现。
用户可以通过 docker search命令来查找官方仓库中的镜像,并利用docker pull 下载到本地,可以通过docker push 命令将本地镜像推送到docker hub。
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。
数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。
1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。
2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,
就可以在其他容器中通过–volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。
3)如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。
这样,即使删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。
4)不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的。备份的方法可以是创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,
然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。
docker search
使用docker search 命令可以搜索远端仓库中共享的镜像,默认搜索Docker hub官方仓库中的镜像。
docker pull
使用docker pull 命令从网络上下载镜像。对于镜像来说,如果不显式地指定tag,则默认会选择latest标签,即下载仓库中最新版本的镜像。
docker images
使用docker images 命令可以列出本地主机上已有的所有镜像。
docker inspect
使用docker inspect 命令返回的是一个JSON的格式消息,如果我们只要其中的一项内容时,可以通过-f参数来指定。Image_id通常可以使用该镜像ID的前若干个字符组成的可区分字符串来替代完成的ID。
可以具体到查看镜像的某条信息,比如MySQL的镜像id。
docker inspect -f {
{.Id}} mysql
docker rmi
使用docker rmi 命令可以删除镜像,其中image可以为标签或ID。当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。
docker save -o
-o:设置存储压缩后的文件名称
使用docker save命令来迁出镜像,其中image可以为标签或ID。
docker load --input
使用docker load命令可以载入镜像,其中image可以为标签或ID。这将导入镜像及相关的元数据信息(包括标签等),可以使用docker images命令进行查看。
docker push
使用docker push命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录)
docker ps
查看当前正在运行的容器
docker ps -a
查看所有的容器
CONTAINER ID:docker守护进程启动容器时候为容器分配的唯一id
NAMES:docker守护进程启动容器时候为容器分配的名称
docker rm
使用docker rm命令删除终止状态的容器。
docker start
使用docker start命令重启已经停止状态的容器。
docker stop
使用docker stop命令停止容器。
docker logs
--details(显示提供给日志的额外细节)
-follow或-f(按日志输出)
–since(从某个时间开始显示)
--tail(从日志末尾多少行开始显示)
–timestamps或-t(显示时间戳)
–until(打印某个时间以前的日志)
使用docker logs命令获取容器的日志。
docker top
使用 docker top 可以查看运行中容器的进程
docker port
使用 docker port 可以查看映射端口配置
文章浏览阅读965次,点赞18次,收藏21次。现在我们有了 2021 年和 2023 年的 NDVI 数据帧,我们需要从 2021 年的值中减去 2023 年的值以捕获 NDVI 的差异。该数据集包括像素级别的植被值,我们将编写一个自定义函数来根据红色和绿色波段的表面反射率计算 NDVI。在我的上一篇文章中,我演示了如何将单个多边形分割/镶嵌为一组大小均匀的六边形。现在我们有了植被损失数据,让我们使用 Kepler.gl 可视化每个六边形的植被损失。将地图保存为 HTML 文件,在浏览器中打开 HTML 以获得更好的视图。现在我们将调用该函数并使用、
文章浏览阅读3.3k次,点赞6次,收藏5次。正态分布,又称高斯分布或钟形曲线,是统计学中最为重要和常用的分布之一。_echarts正态分布图
文章浏览阅读217次。首先要在Mainfest.xml中加入所需要的权限:[html] view plain copyprint?uses-permission android:name="android.permission.SEND_SMS"/> uses-permission android:name="android.permission.READ_SMS"/> _android bundle.get("pdus");
文章浏览阅读2.6k次。0、说明最近在学习 Data Assimilation Research Testbed (DART) 相关内容,其软件是在 Unix/Linux 操作系统下编译和运行的 ,由于我的电脑是 Windows 10 的,DART 推荐可以使用 Windows Subsystem For Linux (WSL) 来创建一个 Windows 下的 Linux 子系统。以下的内容主要介绍如何安装 WSL2,以及 WSL2 的联网。1、如何在 Windows 10 下安装WSL具体的安装流程可以在 microso_wsl2 联网
文章浏览阅读1k次。DB_LINK 介绍在本机数据库orcl上创建了一个prod_link的publicdblink(使用远程主机的scott用户连接),则用sqlplus连接到本机数据库,执行select * from scott.emp@prod_link即可以将远程数据库上的scott用户下的emp表中的数据获取到。也可以在本地建一个同义词来指向scott.emp@prod_link,这样取值就方便多了..._添加 database link重复的数据库链接命
文章浏览阅读3.1k次。ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC)支持跨终端、全平台之间互通,从零开始快速搭建实时音视频通信平台1.返回顶部 1、腾讯实时音视频(Tencent Real-Time Communication,TRTC)拥有QQ十几年来在音视频技术上的积累,致力于帮助企业快速搭建低成本、高品质音视频通讯能力的完整解决方案。..._腾讯实时音视频 分享链接
文章浏览阅读534次,点赞10次,收藏8次。编写一个完整的日历表需要处理许多细节,包括公历和农历之间的转换、节气、闰年等。运行程序后,会输出指定年份的日历表。注意,这个程序只是一个简单的示例,还有很多可以改进和扩展的地方,例如添加节气、节日等。_农历库c语言
文章浏览阅读1w次,点赞28次,收藏27次。FL Studio21.1.1.3750中文破解版是最优秀、最繁荣的数字音频工作站 (DAW) 之一,日新月异。它是一款录音机和编辑器,可让您不惜一切代价制作精美的音乐作品并保存精彩的活动画廊。为方便用户,FL Studio 21提供三种不同的版本——Fruity 版、Producer 版和签名版。所有这些版本都是独一无二的,同样具有竞争力。用户可以根据自己的需要选择其中任何一种。FL Studio21.1.1.3750中文版可以说是一站式综合音乐制作单位,可以让您录制、作曲、混音和编辑音乐。_fl studio 21 注册机
文章浏览阅读1.3k次。冯诺依曼计算机工作原理冯 诺依曼计算机工作原理的核心是 和 程序控制世界上不同型号的计算机,就其工作原理而言,一般都是认为冯 诺依曼提出了什么原理冯 诺依曼原理中,计算机硬件系统由那五大部分组成的 急急急急急急急急急急急急急急急急急急急急急急冯诺依曼结构计算机工作原理的核心冯诺依曼结构和现代计算机结构模型 转载重学计算机组成原理 一 冯 诺依曼体系结构从冯.诺依曼的存储程序工作原理及计算机的组成来..._简述冯诺依曼计算机结构及工作原理
文章浏览阅读559次。这次在随机乱下的基础上加上了一些简单的处理,如进营、炸棋、吃子等功能,在和敌方棋子产生碰撞之后会获取敌方棋子大小的一些信息,目前采用的是事件驱动模型,当下完一步棋界面返回结果后会判断是否触发了相关事件,有事件发生则处理相关事件,没有事件发生则仍然是随机下棋。1.事件驱动模型首先定义一个各种事件的枚举变量,目前的事件有工兵吃子,摸暗棋,进营,明确吃子,炸棋。定义如下:enum MoveE..._军棋引擎
文章浏览阅读85次。1, 模板观念与函数模板简单模板: template< typename T > T Function( T a, T b) {… }类模板: template struct Object{……….}; 函数模板 template< class T> inline T Function( T a, T b){……} 不可以使用不同型别的..._geekband 讲义
文章浏览阅读158次。"^\d+$" //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$" //正整数"^((-\d+)|(0+))$" //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$" //负整数"^-?\d+$" //整数"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0..._vb.net 正则表达式 取html中的herf