Docker学习笔记(4)--镜像篇

传送门:
Docker学习笔记(1)--Docker安装(Ubuntu 16.04)
Docker学习笔记(2)--使用Docker Hub Mirror加速Docker官方镜像下载
Docker学习笔记(3)--什么是Docker镜像、容器和仓库?
Docker学习笔记(4)--镜像篇

基本概念

Docker镜像可以用来创建Docker容器,为一个只读的模板。

Docker运行容器前需要本地存在对应的镜像,如果镜像不在本地,Docker会从镜像仓库下载。

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS。在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。Docker在bootfs之上的一层是rootfs(根文件系统)。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。由于镜像不可写,所以镜像是无状态的。

docker镜像的层级结构图:


获取镜像

从Docker Hub仓库获取

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现。可以使用 docker pull 命令来从仓库获取所需要的镜像。

例如从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像:

sudo docker pull ubuntu:12.04S

有时候官方仓库注册服务器下载较慢,可以从其他仓库下载,如下所述。

从Docker Hub Mirror获取

《Docker学习笔记(2)--使用Docker Hub Mirror加速Docker官方镜像下载》介绍了如何通过DaoCloud提供Docker Hub Mirror服务进行镜像的加速下载。

例如使用ocker Hub Mirror服务下载一个 CentOS 操作系统的镜像:

dao pull centos

镜像的拉取过程如下图所示:


本地镜像

使用docker images显示本地已有镜像。

ymhou@ubuntu:~$ sudo docker images
[sudo] ymhou 的密码: 
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
aspnet-equip2                           latest              7db79b00dfc6        13 hours ago        1.352 GB
aspnet-equip                            latest              c43889d0c994        13 hours ago        828.2 MB
aspnet-hello-web                        latest              0caea7860935        13 hours ago        1.228 GB
ubuntu                                  14.04               c8ceaee85d23        5 days ago          188 MB
hello-world                             latest              c54a2cc56cbb        3 weeks ago         1.848 kB
microsoft/aspnet                        latest              137814287352        5 weeks ago         815.2 MB
daocloud.io/daocloud/daocloud-toolset   latest              1ab33797d8a1        3 months ago        150.2 MB
training/webapp                         latest              694deee4f65f        14 months ago       348.8 MB
training/postgres                       latest              ed8be1ec6753        2 years ago         364.6 MB

其中包含了如下信息:仓库,标记,ID,创建时间,大小。

其中镜像的 ID 唯一标识了镜像;
TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。

搜索镜像

Docker的特点之一是人们创建了各种各样的docker镜像。而且这些镜像已经被上传到了Docker Hub。我们可以从Docker Hub网站来搜索镜像;同样的,之前我们提到的DaoCloud也提供了镜像搜索服务。


Docker Hub

DaoCloud

我们也可以使用docker search命令来搜索镜像:

sudo docker search [server/]registry[:tag]

当未指定server时,默认从官方仓库注册服务器搜索,当未指定tag时,默认为latest版本镜像。比如搜索mysql

ymhou@ubuntu:~$ sudo docker search mysql
[sudo] ymhou 的密码: 
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                      MySQL is a widely used, open-source relati...   2748      [OK]       
mysql/mysql-server         Optimized MySQL Server Docker images. Crea...   177                  [OK]
centurylink/mysql          Image containing mysql. Optimized to be li...   46                   [OK]
sameersbn/mysql                                                            36                   [OK]
appcontainers/mysql        Centos/Debian Based Customizable MySQL Con...   8                    [OK]
marvambass/mysql           MySQL Server based on Ubuntu 14.04              6                    [OK]
alterway/mysql             Docker Mysql                                    2                    [OK]
drupaldocker/mysql         MySQL for Drupal                                2                    [OK]
azukiapp/mysql             Docker image to run MySQL by Azuki - http:...   2                    [OK]
yfix/mysql                 Yfix docker built mysql                         2                    [OK]
...

我们看到了返回了大量的mysql镜像。我们看到列表中有镜像名称、描述、Stars(衡量镜像的流行程度-如果用户喜欢这个镜像他就会点击stars)和官方自动构建镜像状态。

创建镜像

如果在官方服务器上没有自己需要的镜像,我们可以自己创建一个新的镜像。创建镜像有三种方法。

修改已有镜像

首先利用已有镜像创建容器,然后在容器里面完成我们需要的操作,最后将新的容器使用dockercommit提交到本地镜像库。

sudo docker commit -m "commit information" -a "user information" Container_ID Image:Tag

其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。

例如:

sudo docker commit -m "add new file" -a "ymhou" 0b2616b0e5a8 mysql-db:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c

利用Dockerfile创建镜像

首先生成一个创建镜像的Dockerfile文件,包含一些如何创建镜像的指令,然后运行docker build命令创建镜像。
比如下面的Dockerfile文件:

ymhou@ubuntu:~/equip$ vim Dockerfile 

From microsoft/aspnet

COPY . /app
WORKDIR /app
RUN ["dnu","restore"]

EXPOSE 5004
ENTRYPOINT ["dnx","-p","project.json","web"]

编写完成 Dockerfile 后可以使用 docker build 来生成镜像。

sudo docker build -t="aspnet-mvc:v2" .

其中 -t 标记来添加 tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

从本地文件系统导入

如果为从容器生成的镜像则使用docker import导入,如果为从镜像导出的镜像,则使用docker load导入。

导出和载入镜像

导出镜像

如果要导出镜像到本地文件,可以使用 docker save 命令。

sudo docker save -o ubuntu14.04.tar ubuntu:14.04

载入镜像

可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如:

sudo docker load --input ubuntu14.04.tar

sudo docker load < ubuntu14.04.tar

删除本地镜像

使用docker rmi命令删除本地镜像。

ymhou@ubuntu:~/equip$ sudo docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
aspnet-equip2                           latest              7db79b00dfc6        17 hours ago        1.352 GB
aspnet-equip                            latest              c43889d0c994        18 hours ago        828.2 MB
aspnet-hello-web                        latest              0caea7860935        18 hours ago        1.228 GB
ubuntu                                  14.04               c8ceaee85d23        5 days ago          188 MB
hello-world                             latest              c54a2cc56cbb        3 weeks ago         1.848 kB
microsoft/aspnet                        latest              137814287352        5 weeks ago         815.2 MB
daocloud.io/daocloud/daocloud-toolset   latest              1ab33797d8a1        3 months ago        150.2 MB
training/webapp                         latest              694deee4f65f        14 months ago       348.8 MB
training/postgres                       latest              ed8be1ec6753        2 years ago         364.6 MB
ymhou@ubuntu:~/equip$ sudo docker rmi aspnet-equip
Untagged: aspnet-equip:latest
Deleted: sha256:c43889d0c994d425a6cc4ec5333186c4aa771a7b82325a698254b95edc4ea1fa
Deleted: sha256:aee0abb3d94c523b30df01cbb4465b49d63cf2159696d6383bb2d079d6aa10e7
Deleted: sha256:411d2ea3ecbc324a13d1c72b6103e20a996d99954b15eb91b3130623323794d2
Deleted: sha256:d06161776c4b435c672fed1ee6ac54013781d253ba58581cb2cf4263aa4ca311
Deleted: sha256:5b601853e6b6ca283954848d460cecb1b385269dea98c19e59193e256e4124c9
Deleted: sha256:9409ca5cff2757904d32b3a887e171bc8ad2a0d537996d4f4da50adc491e20d4
Deleted: sha256:aa488445dd361a59d30361bd5849fc4b61763dd577436066945f67b74d5823cf

Reference

https://yeasy.gitbooks.io/docker_practice/content/index.html

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

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,404评论 0 120
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,418评论 15 147
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,795评论 2 49
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,342评论 0 27
  • 开始的开始是我们唱歌 最后的最后是我们在走 最亲爱的你象是梦中的风景 说梦醒后你会去我相信 不忧愁的脸是我的少年 ...
    M_152阅读 290评论 0 1