Kubernetes——容器应用配置的配置方式

容器应用配置的配置方式

  如何为容器中的应用提供配置信息呢?传统时间中,通常有这么几种途径:启动容器时直接向命令传递参数、将定义好的配置文件编码于(嵌入)镜像文件中、通过环境变量(Environment Variables)传递配置数据,以及基于 Docker 卷传送配置文件等。

一、通过命令行参数进行配置

  在制作 Docker 镜像时,Dockerfile 中的 ENTRYPOINT 和 CMD 指令可用于指定容器启动时要运行的程序及相关的参数。

  CMD 指令以列表形式指定要运行的程序及相关的参数,但若同时存在 ENTRYPOINT 指令,则 CMD 指令中列表的所有元素均将被视作是 ENTRYPOINT 指定的程序的命令行参数。

  还可以通过在基于某镜像使用 Docker 命令创建容器时,在命令行向 ENTRYPOINT 中的程序传递额外的自定义参数,甚至还可以修改要运行的应用程序本身。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  其中的 [COMMAND] 即为自定义运行的程序,[ARG...] 则是传递给程序的参数。

  若定义相关的镜像文件时使用了 ENTRYPOINT 指令,则 [COMMAND] 和 [ARG...] 都会被当做命令行参数传递给 ENTRYPOINT 指令中指定的程序,除非为 docker run 命令额外使用 --entrypoint 选项覆盖了 ENTRYPOINT 而指定运行其他程序,如下:

      --entrypoint string              Overwrite the default ENTRYPOINT of the image

二、将配置文件嵌入镜像文件

  所谓的将配置文件嵌入镜像文件,是指用户在 Dockerfile 中使用 COPY 指令把定义好的配置文件复制到镜像文件系统上的目标位置,或者使用 RUN 指令调用 sed 或 echo 一类的命令修改配置文件从而达到为容器化应用提供自定义配置文件值目的。

三、通过环境变量向容器注入配置信息

  通过环境变量为镜像提供配置信息是 Dcoker Hub 上最常见的使用方式。

docker run -e user=root -e password=xxx

help:
  -e, --env list                       Set environment variables
      --env-file list                  Read in a file of environment variables

  例如:使用 MySQL 官方提供的镜像文件启动 MySQL 容器视使用的 MYSQL_ROOT_PASSWORD 环境变量,它用于为 MySQL 服务器的 root 用户设置登录密码。

  Kubernetes 系统支持在为 Pod 资源配置容器时使用 spec.containers.env 为容器的环境变量传值从而完成应用的配置。

四、通过存储卷向容器注入配置信息 

  Docker 存储卷(volumes)能够将宿主机上的任何文件或目录映射到容器文件系统上,因此,可以事先将配置文件放置于宿主机上的某特定路径中,而后在启动容器时进行加载。

五、借助 Dcoker config 进行容器配置

  Docker swarm service 自 1.13版本起支持使用 secret 于容器之外保存二进制数据,包括口令、SSH证书以及其他不建议通过网络传输或不应该在 Dockerfile及程序源码中非加密保护的机密数据。

  Kubernetes 系统也有类似的组件,它们被称为 Secret 和 ConfigMap,而且是 Kubernetes 系统上一等类别的资源对象,它们要么被 Pod 资源以存储卷的形式加载,要么由容器通过 envFrom 字段以变量的形式加载。

 
posted @ 2022-06-25 15:44  左扬  阅读(273)  评论(0编辑  收藏  举报
levels of contents