使用 Docker 镜像


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 存储库。
image.png|800
(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 是由指令和参数组成。

  1. 指令: 如 FROM ,都必须为大写字母。并跟随参数。例如:
FROM ubuntu:14.04
  1. Dockerfile 中指令是从上到下执行,根据合理的安排。
Dockerfile 执行流程
  1. Docker 从基础镜像运行一个容器。
  2. 执行一条指令,对容器做出修改。
  3. 执行类似 docker 的操作,提交一个新的镜像层。
  4. Docker 再基于刚提交的镜像运行一个形容其。
  5. 执行 Docker 中的下一条指令,直到所有指令都执行完毕。
如果Docker file 由于某些原因没有正常结束,那么用户将会得到一个可以使用的镜像。这对调试非常有帮助:可以基于该镜像运行一个具备交互功能的容器,使用最后失败的命令进行调试。

Dockerfile 支持注释。以`#` 开头的行都会被认为是注释。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值