docker 实践二:操作镜像
本篇我们来详细介绍 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 的 ls
、tag
、inspect
子命令:
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 实践二:操作镜像的更多相关文章
- Docker实践(二):容器的管理(创建、查看、启动、终止、删除)
docker官方文档地址如下:[https://docs.docker.com/engine/reference/](https://docs.docker.com/engine/reference/ ...
- Docker 系列二(操作镜像).
一.镜像管理 1.拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -- Docker 镜像仓库地址 :一般是 域名或者IP[:端口号 ...
- Docker实践之02-使用镜像及定制
目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...
- 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...
- Docker学习(二): 镜像的使用与构建
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- docker遇到的问题以及docker 操作镜像的基本操作
root@localhost ~]# systemctl status docker.service ● docker.service - Docker Application Container E ...
- docker 操作镜像的基本操作
以安装mysql为例 1.拉取镜像 docker pull mysql 错误的启动 [root@localhost ~]# docker run --name mysql01 -d mysql 42f ...
- Docker入门与应用系列(二)镜像管理
1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...
- Docker学习总结(二)—— 镜像,容器
1.Docker镜像 1.1相关概念:registry :用于保存Docker镜像,包括镜像层次结构和镜像元数据,类似于git仓库之类的实体. repository:某个Docker镜像所有迭代版本 ...
随机推荐
- CentOS 6.5系统中mysql数据库还原后出现无法读表
图形化工具还原提示如下: 命令行输入 mysql> use netmanage; Database changed mysql> show tables; ERROR 1018 (H ...
- Linux CentOS 使用Yum源安装MySQL 5.7
在CentOS(Fedora.RedHat)系统中,可以使用yum install mysql命令来安装MySQL,但所安装的MySql版本一般都较旧,所以更推荐通过源码编译安装或下载最新rpm安装包 ...
- 2018-2019-2 20165234 《网络对抗技术》 Exp7 网络欺诈防范
Exp7 网络欺诈防范 实验内容 1. 简单应用SET工具建立冒名网站 2. ettercap DNS spoof 3. 结合应用两种技术,用DNS spoof引导特定访问到冒名网站 4. 请勿使用 ...
- 使用python显示当前系统中的所有进程并关闭某一进程
环境: Windows 10操作系统 python idle 原理: 调用windows系统自带的命令task,该命令使用方式: 第一步.调用cmd命令行,显示当前系统中所有进程: Win+R-> ...
- uboot的仓库在哪里?
答: https://gitlab.denx.de/u-boot/u-boot# 1. 获取源码 git clone git@gitlab.denx.de:u-boot/u-boot.git Or g ...
- pytorch常用损失函数
损失函数的基本用法: criterion = LossCriterion() #构造函数有自己的参数 loss = criterion(x, y) #调用标准时也有参数 得到的loss结果已经对min ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_02-用户认证-认证服务查询数据库-需求分析&搭建环境
1.2 认证服务查询数据库 1.2.1 需求分析 认证服务根据数据库中的用户信息去校验用户的身份,即校验账号和密码是否匹配. 认证服务不直接连接数据库,而是通过用户中心服务去查询用户中心数据库. 完整 ...
- 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)= ...
- LeetCode_66. Plus One
66. Plus One Easy Given a non-empty array of digits representing a non-negative integer, plus one to ...
- 浅谈Delphi高效使用TreeView
本来我一直都是使用递归算法, 效率很低 下边这段代码是我原来写的 ------------------------------------------------------------------- ...