docker 镜像

Linux 在内核启动之后,就加载 root 文件系统,为用户提供用户空间的支持,而在 docker 中,没有内核,直接加载 root 文件系统,因此,docker 镜像一般就是包含一套完整的 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

docker 封层存储

docker 镜像中的 root 文件系统一般是由一组或者多组文件组成。

镜像构建时,会一层层构建,前一层是后一层的基础。

每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。

在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。

因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

搜索镜像

docker  search  centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5205                [OK]
ansible/centos7-ansible            Ansible on Centos7                              120                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86…   106                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   80                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              50                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   47
tutum/centos                       Simple CentOS docker image with SSH access      43
gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glust…   40                                      [OK]
openshift/base-centos7             A Centos7 derived base image for Source-To-I…   39
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   37
centos/python-35-centos7           Platform for building and running Python 3.5…   33
kinogmt/centos-ssh                 CentOS with SSH                                 25                                      [OK]
centos/httpd-24-centos7            Platform for running Apache httpd 2.4 or bui…   21
openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use w…   20
centos/php-56-centos7              Platform for building and running PHP 5.6 ap…   19
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   10
openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for use …   6
openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x ima…   4
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   2
pivotaldata/centos                 Base centos, freshened up a little with a Do…   2
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   1
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
smartentry/centos                  centos with smartentry                          0                                       [OK]
jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0                                       [OK]

第一列是镜像的名称,第二列是镜像的命令,第三列是 stars 标记(有点想 github 的 star),第四列是是否是 docker hub 官方镜像,第五列是 aotmetad 镜像(通过通过代码版本管理网站结合 docker hub 提供的接口生成的, 例如 github, bitbucket)

docker search [包名]  --filter "is-official=true"

只显示官方版本

docker search  --filter=is-official=true centos

只显示 automated 版本

docker search  --filter=is-automated=true centos

显示 stars 前十的镜像

docker search --filter=stars=10 centos

查询结果显示 5 个镜像

docker search --limit 5 centos

查询结果显示完整的字段内容

docker search --no-trunc centos

下载镜像

docker 运行容器前,需要本地先存在镜像,如果本地没有镜像,docker 默认会自动从 docker hub 公共注册服务中的仓库下载。

Docker Registry 是提供镜像仓库服务的。docker pull 就可以直接从仓库里面直接下载,如果不谢 Docker Registry 地址就是从 docker hub 下载。

命令格式:

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6cf436f81810: Pull complete
987088a85b96: Pull complete
b4624b3efe06: Pull complete
d42beb8ded59: Pull complete
Digest: sha256:7a47ccc3bbe8a451b500d2b53104868b46d60ee8f5b35a24b41a86077c650210
Status: Downloaded newer image for ubuntu:latest

docker 镜像是多层存储构成的,下载的时候就是一层层下载,并非单个文件。

官方的镜像仓库 docker hub 在国内访问速度比较慢,可以阿里云或者网易云的镜像,直接到 web 去搜索比较方便,直接通过链接 pull 下来使用即可。

列出镜像

docker pull 之后就可以使用命令查看本地存在的镜像:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              47b19964fb50        2 weeks ago         88.1MB
debian              latest              d508d16c64cd        2 weeks ago         101MB
centos              latest              1e1148e4cc2c        2 months ago        202MB

列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。

镜像查找

如果镜像过多就会导致,一长串的显示结果,不方便查找。

可以通过 grep 镜像关键字过滤

docker images  | grep centos

查找镜像名称和标签为 none 的镜像:

docker images -f dangling=true

只显示镜像 ID

docker images -q

显示 ID 和名称

docker images --format "{{.ID}}: {{.Repository}}"

显示 ID、名称和标签

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

运行容器

docker  run  -i -t  -d  centos:latest

-i :交互式操作 -t :终端 -d:是后台进行并返回容器 ID。

进入容器

docker  exec  -it   [容器ID]  /bin/sh