docker

1.docker    镜像  容器

2.docker与虚拟机

3.docker简单操作


1.docker    镜像  容器

1.1 docker

      Docker是一个基于轻量级虚拟化技术的容器,整个项目基于Go语言开发,并采用了Apache 2.0协议。Docker可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下。

举例:

        我写了一个5g基站通讯系统,该系统的技术栈非常广,需要依赖于各种开源库和中间件。如果按照纯手动的部署方式,我需要安装各种开源软件,还需要写好每个开源软件的配置文件。如果只是部署一次,这点时间开销还是可以接受的,但如果我每隔几天就需要换个服务器去部署这个程序,那么这些繁琐的重复工作无疑是会令人发狂的。这时候,Docker的用处就派上场了,我只需要根据应用程序的部署步骤编写一份Dockerfile文件(将安装、配置等操作交由Docker自动化处理),然后构建并发布他的镜像,这样,不管在什么机器上,我都只需要拉取他需要的镜像,然后就可以直接部署运行了,这正是Docker的魅力所在。

1.2  镜像

镜像是Docker中的一个重要概念:

      它类似于虚拟机中使用到的镜像,由于任何应用程序都需要有它自己的运行环境,Image就是用来提供所需运行环境的一个模板。

      Docker你可以与其他人共享你的Image,但是提倡每个Image都遵循单一职责原则,也就是只做好一件事。

1.3  容器

      Container是Docker提供的一个抽象层,它就像一个轻量级的沙盒,其中包含了一个极简的Linux系统环境与运行在其中的应用程序。

    Container是Image的运行实例(Image本身是只读的,Container启动时,Docker会在Image的上层创建一个可写层,任何在Container中的修改都不会影响到Image,如果想要在Image保存Container中的修改,Docker采用了基于Container生成新的Image层的策略),Docker引擎利用Container来操作并隔离每个应用(也就是说,每个容器中的应用都是互相独立的)。

        我们可以从从Docker与Container的英文单词原意中就可以体会出Docker的思想。

        Container可以释义为集装箱,集装箱是一个可以便于机械设备装卸的封装货物的通用标准规格,它的发明简化了物流运输的机械化过程,使其建立起了一套标准化的物流运输体系。

        Docker的意思为码头工人,可以认为,Docker就像是在码头上辛勤工作的工人,把应用打包成一个个具有某种标准化规格的"集装箱"(其实这里指出的集装箱对应的是Image,在Docker中Container更像是一个运行中的沙盒),当货物运输到目的地后,码头工人们(Docker)就可以把集装箱拆开取出其中的货物(基于Image来创建Container并运行)。这种标准化与隔离性可以很方便地组合使用多个Image来构建你的应用环境。

2. docker 与虚拟机

        我们知道Docker是基于轻量级虚拟化技术的,所以它与我们平常使用的虚拟机是不一样的。

虚拟机技术可以分成以下两类:

系统虚拟机:通过软件对计算机系统的模拟来提供一个真实计算机的替代品。它是物理硬件的抽象并提供了运行完整操作系统所需的功能。虚拟机通过物理机器来管理和共享硬件,这样实现了多个虚拟机环境彼此之间的隔离,一台机器上可以运行多个虚拟机,每个虚拟机包括一个操作系统的完整副本。在系统虚拟机中,所运行的所有软件或操作都只会影响到该虚拟机的环境。我们经常使用的VMWare就是系统虚拟机的实现。

程序虚拟机:允许程序独立运行在平台之外。比较典型的例子就是JVM,Java通过JVM这一抽象层使得Java程序与操作系统和硬件平台解耦(因为每个Java程序都是运行在JVM中的),因此实现了所谓的compile once, run everywhere。

        Docker所用到的技术与上述两种都不相同,它使用了更轻量级的虚拟化技术,多个Container共享了同一个操作系统内核,并且就像运行在本地上一样。Container技术相对于虚拟机来说,只是一个应用程序层的抽象,它将代码与依赖关系打包到一起,多个Container可以在同一台机器上运行(意味着一个虚拟机上也可以运行多个Container),并与其它Container共享操作系统内核,每一个Container都在用户空间中作为一个独立的进程运行,这些特性都证明了Container要比虚拟机更加灵活与轻量(一般都是结合虚拟机与Docker一起使用)。

图片发自简书App

        Container技术其实并不是个新鲜事物,最早可以追溯到UNIX中的chroot(在1979年的V7 Unix中引入),它可以改变当前正在运行的进程及其子目录的根目录,在这种修改过的环境下运行的程序不能在指定的目录树之外访问文件,从而限制用户的活动范围,为进程提供了隔离空间。之后各种Unix版本涌现出很多Container技术,在2006年,Google提出了"Process Containers"期望在Linux内核中实现进程资源隔离的相关特性,由于Container在Linux内核中的定义过于宽泛混乱,后来该项目改名为CGroups(Control Groups),实现了对进程的资源限制。2008年,LXC(Linux Containers)发布,它是一种在操作系统层级上的虚拟化方法,用于在Linux系统上通过共享一个内核来运行多个互相隔离的程序(Container)。LXC正是结合了Linux内核中的CGroups和对分离的名称空间的支持来为应用程序提供了一个隔离的环境。而Docker也是基于LXC实现的(Docker的前身是dotClound公司中的内部项目,它是一家提供PaaS服务的公司。),并作出了许多改进。

3.docker的简单操作

1.docker ps 显示当前正在运行的容器

2.docker ps -a 显示所有状态的容器

3.docker ps -n 3 显示最后被创建的n个容器(注意:不限状态)

4.docker ps -q 只显示容器ID

5.docker ps -s 显示容器文件大小

6.docker –version 查看当前docker版本

7.docker run hello-word 测试docker安装是否有效

8.docker image ls 显示当前计算机的镜像

9.docker container ls 显示正在运行的容器

10.docker container ls –all 显示所有容器

11.docker build -t image_name . 创建一个docker镜像,使用-t表示镜像的名称

12.sudo service docker start 启动docker服务

13.sudo service docker stop 关闭docker服务

14.sudo service docker restart 重启docker服务

15.docker container stop ID 结束这个进程

16.docker build -t image_name . 创建一个docker镜像

17.docker container rm ID 删除容器

18.docker image rm ID 删除镜像

19.docker login 登录docker

20.docker tag image(镜像名称) username(docker注册的用户名)/respository(仓库名):tag(tag名)

21.docker push username/resposity:tag 上传镜像

22.docker run -p 4000:80 username/respository:tag 可以在任何计算机上运行


        Docker提供了非常强大的自动化部署方式与灵活性,对多个应用程序之间做到了解耦,提供了开发上的敏捷性、可控性以及可移植性。同时,Docker也在不断地帮助越来越多的企业实现了向云端迁移、向微服务转型以及向DevOps模式的实践。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354