Docker学习(三)——Docker镜像使用

Docker镜像使用
    当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载。

1、镜像使用
    (1)列出镜像列表:docker images
        使用docker images来列出本地主机上的镜像

docker images          
	REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
	ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
	php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
	nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
	mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
	httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
	ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
	hello-world         latest              690ed74de00f        6 months ago        960 B
	training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB
各个选项说明:
	REPOSITORY:表示镜像的仓库源
	TAG:镜像的标签
	IMAGE ID:镜像ID
	CREATED:镜像创建时间
	SIZE:镜像大小
同一仓库源可以有多个TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker 将默认使用ubuntu:latest 镜像。

    (2)获取一个新的镜像:docker pull
        当我们在本地主机上使用一个不存在的镜像时Docker就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用docker pull命令来下载它。
    (3)查找镜像:docker search
        使用docker search命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过docker search命令搜索httpd来寻找适合我们的镜像。

docker search httpd
各个选项说明:
	NAME:镜像仓库源的名称
	DESCRIPTION:镜像的描述
	OFFICIAL:是否docker官方发布
	stars: 类似Github里面的star,表示点赞、喜欢的意思。
	AUTOMATED: 自动构建。

    (4)运行镜像:docker run 镜像名
    (5)删除镜像:docker rmi 镜像名
    (6)创建镜像
        当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改:
        ①从已经创建的容器中更新镜像,并且提交这个镜像。
        ②使用Dockerfile指令来创建一个新的镜像。

2、更新镜像
      i.更新镜像之前,我们需要使用镜像来创建一个容器。

runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash                            
root@1a9fbdeb5da3:/# 

      ii.在运行的容器内使用 apt-get update 命令进行更新。
        在完成操作之后,输入exit命令来退出这个容器。
      iii.此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令docker commit来提交容器副本。

runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
 各个参数说明:
	-m:提交的描述信息
	-a:指定镜像作者
	e218edb10161:容器ID
    runoob/ubuntu:v2: 指定要创建的目标镜像名

      iv.我们可以使用docker images命令来查看我们的新镜像runoob/ubuntu:v2:

  runoob@runoob:~$ docker images
	REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
	runoob/ubuntu       v2                  70bf1840fd7c        15 seconds ago      158.5 MB
	ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
	php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
	nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
	mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
	httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
	ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
	hello-world         latest              690ed74de00f        6 months ago        960 B
	training/webapp     latest              6fae60ef3446        12 months ago       348.8 MB

      v.使用我们的新镜像runoob/ubuntu 来启动一个容器

  runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash                            
  root@1a9fbdeb5da3:/#

3、构建镜像
      使用命令docker build,从零开始来创建一个新的镜像。
      i.创建一个Dockerfile文件,其中包含一组指令来告诉Docker如何构建我们的镜像

runoob@runoob:~$ cat Dockerfile 
FROM            centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

      ii.使用Dockerfile文件,通过docker build命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 .
	Sending build context to Docker daemon 17.92 kB
	Step 1 : FROM centos:6.7
	 ---> d95b5ca17cc3
	Step 2 : MAINTAINER Fisher "fisher@sudops.com"
	 ---> Using cache
	 ---> 0c92299c6f03
	Step 3 : RUN /bin/echo 'root:123456' |chpasswd
	 ---> Using cache
	 ---> 0397ce2fbd0a
	Step 4 : RUN useradd runoob
	......
参数说明:
	-t:指定要创建的目标镜像名
	. :Dockerfile文件所在目录,可以指定Dockerfile的绝对路径

      iii.使用docker images查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

  runoob@runoob:~$ docker images 
	REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
	runoob/centos       6.7                 860c279d2fec        About a minute ago   190.6 MB
	runoob/ubuntu       v2                  70bf1840fd7c        17 hours ago         158.5 MB
	ubuntu              14.04               90d5884b1ee0        6 days ago           188 MB
	php                 5.6                 f40e9e0f10c8        10 days ago          444.8 MB
	nginx               latest              6f8d099c3adc        12 days ago          182.7 MB
	mysql               5.6                 f2e8d6c772c0        3 weeks ago          324.6 MB
	httpd               latest              02ef73cf1bc0        3 weeks ago          194.4 MB
	ubuntu              15.10               4e3b13c8a266        5 weeks ago          136.3 MB
	hello-world         latest              690ed74de00f        6 months ago         960 B
	centos              6.7                 d95b5ca17cc3        6 months ago         190.6 MB
	training/webapp     latest              6fae60ef3446        12 months ago        348.8 MB

      iv.使用新的镜像来创建容器

runoob@runoob:~$ docker run -t -i runoob/centos:6.7  /bin/bash
[root@41c28d18b5fb /]# id runoob
uid=500(runoob) gid=500(runoob) groups=500(runoob)

      v.设置镜像标签:docker tag

使用docker tag命令,为镜像添加一个新的标签:
docker tag 镜像ID 新的标签名
原文地址:https://www.cnblogs.com/shujk/p/13664358.html