author: aming
email: jikcheng@163.com
title: Docker 使用镜像
creation_date: 2023-01-05 22:58
Last modified date: 2023-01-30 23:01
tags: Docker 使用镜像
File Folder with relative path: reading notes/doc/Dokcer 实践
remark:
other:
本章背景知识
1、镜像是三大核心概念中最重要的概念。
2、本章主要内容主要介绍 Docker 镜像管理。
(1)如何使用 docker pull
命令下载镜像。
(2)如何查看本地已有的镜像信息。
(3)如何使用远端仓库 search 命令进行搜索和过滤。
(4)如何删除镜像标签和镜像文件。
(5)如何创建定制镜像,并保存为外部文件。
镜像命名规则
1、镜像包括“名称+标签”两部分信息,例如:
centos:latest
2、名称(centos)
(1)名称包含两部分:仓库名称和镜像名称。
(2)主要是区分不同种类的镜像。
3、标签(latest)
(1)标签即为镜像的版本号。
(2)latest
标签是最新的非稳定版本。
(3)如果需要下载指定版本则需要查看版本号,标签的具体值请查看 centos Tags | Docker Hub。
获取镜像
Docker 镜像是运行容器的前提,Docker Hub
网站提供数十万歌镜像供大家开放下载。
命令和语法
1 、命令语法
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
2、命令说明
参数 | 说明 |
---|---|
NAME | 镜像仓库的名称。 |
TAG | 镜像的标签(版本)。 |
OPTIONS | 命令可选参数。 |
3、OPTIONS 选项
(1)OPTIONS参数查看。
$ docker pull --help
(2)OPTIONS 参数说明。
参数 | 说明 |
---|---|
-a,–all-tags=true/fase | 是否获取仓库中所有的镜像,默认为否。 |
–disable-content-trust | 跳过镜像验证(默认为 true) |
-q,–quiet | 减少日志输出信息。 |
示例 1:官方仓库镜像下载
对于 Docker 镜像来说,如果不显式指定 TAG,则默认会选择 latest 标签,这会下载仓库中最新版本的镜像。
$ docker pull centos:7.2.1511
(1)默认使用 `官方仓库` 所以下载前缀可以忽略
(2)一般来说,镜像的`latest`标签意味着镜像内容非稳定版发布。
示例 2:非官方仓库镜像下载
使用非官方仓库(网易)下载,需要指定仓库名称前的完整仓库地址。
docker pull hub-mirror.c.163.com/library/centos:centos8.4.2105
查看镜像
命令和语法
1、命令语法
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
2、命令说明
选项 | 说明 |
---|---|
OPTIONS | 命令选项。 |
REPOSITORY | 镜像仓库和名称。 |
TAG | 镜像标签。 |
3、【OPTIONS】选项。
(1)OPTIONS 参数查看。
$ docker images --help
(2)OPTIONS 参数说明。
参数 | 说明 |
---|---|
-a,–all=true\false | 列出所有的镜像文件,包括临时文件,默认为否。 |
–digests=true\false | 列出镜像的 sha256 加密值 |
-f,–filtet=[] | 过滤镜像,如:dangling=true 现实没有被使用的镜像。 |
–format=“TEMPLATE” | 控制输出格式。 |
–no-trunc=true\falase | 对输出结果中太长的部分是否进行阶段。 |
-q,–quiet=true\flase. | 仅输出 ID 信息,默认为否。 |
示例 :列出镜像
1、使用 docker images
命令可以列出本地主机上已有的镜像信息。
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chyiyaqing/kingbase v8r6 10718399d4a5 15 months ago 660MB
hub-mirror.c.163.com/library/centos centos7.9.2009 eeb6ee3f44bd 16 months ago 204MB
hub-mirror.c.163.com/library/centos centos8.4.2105 5d0da3dc9764 16 months ago 231MB
2、返回信息说明
字段 | 说明 |
---|---|
REPOSITORY | 来自于哪个仓库。 |
TAG | 镜像的标签信息,比如 14.04、lastest 标注不同的版本信息。 |
IMAGE ID | 唯一标识镜像 |
CREATED | 创建时间,镜像最后的更新时间; |
SIZE | 镜像大小,优秀的镜像往往体积都较小。 |
镜像别名
在很多时候需要自己定制适合现场环境的镜像。可以使用 docker tag
添加新的标签。
命令和语法
1、命令语法
Usage: docker tag SOURCE_IMAGE[: TAG] TARGET_IMAGE[: TAG]
2、命令说明
选项 | 说明 |
---|---|
SOURCE_IMAGE | 现有镜像名称。 |
TARGET_IMAGE | 新的镜像别名。 |
TAG | 镜像标签 |
示例 : 添加镜像别名
docker tag centos:7.2.1511 kingbasecentos:7.2.1511
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chyiyaqing/kingbase v8r6 10718399d4a5 15 months ago 660MB
hub-mirror.c.163.com/library/centos centos7.9.2009 eeb6ee3f44bd 16 months ago 204MB
hub-mirror.c.163.com/library/centos centos8.4.2105 5d0da3dc9764 16 months ago 231MB
centos 7.2.1511 9aec5c5fe4ba 3 years ago 195MB
kingbasecentos 7.2.1511 9aec5c5fe4ba 3 years ago 195MB
查看镜像详细信息
使用 docker inspect
命令显示镜像适配架构、各层的数字摘要。
命令和语法
1、命令语法
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
2、命令说明
选项 | 说明 |
---|---|
OPTIONS | 命令可选参数。 |
NAME | 镜像名称 |
ID | 镜像 ID |
3、【OPTIONS】 选项。
(1)参数查看。
docker inspect --help
(2)参数说明。
参数 | 说明 |
---|---|
-f, --format string | 按照给定模板输出信息格式。 |
-s, --size | 显示由这个镜像所创建的容器的大小。 |
–type string | 返回 JSON 某一部分信息。 |
---snip---
},
"SizeRw": 67879783,
"SizeRootFs": 728038482,
"Mounts": [
---snip---
示例 :查看镜像详细信息
查看 centos 标签值为 7.2.1511 镜像的详细信息。
$ docker inspect centos:7.2.1511
查看镜像的提交历史
镜像文件由多个层组成,想要看见每个层具体内容,请执行 docker history
命令。
命令语法
1、命令语法
Usage: docker history [OPTIONS] IMAGE
2、命令说明
选项 | 说明 |
---|---|
OPTIONS | 可选参数。 |
IMAGE | 镜像名称和标签。 |
3、 【OPTIONS】选项
(1)参数查看。
docker history --help
(2)参数说明。
参数 | 说明 |
---|---|
–format string | 按照给定模板输出信息格式。 |
-H, --human | 输出人类方便阅读的大小和日期。默认开启。 |
–no-trunc | 不要截断信息。 |
-q, --quiet | 仅仅显示镜像 ID。 |
示例 :镜像的提交历史。
1、查看 centos: 7.2.1511 镜像提交历史。
docker history centos:7.2.1511
2、返回信息说明。
字段 | 说明 |
---|---|
IMAGE | 镜像 ID 号。 |
CREATED | 创建时间。 |
CREATED BY | 作者。 |
SIZE | 大小。 |
COMMENT | 注释 |
搜寻镜像
命令语法
1、命令语法。
docker search [OPTIONS] TERM
2、命令说明。
选项 | 说明 |
---|---|
OPTIONS | 可选参数。 |
TERM | 搜索镜像的名称。 |
3、【OPTIONS】选项。
(1)OPTIONS 参数查看。
$ docker search --help
(2)OPTIONS 参数说明。
参数 | 说明 |
---|---|
–format string | 按照给定模板输出信息格式。 |
–no-trunc=true/false | 输出信息是否截断,默认为否。 |
-f,–filtet=[] | 过滤镜像,如:dangling=true 现实没有被使用的镜像。 |
–limit int | 搜索结果限制,默认为 25。 |
示例:查找镜像
1、查找名称 centos 相关镜像。
$ docker search centos
返回结果包含很多关键字的镜像
[root@node1 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos DEPRECATED; The official build of CentOS. 7475 [OK]
kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 33
couchbase/centos7-systemd centos7-systemd images with additional debug… 6 [OK]
2、返回信息说明。
字段 | 说明 |
---|---|
NAME | 仓库名称 |
DESCRIPTION | 镜像描述 |
STARS | 用户评价(Stars)—反应出一个镜像的受欢迎程度; |
OFFICIAL | 是否官方(Official)—由上游开发者管理的镜像(如 fedora 镜像由 Fedora 团队管理); |
AUTOMATED | 自动构建(Automated)—表示这个镜像是由 Docker Hub 的自动构建(Automated Build)流程创建的 |
删除镜像
命令语法
1、命令语法。
docker rmi IMAGE[IMAGES...]
2 、命令说明
其中 IMAGE 可以为标签或 ID。
3、【OPTIONS】选项
1、参数查看。
$ docker rmi --help
2、参数说明。
参数 | 说明 |
---|---|
-f, --force | 强制删除镜像。 |
–no-prune | 不删除未加标签的父镜像。 |
示例 1:使用自定义标签,删除镜像
$ docker rmi kcp:7.2.1511
示例 2:使用名称,删除镜像
$ docker rmi centos:7.2.1511
示例 3:使用镜像 ID,删除镜像
$ docker rmi 9aec5c5fe4ba
示例 4: 镜像上有容器依赖,删除失败
1、查看当前容器的运行状态。
[root@node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9ec9123e9f4 5d0da3dc9764 "/bin/bash" 6 hours ago Restarting (0) 5 seconds ago pensive_shirley
83a97d7e63a3 chyi
2、删除正在被使用的镜像文件,报错。
[root@node1 ~]# docker rmi chyiyaqing/kingbase:v8r6
Error response from daemon: conflict: unable to remove repository reference "chyiyaqing/kingbase:v8r6" (must force) - container 83a97d7e63a3 is using its referenced image 10718399d4a5
3、删除依赖该镜像的所有容器。
$ docker rm 83a97d7e63a3
4、成功删除镜像
[root@node1 ~]# docker rmi chyiyaqing/kingbase:v8r6
当该镜像创建的容器存在时,镜像文件默认无法被删除。
如果想要强制删除,请执行以下命令:
```bash
docker rmi -f chyiyaqing/kingbase:v8r6
```
基于已有的容器创建镜像
创建镜像的方法有四种:
方法 | 描述 |
---|---|
基于 Docker 容器。 | 使用 docker run 启动一个容器,并在命令行输入命令来创建镜像。使用 docker commit 来创建一个新镜像 |
Dockerfile | 从一个已知基础镜像开始构建,并指定一组有限的简单命令来构建 |
Dockerfile 及配置管理 (configuration management,CM)工具 | 与 Dockerfile 相同,不过将构建的控制权交给了更为复杂的 CM 工具 |
从头创建镜像并导入一组文件 |
本章节主要介绍前两种方法。
命令语法
1、命令语法
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
2、命令说明
选项 | 说明 |
---|---|
commit | 根据某个容器进行提交动作。 |
OPTIONS | 参数选项。 |
CONTAEINER | 容器名称或 ID。 |
REPOSITORY | 容器名称。 |
TAG | 标签名称。 |
3、【Options】选项
(1)参数查看。
$ docker commit --help
(2)参数说明。
参数 | 说明 |
---|---|
-a,–author=“” | 作者信息: |
-c,–change=[] | 提交的时候执行 Dockerfile 指令, |
-m,–message=“” | 提交镜像相关的注释。 |
-p, --pause=true | 提交时暂停容器运行。 |
示例:创建新的镜像
1、根据 83a97d7e63a3
容器,创建一个新的镜像。
docker commit -m "更换license文件" -a "kingbase" 83a97d7e63a3 kcp:v8r6
2、命令说明。
参数 | 说明 |
---|---|
83a97d7e63a3 | 是指容器 ID |
更换 license 文件 | 镜像注释。 |
kingbase | 作者信息。 |
kcp | 镜像名称。 |
v8r6 | 标签值。 |
基于本地模板构建镜像
用户也可以直接从一个操作系统模板文件导入一个镜像,主要使用 【docker import 】命令。
命令语法
OPENVZ 模板的下载地址
http://openvz.org/Download/templates/precreated
1、命令语法
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
2、命令说明
选项 | 说明 |
---|---|
import | 导入模板。 |
OPTIONS | 参数选项。 |
file\URL- | 本地文件\网页下载地址\标准输入 |
REPOSITORY | 仓库名称。 |
TAG | 标签名称。 |
3、【Options】选项
(1)参数查看。
$ docker import --help
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Import the contents from a tarball to create a filesystem image
Options:
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Set commit message for imported image
--platform string Set platform if server is multi-platform capable
(2)参数说明。
参数 | 说明 |
---|---|
-c, --change list | 基于模板文件,自定义应用 Dockerfile 指令。 |
-m,–message=“” | 提交镜像相关的注释。 |
–platform string | 如果服务器有跨平台功能,则启用。 |
示例 1:在线创建新的镜像
1、使用网页链接地址,创建一个新的镜像。
docker import http://download.openvz.org/template/precreated/centos-6-x86_64.tar.gz centos:6
编者注:网络下载非常慢时,请看【示例 2】离线创建新的镜像。
示例 2:离线创建新的镜像
1、使用 docker
用户上传模板文件到 /home/docker
。
图…
2、使用离线文件,创建一个新的镜像。
$ docker import centos-6-x86_64.tar.gz centos:6
sha256:ccfbf94334d93e4a170f109dec69bc2b50dc48d602245a634d23f348d2b4b1ed
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6 ccfbf94334d9 5 seconds ago 825M
存出和载入镜像
用户可以使用 docker save
和 docker load
存出和载入镜像。这对于有些服务器没有互联网时特别有用。
存出镜像
1、命令语法
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
2、命令说明
选项 | 说明 |
---|---|
OPTIONS | 可选参数 |
IMAGE | 要保存的镜像名称。 |
3、【OPTIONS】选项
1、参数查看。
$ docker save --help
2、参数说明。
选项 | 说明 |
---|---|
-o, --output string | 镜像离线保存的位置。 |
4、示例
$ docker save -o kcp_v8r6.tar kcp:v8r6
载入镜像
1、命令语法
Usage: docker load [OPTIONS]
2、命令说明
选项 | 说明 |
---|---|
OPTIONS | 可选参数 |
3、【OPTIONS】选项
1、参数查看。
$ docker load --help
2、参数说明。
选项 | 说明 |
---|---|
-i, --input string | 镜像离线保存的位置。 |
4、示例
docker load -i kcp_v8r6.tar
上传镜像
1、命令语法
Usage: docker push [OPTIONS] NAME[:TAG]
2、命令说明
选项 | 说明 |
---|---|
OPTIONS | 可选参数 |
NAME | 镜像名称 |
TAG | 标签 |
3、【OPTIONS】选项
1、参数查看。
$ docker push --help
2、参数说明。
选项 | 说明 |
---|---|
-a, --all-tags | 镜像所有的存在存储库中。 |
–disable-content-trust | 镜像内容默认信任。 |
4、示例
(1) 在 docker hub
上创建 kingbase 存储库。
(2)将自定义的镜像文件打标签,
标签名字,必须和docker hub 上的名字一致。否则会找不到对应的存储仓库。
docker tag kcp: v8r6 jikcheng/kingbase:v8r6
(3)登录 Docker Hub
[root@node1 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: jikcheng
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
用户的个人认证信息将会保存到`$HOME/.dockercfg`文件中。从`Docker 1.7.0`开
始,这已经变成`$HOME/.docker/config.json`。
(4)上传镜像。
$ docker push jikcheng/kingbase:v8r6
使用 Dockerfile 构建镜像
mkdir static_web
cd static_web/
touch Dockerfile
[root@node1 static_web]# vi Dockerfile
1 、这里创建了一个名为 static_web
目录保存 Dockerfile
,这个目录就是构建环境。
2、Docker 称这个环境为上下文或者构建上下文。
3、Docker 将构建的上下文和目录上传到 Docker 守护进程。
目的是能够直接范围用户在镜像中存储的任何代码、文件或者其他数据。
代码清单
# Version: 0.0.1
FROM ubuntu:14.04
MAINTAINER James Turnbull "james@example.com"
RUN apt-get update && apt-get install -y nginx
RUN echo 'Hi, I am in your container' \
>/usr/share/nginx/html/index.html
EXPOSE 80
Dockerfile 是由指令和参数组成。
- 指令: 如 FROM ,都必须为大写字母。并跟随参数。例如:
FROM ubuntu:14.04
- Dockerfile 中指令是从上到下执行,根据合理的安排。
Dockerfile 执行流程
- Docker 从基础镜像运行一个容器。
- 执行一条指令,对容器做出修改。
- 执行类似
docker
的操作,提交一个新的镜像层。 - Docker 再基于刚提交的镜像运行一个形容其。
- 执行
Docker
中的下一条指令,直到所有指令都执行完毕。
如果Docker file 由于某些原因没有正常结束,那么用户将会得到一个可以使用的镜像。这对调试非常有帮助:可以基于该镜像运行一个具备交互功能的容器,使用最后失败的命令进行调试。
Dockerfile 支持注释。以`#` 开头的行都会被认为是注释。