使用 Docker 镜像 | Docker 系列

简介: 今天来说说镜像,镜像是 Docker 中特别重要的概念,是容器运行的基础,没有镜像,后面的一切都不成立。

前文回顾:


今天来说说镜像,镜像是 Docker 中特别重要的概念,是容器运行的基础,没有镜像,后面的一切都不成立。


典型的镜像表示方法分三部分,用 / 分隔:


remote image hub/namespace/name:tag
复制代码
  • remote image hub:存储镜像的 Web 服务器地址;
  • namespace:命名空间,表示一个用户或组织下的所有镜像;
  • name:镜像名称;
  • tag:镜像标签。


其实,我们常看到的镜像是长这样的 name:tag,因为从 Docker 官方仓库拉下来的镜像,是可以省略前两部分的。


获取镜像


使用 docker pull name[:tag] 命令来下载镜像,如果不显式指定 tag,则默认会选择 latest 标签。


$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
76df9210b28c: Pull complete
Digest: sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
复制代码


查看镜像信息


使用 docker images 命令列出本机镜像。


$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        6 days ago          1.22MB
复制代码


镜像 ID 十分重要,它唯一标识了镜像。

使用 docker tag 命令来给本地镜像添加新的标签。


$ docker tag busybox:latest mybusybox:latest
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        6 days ago          1.22MB
mybusybox           latest              1c35c4412082        6 days ago          1.22MB
复制代码


可以看到,现在本地的两个镜像 ID 是相同的,表示它们指向了同一个镜像,只是标签不同而已。

使用 docker inspect 命令来获取镜像的详细信息。

使用 docker history 命令列出镜像各层的创建信息。


搜索镜像


使用 docker search 命令来搜索镜像。


$ docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6039                [OK]
ansible/centos7-ansible            Ansible on Centos7                              130                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   116                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   76
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
复制代码


删除和清理镜像


使用 docker rmi 命令来删除镜像,分两种方式:一种是通过镜像名和标签来删除;一种是通过镜像 ID 来删除。平时使用过程中,大部分都是通过镜像 ID 来删除。


$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        8 days ago          1.22MB
mybusybox           latest              1c35c4412082        8 days ago          1.22MB
$ docker rmi mybusybox:latest
# 或者
$ docker rmi 1c35c4412082
复制代码


如果镜像被容器引用了的话,是无法删除的,需要先删除依赖该镜像的容器,然后再删除镜像。或者比较暴力的话,直接使用 -f 参数来删除,也能达到效果,但还是不推荐这种做法。

使用 docker image prune 命令来清理系统中遗留的一些临时镜像,以及一些没有被使用的镜像。


创建镜像


创建镜像有三种方式:

  • 基于已有容器创建
  • 基于本地模板导入
  • 基于 Dockerfile 创建


1、基于已有容器创建


# 运行一个容器
$ docker run -it centos /bin/bash
# 在容器中创建一个文件,然后退出
[root@f0767e2e8964 /]# touch text.txt
[root@f0767e2e8964 /]# exit
exit
# 查看容器
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
f0767e2e8964        centos              "/bin/bash"         17 seconds ago      Exited (0) 4 seconds ago                       stupefied_ptolemy
# 基于容器创建镜像
$ docker commit -a 'add file' f0767e2e8964 centos:1.0
sha256:a651491d9bfe6d00eef7a23bd290be839d59efafa31183ef2038399271dee459
# 查看除了原有镜像,还有新生成的镜像,标签不同
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              1.0                 a651491d9bfe        4 seconds ago       237MB
centos              latest              470671670cac        4 months ago        237MB
复制代码


2、基于本地模板导入


使用 docker import 命令将模板导入成镜像。


3、基于 Dockerfile 创建


这是在实际工作中使用最多的方法,先卖个关子,后续单独写一篇来详细介绍。


存出和载入镜像


使用 docker save 命令保存镜像到文件。


$ docker save -o busybox.tar busybox
复制代码


执行之后,在当前目录下就会有 busybox.tar 文件了,然后可以把这个文件分享给其他人。

收到文件之后,使用 docker load 命令来载入镜像。


$ docker load < busybox.tar
复制代码


上传镜像


使用 docker push 命令将镜像上传到镜像仓库,这样在其他服务器上想用这个镜像,直接 docker pull 一下就可以了,非常方便。

默认的话,会上传到 Docker Hub 官方仓库,我们也可以搭建自己的私有仓库。一般来说,公司内部都会有自己的镜像仓库,我们根据需求来使用就可以了。

这篇就到这里吧,下篇来说说容器。


目录
相关文章
|
14天前
|
Docker 容器
【Docker】掌握 Docker 镜像操作:从基础到进阶
【Docker】掌握 Docker 镜像操作:从基础到进阶
|
11天前
|
Docker 容器
docker从指定repo拉取镜像
docker从指定repo拉取镜像
|
2天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
2天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
3天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
3天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
3天前
|
存储 缓存 运维
【Docker 专栏】Docker 镜像的分层存储与缓存机制
【5月更文挑战第8天】Docker 镜像采用分层存储,减少空间占用并提升构建效率。每个镜像由多个层组成,共享基础层(如 Ubuntu)和应用层。缓存机制加速构建和运行,通过检查已有层来避免重复操作。有效管理缓存,如清理无用缓存和控制大小,可优化性能。分层和缓存带来资源高效利用、快速构建和灵活管理,但也面临缓存失效和层管理挑战。理解这一机制对开发者和运维至关重要。
【Docker 专栏】Docker 镜像的分层存储与缓存机制
|
3天前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
|
4天前
|
缓存 安全 数据安全/隐私保护
【Docker专栏】深入理解Docker镜像的构建与推送
【5月更文挑战第7天】本文介绍了Docker镜像的核心作用及基础概念,包括镜像作为容器模板的特性。文章详细阐述了Dockerfile的编写,例如设置基础镜像、工作目录、安装依赖及定义启动命令。通过`docker build`命令构建镜像,并提示了优化构建过程的技巧。此外,还讲解了如何将镜像推送到远程仓库,包括选择仓库、认证、标签和推送镜像的步骤,以及镜像安全性的考虑,如扫描漏洞和遵循最小权限原则。本文旨在帮助读者掌握Docker镜像的构建与推送,以高效管理容器化应用。
【Docker专栏】深入理解Docker镜像的构建与推送
|
5天前
|
运维 Linux 数据安全/隐私保护
Docker详解(九)——Docker镜像发布
Docker详解(九)——Docker镜像发布
28 2