Docker之七:Docker 镜像
获取镜像
命令格式:docker [image] pull NAME:[TAG]
格式说明:NAME是镜像仓库名称,用来区分镜像;TAG是镜像标签,通常是版本信息。通常可以使用“名称+标签”来描述一个镜像。
获取Ubuntu系统镜像:
# 获取Ubuntu系统镜像
# 方式1:获取最新版本的Ubuntu系统镜像
$ sudo docker pull ubuntu
# 或
$ sudo docker pull ubuntu:latest
# 方式2:获取指定版本的Ubuntu系统镜像
$ sudo docker pull ubuntu:18.04
pull指令的其它参数:
# 使用docker pull --help可以查看pull支持的子命令选项
$ docker pull --help
查看镜像信息
images 命令列出镜像
命令格式:docker images 或 docker image ls
# 列出本地主机的镜像列表
$ sudo docker images
# 或
$ sudo docker image ls
选项字段说明:
字段 | 说明 |
---|---|
REPOSITORY | 像的仓库源,表示镜像来自哪一个仓库 |
TAG | 镜像的标签信息,比如18.04表示不同的版本信息 |
IMAGE ID | 镜像ID,唯一标识镜像 |
CREATED | 镜像创建时间,镜像最后更新时间 |
SIZE | 镜像大小 ,镜像体积越小越好 |
image命令的其它参数:
tag命令添加镜像标签
命令格式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 为ubuntu18.04添加新的镜像标签
$ sudo docker tag ubuntu:18.04 myubuntu:18.04
执行完成后再次列出镜像:
我们可以发现镜像列表中增加了myubuntu,但是它与ubuntu的IMAGE ID是一样的,所以myubuntu和ubuntu是同一个镜像。
inspect查看镜像详细信息
命令格式:docker inspect [OPTIONS] NAME|ID [NAME|ID…]
# 查看ubuntu:18.04镜像信息
$ sudo docker inspect ubuntu:18.04
# 可以使用-f来获取其中的一项内容
history 查看镜像历史
命令格式:docker history [OPTIONS] IMAGE
# 查看ubuntu:18.04镜像历史
$ sudo docker history ubuntu:18.04
搜寻镜像
搜寻镜像有两种方式:
- 从 Docker Hub 网站来搜索镜像。
- 通过 docker search 命令来搜索可用镜像。
这里,我们介绍 docker search 搜寻镜像的方法。
首先查看docker search命令格式和详细参数说明:
# 搜索 https镜像
$ sudo docker search httpd
NAME:标识镜像仓库源的名称;DESCRIPTION: 镜像的描述;OFFICIAL: 是否 docker 官方发布;stars: 表示点赞、喜欢;AUTOMATED: 自动构建。
# 带过滤器的查询,值查询官方发布的httpd
$ sudo docker search --filter=is-official=true httpd
删除和清理镜像
删除镜像
命令格式:docker rmi 或 docker image rm
IMAGE可以为标签或ID。
使用标签删除镜像
# 使用镜像标签删除myubuntu
$ sudo docker rmi myubuntu:18.04
前面我们知道myubuntu:18.04是ubuntu:18.04通过添加的一个标签得到,本质上它们是一个镜像,使用标签删除myubuntu,并不会影响ubuntu:18.04。但当镜像只有一个标签的时候,我们必须消息,因为命令会删除该镜像本身。
使用镜像ID删除镜像
使用镜像ID删除镜像,会先删除所有指向该镜像的标签,然后删除镜像文件本身。
# 使用镜像ID删除myubuntu
$ sudo docker rmi 2c047404e52d
注意事项
当我们要删除的镜像是创建容器存在时,默认不能直接删除镜像。这种情况下,通常由两种方式删除:
- 使用-f强制删除。
$ sudo docker rmi -f ubuntu:18.04
- 先删除容器,再删除镜像。
我们首先使用 ubuntu:18.04创建一个简单容器:
$ sudo docker run ubuntu:18.04 echo 'hello! I am here!'
然后尝试删除该镜像:
$ sudo docker rmi ubuntu:18.04
提示有一个容器在运行,不能删除。
使用docker ps -a命令查看本机存在的所有的容器:
$ sudo docker ps -a
先删除容器5c2fca4bd7fb:
$ sudo docker rm 5c2fca4bd7fb
再删除镜像2c047404e52d:
$ sudo docker rmi 2c047404e52d
ubuntu:18.04已经被成功删除:
清理镜像
# 清理镜像
$ sudo docker image prune
# 强制清理镜像
$ sudo docker image prune -f
创建镜像
创建镜像主要有三种方法:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。
基于已有容器创建
命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- 启动一个镜像,并更新这个镜像,可在这个镜像中做一些操作,比如创建文件等:
fgd@ubuntu:~$ sudo docker run -it ubuntu:18.04 /bin/bash
root@17b28018e968:/# apt-get update
root@17b28018e968:/# exit
2. 创建镜像
根据第一步,我们可以知道当前容器额ID为17b28018e968,使用commit命令来创建新的容器:
$ sudo docker commit -m="has update" -a="fgd" 17b28018e968 newubuntu:18.04
3.查看创建的镜像
基于本地模板导入
命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
我们可以到OoenVZ下载一个模板。
这里我们选择了centos-7-x86_64.tar.gz。
导入镜像:
$ sudo cat centos-7-x86_64.tar.gz | docker import - centos:7.0
基于Dockerile创建
我们可以使用docker build指令来从零开始创建一个镜像,我们需要创建一个Dockerfile文件,利用给定的指令描述基于父镜像创建新镜像。
这里我们基于CentOS 6.7镜像安装Python 3环境构建一个Python:3镜像。
- 创建Dockerfile文件。
- 构建镜像
$ sudo docker build -t python:3 .
构建过程:
构建完成:
3. 查看镜像
存储和载入镜像
存储镜像
导出镜像并存储为本地文件,可以使用docker save命令:
# 导出ubuntu:18.04到本地
$ sudo docker save -o ubuntu18.04.tar ubuntu:18.04
载入镜像
可以使用docker load将导出的.tar镜像文件导入到本地镜像库。
$ sudo docker load -i ubuntu18.04.tar
# 或
$ sudo docker load < ubuntu18.04.tar
上传镜像
可以使用docker push命令上传镜像到仓库。
docker push默认上传到Docker Hub官方仓库(需要登录)。比如。用户fgd要上传python:3镜像,需要如下几个步骤:
# 为python:3添加新的标签
$ docker tag python:3 fgd/python:3
# 上传fgd/python:3
$ docker push fgd/python:3
第一次上传需要输入登录信息或进行注册,登录信息会记录再本地~/.docker目录下。