文档《docker从入门到实践》

声明:该文章并不会另你掌握docker,仅仅是如何学习。

查看docker 镜像时区 docker查看镜像dockerfile_redis


当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  1. 从已经创建的容器中更新镜像,并且提交这个镜像
  2. 使用 Dockerfile 指令来创建一个新的镜像

Dockfile

查看docker 镜像时区 docker查看镜像dockerfile_centos_02

FROM centos:latest
RUN groupadd -r redis \
&& useradd  -r -g redis redis
RUN yum -y update \
&& yum -y install epel-release \
&& yum -y install redis \
&& yum -y install net-tools
EXPOSE 6379

这是一个centos系统的redis服务 开放的端口是6379;注意\符号是书写上的换行,使之更直观,但不是真正的换行,代表书写换行但其实是尾随连接。而真正的换行处不可以用\,如FROM与RUN是两行,FROM后不可以用\,否则就是语法错误。该文件共有四行,FROM,RUN,RUN,EXPOSE。

注意事项

最好将Dockfile放在空目录下,不要放在该目录下放入无关紧要的文件,否则docker会把其他文件也打包成镜像,使得镜像十分的臃肿。

查看docker 镜像时区 docker查看镜像dockerfile_查看docker 镜像时区_03

创建镜像

在 Dockerfile 文件所在目录执行:

查看docker 镜像时区 docker查看镜像dockerfile_Dockfile_04


查看docker 镜像时区 docker查看镜像dockerfile_centos_05


语法:docker build [选项] <上下文路径/URL/->

创建镜像命令docker build -t redis .

-t = tag 指定tag名称 ;注意 redis后边跟着的.点,代表上下文路径,当前目录。docker会把该目录下所有的区域当作上下文区域,所以该目录下只能是必要文件。


build命令会根据Dockfile创建一个只读文件系统

查看镜像命令 docker image ls

查看docker 镜像时区 docker查看镜像dockerfile_查看docker 镜像时区_06


由于docker build -t redis . 由于没有指定tag,所以默认latest。重新看-t命令

查看docker 镜像时区 docker查看镜像dockerfile_redis_07


所以为了区分,一般是docker build -t redis:1.0 . 来标记镜像。

docker image ls -a

默认的 docker image ls 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数 = list all

查看docker 镜像时区 docker查看镜像dockerfile_centos_08


查看docker 镜像时区 docker查看镜像dockerfile_centos_09

虚悬镜像

文档中提到ls -a 显示的<none>标签的虚悬镜像,不同于ls列出的虚悬镜像。前者是一些镜像的依赖,后者是可以任意删除的。

查看docker 镜像时区 docker查看镜像dockerfile_redis_10


当再次通过同一dockfile创建新的镜像时,新镜像会使用已安装的镜像层,安装会很快。

docker build -t redis:1.0 . 用来区分latest。这里体现了FROM,RUN,RUN,EXPOSE 四行=四步。

查看docker 镜像时区 docker查看镜像dockerfile_docker_11


查看docker 镜像时区 docker查看镜像dockerfile_查看docker 镜像时区_12


redis:1.0 和 redis:latest 是两个不同的镜像。然而它们共用了相同的中间层镜像。