Docker实践(二)镜像

目录

从仓库获取镜像

管理本地主机的镜像

创建镜像

修改已有镜像

使用Dockerfile创建镜像

从本地文件系统导入镜像

上传镜像

存出和载入镜像

清理镜像


Docker使用镜像创建容器,Docker创建容器时需要本地存在对应的镜像,如果镜像不存在Docker会自动尝试从远程仓库下载镜像(默认从Docker Hun公共注册服务器中的仓库)

扫描二维码关注公众号,回复: 3734591 查看本文章

从仓库获取镜像

使用docker pull命令从远程仓库获取所需镜像。

下面的例子是从Docker Hub仓库下载一个Centos操作系统的镜像

$ docker pull centos:7.2.1511

docker pull centos:7.2.1511命令等价于 docker pull registry.hub.docker.com/centos:7.2.1511,即从注册服务器registry.hub.docker.com的centos仓库下载标记为7.2.1511的镜像

在国内访问官方服务器比较慢,可以从其他仓库下载,docker pull命令可以指定从其他仓库下载,如:

$ docker pull xxxxxxx.docker.com/centos:7.2.1511

下载完成后,就可以使用镜像了,如创建一个容器,让其中运行bash应用:

$ docker run -t -i centos:7.2.1511 /bin/bash

管理本地主机的镜像

查看本地镜像列表

$ docker images

REPOSITORY 仓库信息

TAG 镜像标签,如7.2.1511,用来区分来自于一个仓库的不通镜像

IMAGE ID 镜像唯一标识

CREATED 创建时间

SIZE 镜像大小

如下,启动一个容器,如果不指定tag,默认使用latest标记信息

$ docker run -t -i centos:7.2.1511 /bin/bash

创建镜像

创建镜像有很多方法,用户可以从Docker Hub获取已有镜像并更新,也可以利用本地文件系统创建镜像

修改已有镜像

先使用下载的镜像启动容器

$ docker run -t -i centos:7.2.1511 /bin/bash,记住容器ID,后面提交时候用到。

在容器中新增脚本,退出,现在容器已经被改变了,使用docker commit命令提交更新后的版本

$ docker commit -m "add a.sh" -a "daweibalang" 82fe72fdf2a2 centos:myversion

其中-m指定提交说明信息,-a执行修改人信息,后面是用来创建镜像的容器的ID,最后指定目标镜像的仓库名和tag信息,创建成功后会返回这个镜像的ID信息。

创建成功后,使用docker images查看镜像信息。

使用新的镜像启动docker容器

$ docker run -t -i centos:myversion /bin/bash

使用Dockerfile创建镜像

使用docker commit来扩展一个镜像比较简单,但是在一个团队修改镜像很难。可以使用docker build创建镜像,首先需要创建Dockerfile,Dockerfile中包含创建镜像的指令。

新建一个目录和一个Dockerfile

$ mkdir test

$ cd test

$ touch Dockerfile

 

Dockerfile中的每一条指令,都是创建镜像的一步

#注释

FROM centos:7.2.1511

MAINTAINER Docker Newbee <[email protected]>

RUN yum -y install vim

 

Dockerfile的基本语法

  • #后面的内容标识注释
  • FROM指令指定要创建镜像的基础镜像
  • MAINTAINER是维护者歇息
  • RUN指令是在创建镜像时运行的指令,比如,上面的RUN指令就是创建时安装vim

Dockerfile编码完成后,使用docker build来生成镜像

docker build -t="newbee/centos:myversion2" .

其中-t标记来添加tag,指定新的镜像的用户信息,“.”是要执行的Dockerfile的路径

从docker build命令的执行信息中可以看到,生成新镜像的每一步指令的执行信息,所有指令执行结束后,返回生成镜像的镜像ID,删除指令执行过程中生成的容器。

一个镜像的指令不能超过127个

除了以上指令外,还可以有以下指令

  • ADD,复制本地文件系统的文件到镜像中
  • EXPOSE,向外开放端口
  • CMD,指定容器启动后运行的程序

如:

#复制myApp到镜像中的/var/www

$ ADD myApp /usr/local

#开放80端口

$ EXPOSE 80

#容器启动后执行

CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

还可以使用docker tag命令修改镜像的标签,如:

$ docker tag f6291722118d centos:myversion2.1

 

从本地文件系统导入镜像

从本地文件系统导入一个镜像,可以使用openvz的模板来创建,openvz的模板下载地址为:http://openvz.org/Download/templates/precreated

例如下载一个centos7的镜像,使用如下的命令导入

cat centos-7-x86_64.tar.gz |docker import - ubuntu:14.04

上传镜像

用户可以通过docker        push命令,把自己创建的镜像上传到仓库中来共享。例 如,用户在Docker Hub上完成注册后,可以推送自己的镜像到仓库中。

$ docker push mycentos/centos

存出和载入镜像

docker save -o centos_myversion3.tar centos:myversion3 存出镜像到本地文件系统

docker load --input centos_myversion3.tar 从本地文件系统载入镜像

docker load < centos_myversion3.tar 从本地文件系统载入镜像

 载入时还会载入标签等其他元数据信息

清理镜像

docker rmi imageid  删除镜像

docker images --quiet --filter 'dangling=true' 查看未打标签的镜像

docker images -q -f 'dangling=true' 查看未打标签的镜像

猜你喜欢

转载自blog.csdn.net/weihao_/article/details/82586731