Dockerfile构建镜像

Docker镜像是由⽂件系统叠加⽽成的,系统的最底层是 bootfs,相当于就是Linux内核的引导⽂件系统;接下来第⼆层是rootfs,这⼀层可以是⼀种或多种操 作系统(如Debian或Ubuntu⽂件系统),Docker中的rootfs是只读状态的;Docker利⽤联合挂载技 术将各层⽂件系统叠加到⼀起,最终的⽂件系统会包含有底层的⽂件和⽬录,这样的⽂件系统就是⼀ 个镜像。

Dockerfile构建镜像

Dockerfifile 是⼀种专⻔为了构建镜像⽽定义的⽂本⽂件,⾥⾯详细记录了创建镜像必须要 执⾏的所有操作。

Dockerfifile使⽤DSL(Domain Specifific Language)来构建⼀个Docker镜像,只要编辑好了 Dockerfifile⽂件,就可以使⽤ docker build 命令来构建⼀个新的镜像。

1.创建文件

touch Dockerfile

2.编辑文件内容

FROM ubuntu:latest 

RUN apt-get update -y \ 

 	&& apt-get upgrade -y \ 

 	&& apt-get install -y python3 \ 

 	&& apt-get install -y python3-pip \ 

 	&& apt-get autoclean \ 

 	&& apt-get autoremove

3.构建

docker build -t pydev:latest ./

Dockerfile指令详解

  • COPY
    • 格式:COPY 原路径1 原路径2 目标路径
    • 功能:用来将宿主机的文件复制到镜像中,常用来拷贝一些文件,或者一些数据文件
  • FROM
    • 格式: FROM 镜像名:Tag
    • 功能: ⽤来指明基于哪个镜像作为基础来进⾏构建,⼀般基础镜像使⽤ Docker 官⽅ 的镜像来进⾏构建
  • ADD
    • 格式: ADD 源路径1 源路径2 ... ⽬标路径
    • 功能: ⽐ COPY 更强⼤的复制命令,COPY 只能复制⽂件,⽽ ADD 可以从⼀个 URL 去下载 ⽂件,然后添加到镜像中。 甚⾄可以是⼀个压缩包,ADD 可以将压缩包中的内容解压到⽬标路径,⽀持 tar、 gzip、bz2、xz 等格式。
  • RUN
    • 格式: RUN 命令 参数1 参数2 ...
    • 功能: 构建时需要执⾏的操作,它可以像 Shell 脚本⼀样执⾏ Linux 中的命令。 不要写太多 RUN 命令,因为每执⾏⼀次,镜像便会多⼀层,Docker 最多允许 127 层,同时过多的层也会造成镜像体积增⼤
    • RUN 中的命令最好⽤ && 连接起来:
  • CMD
    • 格式: CMD 命令 参数1 参数2 ...
    • 功能: ⽤于指定容器主进程的默认启动命令。 如果运⾏容器时指定了别的命令,则 CMD 会被替换。
    • 注意:容器不是虚拟机,仅仅是⼀个进程,所以容器中必须要有开在前台的主进 程,如果将容器中的进程开在后台,会造成容器退出
  • ENTRYPOINT
    • 格式: ENTRYPOINT 命令 参数1 参数2 ...
    • 功能:
      • 程序的⼊⼝点,与 CMD 类似⽤来指定容器启动程序及参数。
      • 如果运⾏容器时,同时指定了 ENTRYPOINT 和 CMD,则 CMD 会变为 ENTRYPOINT 的⼀个参数, 容器运⾏时实际执⾏的命令为: ENTRYPOINT CMD
      • 这样的优点是运⾏容器时可以指定额外的参数, 以 Django 为例,这样设置: ENTRYPOINT python manage.py runserver, 这样容器运⾏时会开在 127.0.0.1:8000 地址,但是运⾏时我们想让他运⾏在 0.0.0.0:80 上, 就可以这样运⾏容器: docker run -p 80:80 django 0.0.0.0:80, 这样结尾的 0.0.0.0:80 便作为参数传给了 ENTRYPOINT
  • ENV
    • 格式:
      • ENV 变量名 变量值
      • ENV 变量名1=变量值1 变量名2=变量值2 变量名3=变量值3
    • 功能: 需要设置容器的环境变量,如 PATH、PYTHONPATH、DJANGO_SETTINGS_MODULE 等
  • ARG
    • 格式: ARG 参数名[=<默认值>]
    • 功能: 设置构建过程中的环境变量
  • VOLUME
    • 格式: VOLUME 路径
    • 功能:
      • 设置运⾏时需要挂载的匿名数据卷。
      • 因为容器运⾏时应该防⽌容器存储层发⽣写操作,所有数据⽅⾯的改动需要保存 到数据卷。 指定了匿名卷能让程序的数据输出直接写到数据卷中。⽐如程序⽇志、数据库的 数据⽂件、Redis 的数据镜像等
  • EXPOSE
    • 格式: EXPOSE 端⼝1 端⼝2 ...
    • 功能: 声明当前镜像需要开放那些端⼝。仅仅是声明⼀下,运⾏容器时需要⼿动指明 要开放的端⼝
  • WORKDIR
    • 格式: WORKDIR ⼯作⽬录路径
    • 功能: ⽤来指定容器的⼯作⽬录

你可能感兴趣的:(docker)