DockerFile篇

DockerFile篇

前言:docker是一款容器管理工具,第一次知道docker是在几年前刚开始接触开发的时候,但一直没有对docker进行过深入的学习。之前只有简单的了解过docker基本命令,甚至都不知道docker file如何编写。直到今年初的一个项目,需要使用docker的容器编排,于是只能硬着头皮往上顶,经过一些简单的学习,发现docker file及容器编排并没有以前想象中的那么难,在搜索引擎的帮助下很快就完成了那个项目的容器编排。时间过了大半年,我终于开始重头整理下docker的相关指令和知识了,此次共分为安装篇,docker基础篇,dockerFile篇,docker_compose篇。

DockerFile的作用

DockerFile就是一个用来构建Docker镜像的文本文件,里面包含了一些构建镜像的指令。以前学Docker基础时总以为DockerFile很难很复杂,在实际上手过后发现基本不需要太多的学习成本

示例

在对DockerFile指令讲解前,我们先来看一个普通的DockerFile文件,这就是使用DockerFile将一个jar构建成镜像。

在这里插入图片描述

第一步是指定基础镜像,这个镜像可以是本地镜像也可以是远程仓库的镜像,这里可以理解为基础环境依赖,我们跑jar包,肯定是得需要依赖jdk环境的。

第二步是设置容器内的工作目录,设置这个工作目录后后续的容器指令都是以该目录作为基础目录的

第三步是将我们本地的jar包复制到容器的工作目录下去,我们想要通过容器部署jar,可不得容器内先有这个jar嘛

第四步是暴露端口,这一步其实没有那么必要,也可以在启动镜像的时候通过-p去手动映射端口

第五步是环境变量定义,这一步其实也没那么必要,比如这里我们就没有用到

第六步是通过Json(非shell)的方式运行这个jar包,这里第一个参数是可执行文件或者命令,后面的都是跟的需要拼接的参数

按照上面示例的步骤,参照示例的DcokerFile应该就能写出工作中大部分场景下的DockerFile了

DockerFile指令

对于DockerFile的指令,我还是按照我自己的理解来进行描述,对于我使用较多的会进行标黑

  • FROM:用来指定基础镜像的。
    • 这个指令从上面的示例也能看出来,它是必须存在,而且不可替代的,它可以存在多个
  • MAINTAINER:指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
  • LABEL:添加镜像的元数据,使用键值对的形式。就是用来添加一些描述信息的
  • RUN:在构建过程中在镜像中执行命令。
    • 这个指令用的挺多的,主要是针对构建过程中去执行命令,它也分Exec和shell两种方式
    • RUN [“executable”, “param1”, “param2”]或者RUN command
  • CMD:指定容器创建时的默认命令。(可以被覆盖)
    • 用来指定启动容器时执行的命令参数,可以被Docker run中的参数覆盖,多个只有最后一个CMD参数会生效
  • ENTRYPOINT:设置容器创建时的主要命令。(不可被覆盖)
    • 也是用来用来指定启动容器时执行的命令参数,但是不可以被覆盖,CMD的参数会传给**ENTRYPOINT** ,所以可以和CMD搭配使用,ENTRYPOINT 配置固定的命令参数,CMD配置可变的命令参数
  • EXPOSE: 声明容器运行时监听的特定网络端口
    • 用来暴露端口号的,如果不在DockerFile中指定,那也可以通过启动命令去指定,但必须得指定,不然会默认随机映射一个主机端口
  • ENV:在容器内部设置环境变量
    • 在容器内部设置环境变量,我的理解就是一个常量的配置,类似于配置JDK环境时往往都配置了一个JAVA_HOME的环境变量去指向JDK的目录
  • ADD:将文件、目录或远程URL复制到镜像中
    • 支持自动解压tar文件和从远程URL下载文件,我理解就是COPY的plus版本,但我更多时候使用的是COPY
  • COPY:将文件或目录复制到镜像中
    • 通常启动jar包的时候我会从外部指定配置文件,这时候就需要将外部的配置文件也打包到镜像中去,就可以使用该命令将外部的配置文件复制到镜像内去
  • VOLUME:为容器创建挂载点或声明卷
    • 为容器创建挂载点或声明卷,就是将容器内部的数据挂载到主机上,这样不至于容器被干掉了数据也没了,说白了就是持久化容器内部数据
  • WORKDIR:设置后续指令的工作目录
  • USER:指定后续指令的用户上下文
  • ARG:定义在构建过程中传递给构建器的变量,可使用 “docker build” 命令设置
  • ONBUILD:当该镜像被用作另一个构建过程的基础时,添加触发器
  • STOPSIGNAL:设置发送给容器以退出的系统调用信号
  • HEALTHCHECK:定义周期性检查容器健康状态的命令
  • SHELL:覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令

DockerFile的构建(2024-12-28新增)
之前写的时候搞忘写DockerFile的构建命令了,后续自己来翻DockerFile指令才注意到,我们写完DockerFile后还只是一个文本文件,要想让它构建成一个镜像需要用到docker build -t 镜像名:tag DockerFile所在目录

DockerFile的编写目前来看难度不大,至少我作为一名后端开发感觉已经很够用了,但我很少单独使用DockerFile,一般都是配合docker compose一起使用,在下一篇文章将会详细介绍docker compose相关知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值