docker dockerfile操作指令和K8s yaml资源清单文件

Posted 噫噫噫呀呀呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker dockerfile操作指令和K8s yaml资源清单文件相关的知识,希望对你有一定的参考价值。

一、dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

格式要求

●第一行必须使用FROM指令指明所基于的镜像名称;
●之后使用MAINTAINER 指令说明维护该镜像的用户信息;
●然后是镜像操作相关指令,如RUN指令。每运行一条指令,都会给基础镜像添加新的一层。
●最后使用CMD指令指定启动容器时要运行的命令操作。

操作指令

FROM     #基础镜镜像,一切从这里开始构建
MAINTAINER   #镜像是谁写的,姓名+邮箱
RUN         #镜像构建的时候需要运行的命令
ADD      #步骤: tomcat镜像, 这个tomcat压缩包! 添加内容
WORKDIR    #镜像的工作目录
VOLUME       #挂载的目录
EXPOSE        #保留端口配置
CMC           #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT     #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD         #当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。 触发指令。
COPY           #类似ADD,将我们文件拷贝到镜像中
ENV                   #构建的时候设置环境变量!

详解

(1) FROM 镜像

指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一 条FROM 指令

(2) MAINTAINER 名字

说明新镜像的维护人信息

(3)RUN 命令

在所基于的镜像上执行命令,并提交到新的镜像中(镜像构建时需要运行的命令)

(4) ENTRYPOINT [“要运行的程序”,“参数1”, “参数2”]

设定容器启动时第一个运行的命令及其参数。
可以通过使用命令dockerrun–entrypoint来覆盖镜像中的ENTRYPOINT指令的内容。

(5) CMD [“要运行的程序”,“参数1”, “参数2”]

上面的是exec形式,shell形式: CMD命令参数1参数2
启动容器时默认执行的命令或者脚本,Dockerfile只能有一 条CMD命 令。如果指定多条命令,只执行最后一条命令。
如果在dockerrun时指定了命令或者镜像中有ENTRYPOINT,那么cmd就会被覆盖。
CMD可以为ENTRYPOINT指令提供默认参数

(6) EXPOSE 端口号

指定新镜像加载到Docker时要开启的端口

(7) ENV 环境变量变量值

设置一个环境变量的值,会被后面的RUN使用

(8) ADD 源文件/目录目标文件/目录

将源文件复制到镜像中,源文件要与Dockerfile 位于相同目录中,或者是一个URL

有如下注意事项:
1、如果源路径是个文件,且目标路径是以/结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。
2、如果源路径是个文件,且目标路径是不是以/结尾,则docker 会把目标路径当作一个文件。
如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以/结尾,以避免混淆。
3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。.
如果目标路径是个已经存在的目录,则docker 会把源路径目录下的文件拷贝到该目录下。
4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。
URL下载和解压特性不能一起使用。任何压缩文件通过URL拷贝,都不会自动解压。

(9) COPY 源文件/目录目标文件/目录

只复制本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中

(10) VOLUME [“目 录"]

在容器中创建一个挂载点

(11) USER 用户名/UID

指定运行容器时的用户

(12) WORKDIR 路径

为后续的RUN、 CMD、ENTRYPOINT 指定工作目录

(13) ONBUILD 命令

指定所生成的镜像作为一个基础镜像时所要运行的命令。
当在一个Dockerfile文件中加.上ONBUILD指令,该指令对利用该Dockerfile构建镜像( 比如为A镜像)不会产生实质性影响。
但是当编写一个新的Dockerfile文件来基于A镜像构建一个镜像 (比如为B镜像)时,这时构造A镜 像的Dockerfile 文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令。

(14) HEALTHCHECK 健康检查

dockerfile案例

ssh、systemctl、nginx、Tomcat、MySQL

cd /opt
mkdir apache
cd apache
vim Dockerfile

#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER The porject <cloud-ops@centos.org>
#镜像操作指令安装apache软件
RUN yum -y update    #更新yum
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

echo "web test" > index.html

//生成镜像
docker build -t httpd:centos . (注意别忘了末尾有".",且.前面有空格)

//新镜像运行容器
docker run -d -p 1216:80 httpd:centos # -P 随机映射
//测试
curl http://192.168.110.10:1216

二、yaml(资源清单文件、资源编排)

k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。

基本语法

●大小写敏感
●使用缩进表示层级关系
●缩进不允许使用tab,只允许空格
●缩进的空格数不重要,只要相同层级的元素左对齐即可
●’#'表示注释
●使用—表示新的yaml文件开始

yaml文件组成部分

(1)控制器定义
(2)被控制对象

数据类型

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

对象类型:对象的一组键值对,使用冒号结构表示
name: Tom
age: 11

hash: {name: Tom, age: 11}

数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

一组连词线开头的行,构成一个数组
People
- Tom
- Jack
People: [Tom,	Jack]

纯量(scalars):单个的、不可再分的值

常用字段

编写yaml文件方法

使用kubectl create 命令生成yaml文件

使用kubectl get 命令导出yaml文件

实例

以上是关于docker dockerfile操作指令和K8s yaml资源清单文件的主要内容,如果未能解决你的问题,请参考以下文章

k8s 传参给docker env commandargs和dockerfile中的entrypointcmd之间的关系

Docker&K8s---Docker的安装部署镜像管理容器操作Dockerfile

Docker&K8s---Docker的安装部署镜像管理容器操作Dockerfile

Docker Dockerfile详解

构建Docker镜像:nginx

构建Docker镜像:tomcat