本篇我们来详细介绍 docker 镜像的操作。

注:环境为 CentOS7,docker 19.03

之前已经说过,容器是 docker 的核心概念之一,所以对应的就需要知道它的使用方法,接下来我们就来了解 docker 镜像的添加、删除、查找等操作。

获取镜像

docker 获取镜像使用的命令为:docker [image] pull NAME[: TAG]

  • pull:docker 的子命令,用来获取仓库中的镜像
  • NAME:镜像的名称
  • TAG:TAG是镜像的标签(往往⽤来表⽰版本信息)

例如我们获取一个 Ubuntu18.04 系统的基础镜像,就可以使用命令:

docker pull ubuntu:18.04

如果不指定版本,默认就拉取最新的版本 ubuntu:latest

注:一般来说,镜像的 latest 表示该镜像内容为最新,出于稳定性考虑,不要在生产中使用最新版本的,最好拉取是带上版本号。

使⽤docker pull命令下载中会获取并输出镜像的各层信息。 当不同的镜像包括相同的层时, 本地仅存储了层的⼀份内容, 减⼩了存储空间。

如果我们要从指定的仓库中拉取,可以通过补全镜像的路径实现,例如从网易上拉取 ubuntu18.04,命令如下:

docker pull hub.c.163.com/public/ubuntu:18.04

pull⼦命令⽀持的选项主要包括:

  • -a, --all-tags=true|false: 是否获取仓库中的所有镜像, 默认
  • --disable-content-trust: 取消镜像的内容校验, 默认为真

一般在国内,拉取官方的镜像速度,所以我们可以改成默认从国内云服务供应商的仓库上拉取,比如阿里云的。需要修改配置文件如下:

# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

下载了镜像后,我们就可以使用它了:

# docker run -it ubuntu:18.04 bash
root@fe3ce439f6dc:/# echo "Hello World"
Hello World
root@fe3ce439f6dc:/# exit

这是关于 docker 容器部分的知识,这里暂时不做解释。

查看镜像

查看镜像主要使用 docker 的 lstaginspect子命令:

imges 子命令

使用 images 列出所有镜像:

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 a2a15febcdf3 5 days ago 64.2MB
redis latest f7302e4ab3a8 5 days ago 98.2MB

我们来说明下输出的信息:

  • REPOSITORY:来⾃于哪个仓库, ⽐如ubuntu表⽰ubuntu系列的基础镜像;
  • TAG:镜像的标签信息, ⽐如18.04、 latest表⽰不同的版本信息。 标签只是标记, 并不能标识镜像内容;
  • IMAGE ID:镜像的ID(唯⼀标识镜像) , 如果两个镜像的ID相同, 说明它们实际上指向了同⼀个镜像, 只是具有不同标签名称⽽已;
  • CREATED:创建时间, 说明镜像最后的更新时间;
  • SIZE:镜像⼤⼩, 优秀的镜像往往体积都较⼩。

images⼦命令主要⽀持如下选项:

  • -a, --all=true|false: 列出所有(包括临时⽂件) 镜像⽂件, 默认为否;
  • --digests=true|false: 列出镜像的数字摘要值, 默认为否;
  • -f, --filter=[]: 过滤列出的镜像, 如dangling=true只显⽰没有被使⽤的镜像; 也可指定带有特定标注的镜像等;
  • --format="TEMPLATE": 控制输出格式, 如.ID代表ID信息, .Repository代表仓库信息等;
  • --no-trunc=true|false: 对输出结果中太长的部分是否进⾏截断, 如镜像的ID信息, 默认为是;
  • -q, --quiet=true|false: 仅输出ID信息, 默认为否。

其中, 还⽀持对输出结果进⾏控制的选项, 如-f.--filter=[]、 --notrunc=true|false、 -q、 --quiet=true|false等

tag 子命令

通过 tag 子命令可以为镜像添加一个新的标签。

[root@CentOS1 ~]# docker tag ubuntu:18.04 myubuntu:18.04
[root@CentOS1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu 18.04 a2a15febcdf3 5 days ago 64.2MB
ubuntu 18.04 a2a15febcdf3 5 days ago 64.2MB

如果细节看的话会发现 ubuntu 和 myubuntu 的 IMAGE ID 是一样的,因为 tag 子命令其实是给原来的镜像添加了别名,内部指向同一个文件,所以删除其中的某一个,只是删除一个链接而已,实际的镜像文件依然存在。

inspect 子命令

使用 inspect 子命令来查看镜像的详细信息:docker [image] inspect

docker inspect ubuntu

返回 JSON 格式的消息,如果只要其中一项内容,可以使用 -f 指定:

docker inspect -f {{".Architecture"}} ubuntu

history 子命令

使用 history 子命令查看镜像的历史命令

docker history ubuntu

输出会被截断,带上--no-trunc选项输出全部信息。

搜寻镜像

使用 search 子命令可以在仓库中搜寻我们需要的镜像,语法为 docker search [option] keyword,⽀持的命令选项主要包括:

  • -f, --filter filter: 过滤输出内容;
  • --format string: 格式化输出内容;
  • --limit int: 限制输出结果个数, 默认为25个;
  • --no-trunc: 不截断输出结果。

例如我们搜寻名为 nginx 的镜像:

docker search --limit=4 --filter=starts=4 nginx

删除镜像

删除镜像使用 docker rmi 或者 docker images rm,语法为 docker rmi IMAGE[IMAGE...],其中IMAGE可以为标签或ID。⽀持选项包括:

  • -f, -force: 强制删除镜像, 即使有容器依赖它;
  • -no-prune: 不要清理未带标签的⽗镜像。
docker rmi myubuntu:latest

当该镜像存在容器时,不能删除镜像,但可以加上 -f 选项强制删除,同时也删除容器。

注:当一个镜像有多个 tag 时,docker rmi 只是删除该镜像的标签,不会影响到镜像文件

清理镜像

使⽤Docker⼀段时间后, 系统中可能会遗留⼀些临时的镜像⽂件, 以及⼀些没有被使⽤的镜像, 可以通过 docker image prune 命令来进⾏清理。⽀持选项包括:

  • -a, -all: 删除所有⽆⽤镜像, 不光是临时镜像;
  • -filter filter: 只清理符合给定过滤器的镜像;
  • -f, -force: 强制删除镜像, ⽽不进⾏提⽰确认。
# docker image prune -f
Total reclaimed space: 0B

创建镜像

创建 docker 镜像的方法有三种:基于已有镜像的容器创建、 基于本地模板导⼊、 基于Dockerfile创建。

基于已有镜像的容器创建

使用命令 docker [container] commit 命令,语法为 docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[: TAG]]。主要选项包括:

  • -a, --author="": 作者信息;
  • -c, --change=[]: 提交的时候执⾏Dockerfile指令, 包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;
  • -m, --message="": 提交消息;
  • -p, --pause=true: 提交时暂停容器运⾏。

下面我们尝试下:首先启动一个镜像,在镜像中做一些修改,之后用修改过的容器创建镜像。

# docker run -it ubuntu:latest bash
root@a93ecdb26b77:/# echo "hello world" > test
root@a93ecdb26b77:/# exit
exit # docker commit -m "Added test" -a "xingyys" a93ecdb26b77 test
sha256:5f538a96c081d2f64356cd64eb38f7cc0b6987bb07ba283032796c8c7dc2cf2f

基于本地模板导⼊

⽤户也可以直接从⼀个操作系统模板⽂件导⼊⼀个镜像, 主要使⽤ docker [container] import 命令。 命令格式为 docker [image] import [OPTIONS] file | URL | - [REPOSITORY[: TAG]]

cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04

基于Dockerfile创建

基于Dockerfile创建是最常见的⽅式。 Dockerfile是⼀个⽂本⽂件,利用 docker 的指令能快速制作一个镜像。

下面给出一个简单的实例,基于基于debian: stretch-slim镜像安装Python 3环境, 构成⼀个新的python:3镜像。创建一个 dockerfile 文件,写入:

FROM debian:stretch-slim
LABEL version="1.0" maintainer="docker user <docker_user@github>"
RUN apt-get update && \
apt-get install -y python3 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

使⽤docker[image]build命令创建, 编译成功后本地将多出⼀个python:3镜像:

docker [image] build -t python:3 .

导出和载入镜像

docker 还提供了镜像的导出和载入。使用命令 docker [image] save 导出镜像:

docker save -o ubuntu.tar ubuntu

导出后的文件就可以复制到其他机器上载入了,对应的载入命令为 docker [image] load :

docker load -i ubuntu.tar

或者是

docker load < ubuntu.tar

上传镜像

push⼦命令可以让我们将本地的镜像上传到仓库中。默认上传到Docker Hub官⽅仓库(需要登录)。 格式为 docker [image] push NAME[: TAG]|[REGISTRY_HOST[:REGISTRY_PORT]/]NAME[: TAG]

⽤户在Docker Hub⽹站注册后可以上传⾃制的镜像。例如, ⽤户user上传本地的test: latest镜像, 可以先添加新的标签 user/test: latest, 然后⽤ docker [image] push命令上传镜像:

# docker tag test:latest user/test:latest

# docker push user/test:latest
The push refers to a repository [docker.io/user/test]
Sending image list
Please login prior to push: Username: Password: Email:

第⼀次上传时, 会提⽰输⼊登录信息或进⾏注册, 之后登录信息会记录到本地~/.docker⽬录下。

docker 实践二:操作镜像的更多相关文章

  1. Docker实践(二):容器的管理(创建、查看、启动、终止、删除)

    docker官方文档地址如下:[https://docs.docker.com/engine/reference/](https://docs.docker.com/engine/reference/ ...

  2. Docker 系列二(操作镜像).

    一.镜像管理 1.拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -- Docker 镜像仓库地址 :一般是 域名或者IP[:端口号 ...

  3. Docker实践之02-使用镜像及定制

    目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...

  4. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  5. Docker学习(二): 镜像的使用与构建

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  6. docker遇到的问题以及docker 操作镜像的基本操作

    root@localhost ~]# systemctl status docker.service ● docker.service - Docker Application Container E ...

  7. docker 操作镜像的基本操作

    以安装mysql为例 1.拉取镜像 docker pull mysql 错误的启动 [root@localhost ~]# docker run --name mysql01 -d mysql 42f ...

  8. Docker入门与应用系列(二)镜像管理

    1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...

  9. Docker学习总结(二)—— 镜像,容器

    1.Docker镜像  1.1相关概念:registry :用于保存Docker镜像,包括镜像层次结构和镜像元数据,类似于git仓库之类的实体. repository:某个Docker镜像所有迭代版本 ...

随机推荐

  1. CentOS 6.5系统中mysql数据库还原后出现无法读表

    图形化工具还原提示如下: 命令行输入 mysql> use netmanage;  Database changed  mysql> show tables;  ERROR 1018 (H ...

  2. Linux CentOS 使用Yum源安装MySQL 5.7

    在CentOS(Fedora.RedHat)系统中,可以使用yum install mysql命令来安装MySQL,但所安装的MySql版本一般都较旧,所以更推荐通过源码编译安装或下载最新rpm安装包 ...

  3. 2018-2019-2 20165234 《网络对抗技术》 Exp7 网络欺诈防范

    Exp7  网络欺诈防范 实验内容 1. 简单应用SET工具建立冒名网站 2. ettercap DNS spoof 3. 结合应用两种技术,用DNS spoof引导特定访问到冒名网站 4. 请勿使用 ...

  4. 使用python显示当前系统中的所有进程并关闭某一进程

    环境: Windows 10操作系统 python idle 原理: 调用windows系统自带的命令task,该命令使用方式: 第一步.调用cmd命令行,显示当前系统中所有进程: Win+R-> ...

  5. uboot的仓库在哪里?

    答: https://gitlab.denx.de/u-boot/u-boot# 1. 获取源码 git clone git@gitlab.denx.de:u-boot/u-boot.git Or g ...

  6. pytorch常用损失函数

    损失函数的基本用法: criterion = LossCriterion() #构造函数有自己的参数 loss = criterion(x, y) #调用标准时也有参数 得到的loss结果已经对min ...

  7. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_02-用户认证-认证服务查询数据库-需求分析&搭建环境

    1.2 认证服务查询数据库 1.2.1 需求分析 认证服务根据数据库中的用户信息去校验用户的身份,即校验账号和密码是否匹配. 认证服务不直接连接数据库,而是通过用户中心服务去查询用户中心数据库. 完整 ...

  8. matlab学习——04图与网络(最短路,最小生成树,最大流)

    04图与网络 1.最短路 (1) 自己写的dijstra算法 format compact; clc,clear all a=zeros(6); a(1,2)=50;a(1,4)=40;a(1,5)= ...

  9. LeetCode_66. Plus One

    66. Plus One Easy Given a non-empty array of digits representing a non-negative integer, plus one to ...

  10. 浅谈Delphi高效使用TreeView

    本来我一直都是使用递归算法, 效率很低 下边这段代码是我原来写的 ------------------------------------------------------------------- ...