Docker 镜像

Docker 使用镜像创建容器的过程:现在本机查找有无该镜像,如果不存在,就去官方Docker Hub 仓库查找并下载到本机,然后基于该容器创建容器。

docker run --name gitlab-redis -d sameersbn/redis:latest

镜像分层

Docker 镜像采用分层机制,相同部分独立成层,所以,相同部分只需要存储一份即可,大大节省了镜像空间。


image.png

Docker镜像的两个特性:

  • 一个已有的分层只能读不能修改
  • 上层镜像的优先级高于底层镜像
    举例:


    image.png

    通过修改读写层生成镜像(通过容器的方式创建镜像)存在的弊端:会导致镜像的层数越来越多,允许的最大层数为128;底层镜像修改,影响大量的上层镜像。

Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

在撰写 Dockerfile 的时候,要经常提醒自己,这并不是在写 Shell 脚本,而是在定义每一层该如何构建

语法规则:

  • From:表示新的镜像从以那个镜像为基础进行构建
  • MAINTAINER:指定镜像的创建者
  • ENV:设置环境变量
  • RUN:运行shell命令,如果有多条命令可以用 && 连接
    RUN apt-get update
    RUN [ "apt-get", "update" ]
  • COPY:将编译机本地文件拷贝到镜像文件系统中
  • EXPOSE:指定监听的端口
  • ENTRYPOINT:创建的容器启动后才执行
  • CMD:和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。

上下文路径:

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。