renshanshan 发表于 2018-5-28 12:44:52

创建属于自己的docker镜像

docker镜像是容器的基础,当每次执行docker run时就是在对docker说现在我需要哪个镜像。如果在你的docker主机上没有这个镜像,docker会自动从一个registry上下载这个镜像(默认为docker hub)
在这一节,我们将会探讨更多的关于docker镜像的内容:


[*]管理和使用本地镜像
[*]创建基础镜像
使用docker images命令列出本地的docker镜像

# docker images
REPOSITORY            TAG               IMAGE ID            CREATED             SIZE
docker-whale          latest            05bfcfec1909      7 days ago          252.7 MB
docker/docker-whale   latest            05bfcfec1909      7 days ago          252.7 MB
nginx               latest            e43d811ce2f4      2 weeks ago         181.4 MB
ubuntu                latest            f753707788c5      3 weeks ago         127.1 MB你可以看到所有之前用过的镜像,同时通过列出所有镜像,我们可以知道三个很重要的信息


[*]每个镜像来自于那个仓库(repository)
[*]每个惊喜的标签是什么(tag)
[*]每个镜像的IMAGE ID
一个镜像仓库中对于一个镜像可能有多个不同的变体,比如说对于ubuntu来说,我们可能会找到Ubuntu 10.04, 12.04, 12.10, 13.04, 13.10 and 14.04这么多不同的变体,所以我们会通过一个标签(tag)来区分不同的变体,如下所示
ubuntu:14.04  所以,当你要创建一个容器时,你可以参考下面来标记镜像

$ docker run -t -i ubuntu:14.04 /bin/bash如果你想创建一个Ubuntu 12.04的容器,请参考下面:
$ docker run -t -i ubuntu:12.04 /bin/bash如果你没有指定标签,我们还用ubuntu举例,docker会默认使用ubuntu:latest镜像
  Tip:我们应该尽量指定镜像标签,例如ubuntu:14.04,那样我们就能精确地知道我们使用的是哪个镜像,对我们后期的排查和调试会有很大帮助
  现在获取一个新的镜像
$ docker pull centos
Using default tag: latest
latest: Pulling from library/centos
f1b10cd84249: Pull complete
c852f6d61e65: Pull complete
7322fbe74aa5: Pull complete
Digest: sha256:90305c9112250c7e3746425477f1c4ef112b03b4abe78c612e092037bfecc3b7
Status: Downloaded newer image for centos:latest  查找一个镜像
$ docker search sinatra
NAME                                 DESCRIPTION                                     STARS   OFFICIAL   AUTOMATED
training/sinatra                     Sinatra training image                        0                  
marceldegraaf/sinatra                  Sinatra test app                              0
mattwarren/docker-sinatra-demo                                                                  0. . .  如果这其中有你需要的镜像,你就可以把它pull到本地了

$ docker pull training/sinatra  创建一个我们自己的镜像

  我们从docker hub上下载的镜像可能不能完全满足我们的实际需要,这时候我们就需要对他做一些更新或修改了,我们主要更新或修改一个镜像的方式主要有以下两种:


[*]  先用镜像创建出一个容器,然后对容器做修改,最后将容器提交(commit)为一个新的镜像
首先创建一个容器
$ docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#
在容器内安装一些需要的软件包
root@0b2616b0e5a8:/# apt-get install -y ruby2.0-dev ruby2.0
将这个容器提交为新的镜像
$ docker commit -m "Added json gem" -a "Kate Smith" \
0b2616b0e5a8 ouruser/sinatra:v2
之后通过这个镜像创建的容器就会有上面安装的软件包了

[*]  可以用Dockerfile去创建一个指定的镜像
首先创建一个目录和一个Dockerfile
$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile
向Dockerfile中写入指令
# This is a comment
FROM ubuntu:14.04
MAINTAINER Kate Smith <ksmith@example.com>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra
然后就可以通过build命令创建自己定制的镜像
$ docker build -t ouruser/sinatra:v2 .  Note:一个镜像最多不能超过127层,这是为了使镜像的整体大小处在一个最佳状态的全局设置

页: [1]
查看完整版本: 创建属于自己的docker镜像