Docker学习笔记(一)

什么是Docker

简单来说,Docker是一种容器化技术,它与传统的虚拟化技术相比更加轻量(启动更快速)。因为传统的虚拟化技术是在计算机上通过软件虚拟出另一套计算机出来,然后再在这个新的虚拟机上安装一套操作系统,所以要启动一台虚拟机,基本比启动一台真实的计算机花费的时间还要长一点。而Docker是直接运行在操作系统上的一个容器(其本质是一个Linux进程)。Docker所做的事情就是通过一些技术手段把这个“进程”(容器)与宿主机隔离(文件系统和网络上的隔离),使宿主机可以通过网络与这个“进程”通信(比如在容器中启动一个Apache服务器)。这样,对宿主机来说,感觉好像是在跟网络上的另一台计算机在通信。这些基本就是容器技术的本核心功能。所以一个容器可以秒级启动,因为本质上它只是操作系统启动一个程序进程,然后再给这个程序加一个套“壳”,使其与宿主机隔离。

Docker为什么会依赖虚拟机?

Linux的进程是只能运行在Linux操作系统上的,(这还用说?)所以如果在Linux系统上使用Docker时,可以直接在容器运行Linux程序。但是如果用户的操作系统是Windows或者Mac的话,就必须要在主机上安装一个虚拟机,然后在虚拟机上安装Linux系统,才能使用Docker来创建容器,运行Linux程序进程。以前安装Docker之前,还需要安装virtualBox之类的虚拟机软件,但是现在好像Docker的安装包里已经自带了一套虚拟机,并且安装好了Linux系统,使用起来就方便多了。

镜像

镜像就相当于一套配置好的系统运行环境的副本。比如说你想运行node程序,可以在Docker hub网站查找有没有现成node的镜像,然后通过一条简单的命令就可以将别人制作好的镜像拉取到本地镜像仓库(很方便有点像git的代码仓库)。

docker pull node

上面的命令会到docker hub镜像仓库上去下载node镜像,运行

docker images

可以查看本地镜像。不想要的镜像可以用下面的命令删除:

docker rmi  IMAGE

启动容器

我们可以基于一个镜像来启动容器,比如我们启动之前下载的node镜像的一个容器:

docker run node /bin/echo 'Hello world'

这是屏幕上会打印出Hello world,运行docker ps命令发现没有任何container在运行,上面的命令实际上启动了一个node容器,然后执行了命了 /bin/echo 'Hello world',然后任务结束后马上又关闭了容器。那么当我们不想立即退出容器,并与容器的命令行进行交互的时候,我们可以运行如下命令:

docker run -t -i node /bin/bash

之后我们看到好像通过命令行登录到了另一台Linux主机上,界面如下:

root@240a12484cd2:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

上面的命令中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i
则让容器的标准输入保持打开。这个所谓的伪终端就是当前的命令行,而他绑定了已经绑定了容器的标准输入,并且命令指定使用bash shell与容器交互,这很像是ssh登录远程的一台linux服务器,但其实你并没有登录到一台linux服务器,而是让Docker(背后是一台linux虚拟机)执行了bash/shell命令而已。

这时在宿主机上打开另一个命令行窗口,输入docker ps,可以看到有一个ID为240a12484cd2的容器正在运行(docker container ls命令等同于docker ps命令)。

CZ-20140709-003:~ b05709$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
240a12484cd2        node                "/bin/bash"         3 minutes ago       Up 3 minutes                            condescending_poincare

从上面的容器交互窗口输入exit,退出容器交互,此时运行docker ps发现该容器还在运行。现在如果我想重新进入容器,可以使用命令

docker attach 240a12484cd2

但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有
窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。一个更好的选择是使用exec命令。

docker exec -it 240a12484cd2 /bin/bash  

如果想手动关闭该容器,使用下面的命令:

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

推荐阅读更多精彩内容