docker使用(一)

docker相对于虚拟技术:

  • 更高效的利用系统资源
  • 更快的启动速度
  • 一致的运行环境
  • 持续交付和部署
  • 更加轻松的迁移
  • 更加轻松的维护和扩展

 

什么是docker镜像,容器:

   可以说他就是一个模型,用面向对象的关系来说他就是一个对象,而docker的容器可以说就是镜像的一个实例。

   镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。(对前几层的操作只是在这一层进行操作,标记)

 

什么是docker的仓库:

   docker的仓库实际就是类似github的仓库上面都是docker的镜像

 

docker使用

首先我们需要从docker镜像仓库上获取镜像命令是 docker pull 命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
b849b56b69e7: Pull complete
42986ef25bcd: Pull complete
d927c1b717ec: Pull complete
15b86ea20233: Pull complete
Digest: sha256:b967b9f2a5625231a22db642609e61b7b1a5481128f51fe771e91bb92e0a35d0
Status: Downloaded newer image for ubuntu:16.04

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 ubuntu:18.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。

 

docker如何查看镜像信息:

docker image ls
$ docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
redis                latest              5f515359c7f8        5 days ago          183 MB
nginx                latest              05a60462f8ba        5 days ago          181 MB
mongo                3.2                 fe9198c04d62        5 days ago          342 MB
<none>               <none>              00285df0df87        5 days ago          342 MB
ubuntu               18.04               f753707788c5        4 weeks ago         127 MB
ubuntu               latest              f753707788c5        4 weeks ago         127 MB

另外一个需要注意的问题是,docker image ls 列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。

 

你可以通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间。

数据卷:

  是在本地创建一个文件挂载到docker容器中,即使容器被删除数据也在。

$ docker system df

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              24                  0                   1.992GB             1.992GB (100%)
Containers          1                   0                   62.82MB             62.82MB (100%)
Local Volumes       9                   0                   652.2MB             652.2MB (100%)
Build Cache                                                 0B                  0B

 

虚悬镜像(dangling)

可以看到在命令 docker image ls 列出的镜像中有(REPOSITORY TAG)都为<none>的镜像,这种镜像就被称为虚悬镜像(dangling)

由于下载pull 或者 build 镜像新旧镜像是一样的导致命名重复就镜像就会成为虚悬镜像

筛选虚悬镜像

$ docker image ls -f dangling=true
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              00285df0df87        5 days ago          342 MB

一般来说虚悬镜像已经没有使用的必要了

$ docker image prune

 

筛选镜像列表

$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               b0ef3016420a        13 days ago         117MB

--filter 或者 -f(像筛选dangling docker)

$ docker image ls -f label=com.example.version=0.1
...

 

$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY          TAG
5f515359c7f8        redis               latest
05a60462f8ba        nginx               latest
fe9198c04d62        mongo               3.2
00285df0df87        <none>              <none>
f753707788c5        ubuntu              18.04
f753707788c5        ubuntu              latest

 

删除镜像

$ docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
centos                      latest              0584b3d2cf6d        3 weeks ago         196.5 MB
redis                       alpine              501ad78535f0        3 weeks ago         21.03 MB
docker                      latest              cf693ec9b5c7        3 weeks ago         105.1 MB
nginx                       latest              e43d811ce2f4        5 weeks ago         181.5 MB

 

使用ID过滤删除

$ docker image rm 501

 

使用存储库名称删除

$ docker image rm centos

  

用 docker image ls 命令来配合

$ docker image rm $(docker image ls -q redis)

  

$ docker image rm $(docker image ls -q -f before=mongo:3.2)

  

posted @ 2019-01-11 16:26  沈俊杰  阅读(177)  评论(0编辑  收藏  举报