前文回顾:php
今天来讲说镜像,镜像是 Docker 中特别重要的概念,是容器运行的基础,没有镜像,后面的一切都不成立。python
典型的镜像表示方法分三部分,用 /
分隔:mysql
remote image hub/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
命令来清理系统中遗留的一些临时镜像,以及一些没有被使用的镜像。
建立镜像有三种方式:
一、基于已有容器建立
# 运行一个容器
$ 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 官方仓库,咱们也能够搭建本身的私有仓库。通常来讲,公司内部都会有本身的镜像仓库,咱们根据需求来使用就能够了。
这篇就到这里吧,下篇来讲说容器。
参考书籍:
往期精彩:
技术博客:
同时,也欢迎关注个人微信公众号 AlwaysBeta,更多精彩内容等你来。