上回书说到containerd的基础命令,但是containerd无法构建镜像,但dockerfile可以,所以这一节我们就来探究一下何为dockerfile?
dockerfile 是一种用于定义和构建 docker 镜像的文本文件,由一行行指令和参数组成,用于描述镜像的构建和配置过程;由基础映像、软件包安装、文件拷贝、环境变量设置等组成;
基于dockerfile构建镜像可以使用docker build命令,使用 -f 可以指定具体的dockerfile文件;
使用dockerfile构建镜像的步骤如下:编写dockerfile文件-->docker build构建镜像-->docker run运行镜像;
我们可以看看dockerfile构建镜像的过程:
1)docker从基础镜像运行一个容器,比如说centos;
2) docker执行一条RUN的指令,执行类似docker commit 的操作提交一个新的镜像层;
3)docker基于刚才提交的镜像去运行一个新的容器;
4)执行下一条指令,提交一个新的镜像层,直到所有的指令完成;
ps:编写dockerfile时,切勿编写过多无意义的指令,否则会造成镜像膨胀过大!
| dockerfile指令 | 说明 | 示例 | 
| FROM | 指定基础镜像,用于后续的指令构建镜像缓存 | FROM centos | 
| MAINTAINER | 指定镜像的作者信息 | MAINTAINER chililopp | 
| LABEL | 以键值对形式添加镜像元数据 | LABEL version="1.0" | 
| RUN | 在当前镜像构建时要运行的命令 | RUN yum install nginx | 
| CMD | 指定容器docker run时运行的命令,可被覆盖 | CMD ["/usr/sbin/nginx","-g","daemon off;"] | 
| ENTRYPOINT | 类似于CMD,但不可被覆盖 | ENTRYPOINT ["nginx", "-c"] | 
| EXPOSE | 声明容器运行时监听的端口 | EXPOSE 80 | 
| WORKDIR | 设置后续指令的工作目录。 | WORKDIR /etc/sbin | 
| ENV | 设置环境变量 | ENV NODE_VERSION 6.6.6 | 
| ARG | 和ENG类似,但作用域仅在dockerfile有效 | ARG NODE_VERSION 6.6.6 | 
| USER | 指定执行后续指令的用户和用户组 | USER nginx | 
| ADD | 将文件或目录拷贝到镜像中,且会自动处理URL和解压tar压缩包 | ADD index.html /usr/app/nginx/html/ | 
| COPY | 将文件或目录拷贝到镜像中 | COPY index.html /usr/app/nginx/html/ | 
| VOLUME | 定义数据卷 | VOLUME [“/data”] | 
| STOPSIGNAL | 设置发送给容器以退出的系统调用信号 | STOPSIGNAL signal | 
| ONBUILD | 用于延迟构建命令的执行 | ONBUILD COPY index.html /usr/app/nginx/html/ | 
| HEALTHCHECK | 定义周期性检查容器健康状态的命令 | HEALTHCHECK --interval=5s --timeout=3s  | 
| SHELL | 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令 | SHELL ["powershell", "-command"] | 
作用:指定容器docker run时运行的命令;与RUN的区别在于RUN 是在 docker build 构建镜像时运行的,CMD 则是在 docker run 时运行,CMD的指令可被覆盖,如果有多个CMD指令,只有最后一个生效;
shell格式: CMD作为ENTRYPOINT指令的默认参数: CMD [“param1”,“param2”]
         格式:ENV 
格式:VOLUME ["<路径1>", "<路径2>"...]
格式:ONBUILD<其他指令>
vim dockerfile_nginx FROM centos
MAINTAINER chililopp
LABEL version="1.0"
WORKDIR /etc
RUN rm -rf yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
RUN yum install nginx -y
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
2、构建镜像
docker build -f /docker/dockerfile/dockerfile_nginx -t "chililopp/nginx:v1" .  
docker run -d -p 80 --name nginx2 chililopp/nginx:v1 
5、查询一下容器运行状态
docker ps|grep nginx2 
6、查询一下容器中的进程
docker top nginx2 
docker exec -it nginx2 /bin/bash 
8、查看一下进程

9、访问一下服务,没有问题;

我是chililopp,正在学习k8s,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!