制作镜像
如果想要制作自己的镜像,需要自己写 Dockerfile 。具体步骤如下
1、创建一个文件夹 mkdir wdxtub; cd wdxtub,构造镜像所需的所有东西都会放在这个文件夹中
2、创建一个名为 Dockerfile 的文件 gedit Dockerfile
3、添加第一句话 FROM docker/whalesay:latest,表示我们的镜像以 whalesay 为基础
4、添加需要运行的命令,如 RUN apt-get -y update && apt-get install -y fortunes(fortunes 这个程序会输出名言警句)
5、通过 CMD 指定镜像载入之后需要执行的命令,如 CMD /usr/games/fortune -a | cowsay
6、保存并关闭 Dockerfile
7、使用 sudo docker build -t wdx-whale . 来构造镜像,简单来说就是用 Dockerfile 中的内容按步骤构造
8、使用 docker images 应该就可以看到我们新创建的镜像

文章插图
然后我们就可以运行一下看看 docker run wdx-whale

文章插图
还有更贱的(感觉可以玩一天)

文章插图
如果想要把自己的镜像上传到网上,就需要注册一个 Docker Hub 帐号,然后点击 Create Repository,这里我创建了一个名为 wdxtub/demo 的公用仓库 。
接下来我们需要打上 tag,目前 docker images 的情况是:

文章插图
记住我们的 IMAGE ID 26ac9649d7da 。用以下命令打 tag docker tag 26ac9649d7da wdxtub/wdx-whale:latest,然后再 docker images 一次:

文章插图
然后用这个命令登录 docker login --username=yourhubusername --email=youremail@company.com,对于我来说就是 docker login --username=wdxtub --email=dacrocodilee@gmail.com
成功之后大概是这样:

文章插图
然后就可以 push 上去了 docker push wdxtub/wdx-whale,像下面这样

文章插图
为了测试 pull 自己的镜像,我们先把本地上的 whale 镜像删掉:docker rmi -f wdxtub/wdx-whale; docker rmi -f wdx-whale(如果有其他的用不着的也都删掉),最后剩下(上课要用的镜像):

文章插图
接着来运行一下 docker run wdxtub/wdx-whale
管理镜像
我们可以把镜像导出到本地文件,使用 docker save 命令即可,比如针对我现在有的镜像 wdxtub/wdx-whale(id:26ac9649d7da),可以这样:docker save -o wdx-local-whale.tar wdxtub/wdx-whale 。如果要载入的话,使用下面的命令即可(会载入相关的元数据信息)
docker load --input wdx-local-whale.tar# 或者docker load < wdx-local-whale.tar在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器.
sudo docker rmi $(docker images -q -f "dangling=true")
镜像的实现原理
Docker 镜像是怎么实现增量的修改和维护的?每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去 。
通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作 。Docker 在 AUFS 上构建的容器也是利用了类似的原理 。
容器
启动
举个例子,
后台运行
更多的时候,需要让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下 。此时,可以通过添加 -d 参数来实现 。
下面举两个例子来说明一下 。
如果不使用 -d 参数运行容器 docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 容器会把输出的结果(STDOUT)打印到宿主机上面

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