02 docker 学习之 image管理

02 docker 学习之 image管理

a third-party dockviz tool

Image layers site

[14:04:35] ahaomu:machines $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              07c86167cdc4        4 days ago          188 MB
hello-world         latest              690ed74de00f        4 months ago        960 B
training/webapp     latest              6fae60ef3446        9 months ago        348.8 MB

上面你会看到一个TAG 变量,其实一个repository会有很多版本的image,比如ubuntu可能有很多版本的啊,Ubuntu 10.04, 12.04, 12.10, 13.04, 13.10 and 14.04.
如果你想启动一个带有TAG的image,应该执行如下命令:

docker run -t -i ubuntu:14.04 /bin/bash

如果你想启动 ubuntuL12.04,你应该执行:

docker run -t -i ubuntu:12.04 /bin/bash

如果你不指定TAG的变量,使用ubuntu,docker默认启动latest版本的ubuntu

获得新的image

其实你可以先从docker hub上下载一个image,然后你docker run启动一个container就不用等待了

下载image

docker pull centos
docker run -t -i centos /bin/bash
[root@7b7202b7960d /]#

如果你想在docker hub上搜一个image的命令行方式,你发现你搜到了好多 sinatra的image,现在你明白你见过两种iamge repositories了

  • 像ubuntu,Official Repositories ,这个Docker repositories 由docker官方提供维护和build,此类也称之为base image和root images
  • 像ryotarai/hello-sinatra,docker 社区里的成员提供
docker search sinatra
NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
erikap/ruby-sinatra                    Docker for hosting Sinatra apps                 5                    [OK]
tdiary/rpaproxy-sinatra                                                                1                    [OK]
lucymhdavies/sinatra-boilerplate       Docker image with my boilerplate for Sinat...   1                    [OK]
zyio/sinatra                           Tiny-ish Sinatra Dockerfile                     1                    [OK]
semtech/mu-sinatra-template            Template for running Sinatra microservices      1                    [OK]
sashaegorov/docker-alpine-sinatra      Alpine Sinatra is project for running a Si...   0                    [OK]
kerona/sinatra                                                                         0                    [OK]
zoomix/sinatra-galleria                                                                0                    [OK]
larmar/sinatra-puppet                                                                  0                    [OK]
synctree/sinatra-echo                                                                  0                    [OK]
shangaijun/sinatra                                                                     0                    [OK]
windurst/sinatra                                                                       0                    [OK]
hacker314159/ruby-sinatra                                                              0                    [OK]
andyshinn/sinatra-echo                                                                 0                    [OK]
yoheimuta/docker-sinatra                                                               0                    [OK]
ryotarai/hello-sinatra                                                                 0                    [OK]
llamashoes/docker-sinatra                                                              0                    [OK]
garland/sinatra-hello                                                                  0                    [OK]
davidyoondrums/sinatra-skeleton                                                        0                    [OK]
luisbebop/docker-sinatra-hello-world                                                   0                    [OK]
torico/sinatra-async                   port 3001. for AWS                              0                    [OK]
welldoer/sinatra                       Sinatra webapp                                  0                    [OK]
zhenkyle/sinatra                       Build my own automated build `sinatra` exa...   0                    [OK]
gwjjeff/sinatra                                                                        0                    [OK]
shaoheshan/sinatra                                                                     0                    [OK]

如何下载docker image?

docker pull training/sinatra

根据image启动container

docker run -t -i training/sinatra /bin/bash

如何自己定制一个docker 镜像?

  • You can update a container created from an image and commit the results to an image.
  • You can use a Dockerfile to specify instructions to create an image.

方式1

通过image创建一个container,然后修改container之后,然后提交上去

  1. 修改container

  2. 创造一个新的docker image,你需要指定原来修改后的container的ID,其实你每次打开一个container都是不一样的,最后一个参数是编写一个docker image的名称

方式2

使用docker commit去创建一个docker image的方式有点小笨,你可以使用新的命令docker build去创建一个新的docker image,但是,首先,你需要有一个Dockerfile,

$ docker build -t ahao.mah/sinatra:v2 .
-t 指定了这个新建出来的image属于ahao.mah,repository的名字是sinatra,然后给其一个tag,v2,最后一个 “点”,是Dockerfile的路径

step1 :
首先docker会上传你的build content

step 2:
然后,你会看到 Dockerfile文件中的指令一个一个的执行,你会发现每一个指令都创建了1个container,然后指令在container里执行后,类似docker commit一样上传。

step 3:
最后返回一个 image ID

[17:44:01] ahaomu:sinatra $ docker build -t ahao.mah/sinatra:v2 .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
14.04: Pulling from library/ubuntu
5a132a7e7af1: Already exists
fd2731e4c50c: Already exists
28a2f68d1120: Already exists
a3ed95caeb02: Already exists
Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04
 ---> 07c86167cdc4
Step 2 : MAINTAINER Kate Smith <ksmith@example.com>
 ---> Running in 2cbbb997a6e6
 ---> 166f18b7e66c
Removing intermediate container 2cbbb997a6e6
Step 3 : RUN apt-get update && apt-get install -y ruby ruby-dev
 ---> Running in 681c35d72410
.
.
 ---> e0234b8ec084
Removing intermediate container 7b3fb0fd8da2
Successfully built e0234b8ec084

使用新建的image去创建一个container

[18:15:34] ahaomu:sinatra $ docker run -t -i ahao.mah/sinatra:v2 /bin/bash
root@385c4b3596d5:/#
root@385c4b3596d5:/# exit

给已有的image打新的tag

[18:16:28] ahaomu:sinatra $ docker tag e0234b8ec084 ahao.mah/sinatra:devel

Image Digests

什么是image digests?

当你docker pull 或者docker push的时候,都会返回一个digest

如何上传一个image到自己的repository?

  1. 首先我知道我的repository是ahao/ahao.mah
  2. 其次,我开始创建一个新的image,然后,push到ahao/ahao.mah这个repository里
  3. docker push ahao/ahao.mah

上传到自己的hub上失败

[14:23:11] ahaomu:docker $ docker push ahao/ahao.mah
[14:24:16] ahaomu:docker $ docker login
[14:25:32] ahaomu:docker $ curl -v https://index.docker.io:443

原因:
将dns修改成8.8.8.8

登录成功

关于container和image的思考:

  1. 使用docker run 根据一个image启动一个container后,在这个container里创建一个文件,然后退出这个container,再重新使用刚才那个image,启动一个container,发现刚才创建的文件不存在!

  2. 使用docker run根据一个image A启动一个container A,在这个container A里创建一个文件touch ahao.mah.20160308,然后根据这个container A和image A创建一个新的image B,执行 docker commit -m "add ahao.mah.20160308" -a "ahao.mah" e2a5bc22ad2d centos,新创建的image里就永远包含了 ahao.mah.20160308这个文件。

理解

一个image可以创建多个container;

docker run是创建一个container的命令,-d参数可以使得这个container 进程后台运行,docker ps可以看到当前有多少个container在运行

关于image和tag,repository的思考

docker tag 0b12de55ac0e centos:devel

使用docker tag命令,给一个image打一个TAG,就会多出一个repository,一个repository对一个TAG,一个image可以对应多个repository.

其实repository和image对应关系要一致。

从host上删除一个image
下图看来上去,貌似不是在删除一个image,而是在删除一个repository!但是,两个repository都是来自一个image,区别只是tag不一样罢了!

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

推荐阅读更多精彩内容