一个简单的例子
接下来我们用一个简单的例子来体验下 docker
容器小介绍
容器是独立运行的一个或一组应用,以及它们的运行态环境 。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用 。
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动 。因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器(对于初级应用来说后者更方便) 。
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
可以利用 docker start 命令,直接将一个已经终止的容器启动运行 。
运行容器
现在,我们来创建一个 ubuntu:14.04 的容器 docker run ubuntu:14.04 /bin/echo 'Hello wdx!'(结果如下图所示)

文章插图
可以看到正确输出了我们的 “Hello wdx!”
接下来,我们用 docker run -t -i ubuntu:14.04 /bin/bash 可以启动一个 bash 终端用来交互 。参数的意思是:
- -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
- -i 则让容器的标准输入保持打开
我们可以输入一些命令来测试

文章插图
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的 。除此之外,并没有其它的资源 。我们用 ps 或 top 在伪终端中查看进程信息,可以看到只有我们运行的进程,没有其他花里胡哨的(上图最后一条命令)
试一试如下命令
- cat /etc/hosts
- ip a
- ps -aux
- cd ~ && echo "hello wdx" > hello.txt && cat hello.txt
(细心的同学可能会发现这里的输出暗藏玄机)
操作完成后,输入 exit 便可以退出这个 ubuntu 容器 。退出之后这个容器依然存在,我们可以用 docker ps -l来看看:

文章插图
每个容器有一个 Container ID 和 Name,我们一般就是通过这俩来定位一个容器的 。
镜像
我们可以使用 docker pull 命令从仓库中获取所需要的镜像 。比如说 sudo docker pull ubuntu:12.04,相当于 sudo docker pull registry.hub.docker.com/ubuntu:12.04,即从注册服务器 registry.hub.docker.com中的 ubuntu 仓库来下载标记为12.04 的镜像 。
如果想从其他仓库注册服务器下载,需要输入完成的地址,例如:sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
下载完成之后就可以使用该镜像了,比如下面的语句就会创建容器,其中运行 bash:sudo docker run -t -i ubuntu:12.04 /bin/bash
可以使用 dokcer images 来显示本地已有的镜像,如下

文章插图
具体字段的意思一目了然,这里不再赘述 。然后我们来运行官方例子 whalesay 镜像 。
运行镜像
打开浏览器,进入 Docker Hub

文章插图
搜索 whalesay 这个镜像,就可以看到结果,点进去可以看到详细内容(基于 Ubuntu)

文章插图
然后我们来运行一下,使用命令 docker run docker/whalesay cowsay boo,其中 cowsay 是要运行的命令,后面的 boo 是参数 。
Docker 会先在本地查找有没有镜像,如果没有就从仓库中下载,具体的运行结果是:

文章插图
也可以让鲸鱼说不同的话,比如:

文章插图
推荐阅读
- 谷歌最流行的序列化格式:Protobuf 语言指南
- 简单易懂的葡萄酒指南,让你告别尴尬式评价“哇!真好喝!”
- 最简单修改Docker存储位置
- 附推荐价格 网上高性价比大米选购指南
- 红茶是属于发酵茶吗?
- 如何使用Docker部署MongoDB副本集
- 春运路上的健康指南 避免久坐导致下肢浮肿
- 油烟机购买指南——选择恐惧症的患者看过来,只买对的不买贵的
- 夏季减肥指南,普洱茶 消除多余脂肪的高手
- 四款完全免费的音频效果器
