使用 Docker 镜像 | Docker 系列

前文回顾:php

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

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

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

其实,咱们常看到的镜像是长这样的 name:tag,由于从 Docker 官方仓库拉下来的镜像,是能够省略前两部分的。git

获取镜像

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

$ 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 命令列出本机镜像。sql

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

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

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

$ 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 是相同的,表示它们指向了同一个镜像,只是标签不一样而已。centos

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

使用 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 建立

一、基于已有容器建立

# 运行一个容器
$ 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
复制代码

二、基于本地模板导入

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

三、基于 Dockerfile 建立

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

存出和载入镜像

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

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

执行以后,在当前目录下就会有 busybox.tar 文件了,而后能够把这个文件分享给其余人。

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

$ docker load < busybox.tar
复制代码

上传镜像

使用 docker push 命令将镜像上传到镜像仓库,这样在其余服务器上想用这个镜像,直接 docker pull 一下就能够了,很是方便。

默认的话,会上传到 Docker Hub 官方仓库,咱们也能够搭建本身的私有仓库。通常来讲,公司内部都会有本身的镜像仓库,咱们根据需求来使用就能够了。

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

参考书籍:

  • 《Docker 技术入门与实战》
  • 《Docker 进阶与实战》

往期精彩:

初识 Docker 与安装 | Docker 系列

技术博客:

github.com/yongxinz/te…

同时,也欢迎关注个人微信公众号 AlwaysBeta,更多精彩内容等你来。

相关文章
相关标签/搜索