dockerfile

概念 装的是构建镜像的命令

镜像概念 镜像与jar包区别

  • 镜像包含运行所需的所有环境和条件,不依赖于宿主环境;jar包依赖
  • 镜像属于静态文件,jar包是可执行文件
  • 镜像依赖docker引擎加载运行,例如可以在windows上用docker desktop来运行镜像(跨平台性)

dockerfile中的基本指令

  • from 指定基础镜像
  • run 【构建过程中】执行命令行,写法有2种:1、后面接shell命令;2、接执行文件和参数,如RUN ["./test.php", "dev", "offline"]
  • copy 复制:写法 copy sources destination 复制到新的一层。
    • 其中sources处于上下文路径,可以是多个,也可以用通配符(符合GO语法)匹配多个;destination 可以是容器的绝对路径,也可以是相对路径(基于工作目录workdir)。
    • 另外,目标路径的文件夹无需提前创建,不存在时会自动创建。被复制的文件的元数据也会被保留,如权限、修改时间等。
    • 可以使用cory --chown=<user>:<group> xxx来改变复制后的用户和组。
    • 如果source是文件夹,则会复制该文件夹下的所有文件,不是复制整个文件夹。
  • add 更高级的复制命令,相比于add,主要特点是还会自带解压功能(当源文件为压缩tar格式,且格式为gzip,bzip2,xz)。因此,COPY是更为准确的复制场景,如果是需要解压,才推荐使用ADD
  • env 容器内环境变量
  • cmd 容器【创建时】执行的默认命令,可以被覆盖
  • entrypoint 容器【创建时】执行的主要命令,不可被覆盖
  • label 元数据,键值对形式
  • expose 监听的端口
  • volume 声明卷
  • workdir 后续指令的工作目录
  • user 后续指令的用户上下文
  • arg 传递给构建器的变量

特殊符号:\, &&, ;

  • \ 为换行符,作为一个命令拆为多行写的每行末尾的换行符,提高可读性。并且这种写法不会使得因为多行run的写法,而生成多层镜像
  • && 命令a && 命令b 表示命令a执行成功,才会执行命令b
  • ; 命令a ; 命令b 命令b的执行不会受到命令a的结果影响 举例写法
1
2
3
4
5
RUN apt-get update && \
    apt-get install -y \
    package1 \
    package2 \
    package3

构建镜像指令:docker build,用于从dockerfile中构建镜像。 常用命令: docker build -t myimage:latest .

使用当前目录下的dockerfile进行构建,-t指定要构建的镜像的名词和标签

docker build -f dockerfilepath -t myimage:latest

-f 指定dockerfile路径