dockerfile构建镜像
创始人
2024-09-26 04:50:40
0

        上回书说到containerd的基础命令,但是containerd无法构建镜像,但dockerfile可以,所以这一节我们就来探究一下何为dockerfile?


一、什么是dockerfile

       dockerfile 是一种用于定义和构建 docker 镜像的文本文件,由一行行指令和参数组成,用于描述镜像的构建和配置过程;由基础映像、软件包安装、文件拷贝、环境变量设置等组成;

        基于dockerfile构建镜像可以使用docker build命令,使用 -f 可以指定具体的dockerfile文件;

        使用dockerfile构建镜像的步骤如下:编写dockerfile文件-->docker build构建镜像-->docker run运行镜像;

二、dockerfile构建镜像过程

        我们可以看看dockerfile构建镜像的过程:

                1)docker从基础镜像运行一个容器,比如说centos;

                2)  docker执行一条RUN的指令,执行类似docker commit 的操作提交一个新的镜像层;

                3)docker基于刚才提交的镜像去运行一个新的容器;

                4)执行下一条指令,提交一个新的镜像层,直到所有的指令完成;

        ps:编写dockerfile时,切勿编写过多无意义的指令,否则会造成镜像膨胀过大!       

三、dockerfile基本构成

        我们可以看一下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"]
 1.FROM
        作用:指定基础镜像所有定制的镜像都是基于 FROM 的镜像,比如说我们的centos镜像;         格式: FROM [imagename]
2. MAINTAINER
        作用:指定镜像的作者信息;         格式: MAINTAINER [authorname]
3.LABEL
        作用:以键值对形式添加镜像元数据,它比MAINTAINER更为灵活,可以替代MAINTAINER;         格式: LABEL = = = ... 
4.RUN
        作用:在当前镜像构建时要运行的命令,有shell和exec两种格式;         shell格式: RUN          exec格式:RUN [“executable”,“param1”,“param2”]
5.CMD

        作用:指定容器docker run时运行的命令;与RUN的区别在于RUN 是在 docker build 构建镜像时运行的,CMD 则是在 docker run 时运行,CMD的指令可被覆盖,如果有多个CMD指令,只有最后一个生效;

        shell格式: CMD          exec格式:CMD [“executable”,“param1”,“param2”]

        作为ENTRYPOINT指令的默认参数: CMD [“param1”,“param2”]

6.ENTRYPOINT
        作用:指定容器docker run时运行的命令,与CMD类似,命令行参数会被作为ENTRYPOINT 指令指定的程序的参数,如果docker run 时使用了--entrypoint,会覆盖ENTRYPOINT 指令;         shell格式: ENTERYPOINT command       exec格式:ENTERYPOINT [“executable”,“param1”,“param2”]        搭配CMD:  ENTERYPOINT [“executable”,“param1”,“param2”] CMD  [“param1”,“param2”]
7.EXPOSE
        作用:声明容器运行时监听的端口,可以帮助镜像使用者配置映射;         格式: EXPOSE [...]
8.WORKDIR
        作用:设置后续指令的工作目录,用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 建立该目录;         格式: WORKDIR
9.ENV
         作用:设置环境变量;

         格式:ENV 或者 ENV = =

10.ARG
         作用:设置环境变量,但是与ENV有区别;ARG 设置的环境变量仅在dockerfile内有效;          格式: ARG  [=]
11.USER
         作用:用于指定执行后续命令的用户和用户组,只是切换后续命令执行的用户,用户和用户组必须提前已经存在;          格式: USER  [:]
12.ADD
         作用:将文件或目录拷贝到镜像中,且会自动处理URL和解压tar压缩包;          格式: ADD [--chown=:] <源路径1>... <目标路径>                    ADD [--chown=:] ["<源路径1>",... "<目标路径>"]
13.COPY
         作用: 将文件或目录拷贝到镜像中,类似于ADD,但是不会解压缩,如果只是单纯的复制,推荐使用copy;          格式:  COPY [--chown=:] <源路径1>... <目标路径>                     COPY [--chown=:] ["<源路径1>",... "<目标路径>"]
14.VOLUME
         作用:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷;

         格式:VOLUME ["<路径1>", "<路径2>"...]

15.STOPSIGNAL
         作用:设置将发送到容器以退出的系统调用信号;          格式: STOPSIGNAL [signal]
16.ONBUILD
         作用:为镜像添加触发器,在本次构建镜像的过程中不会执行,当有新的dockerfile使用了之前构建的镜像,此时会触发ONBUILD指定的指令;

         格式:ONBUILD<其他指令>

17.HEALTHCHECK
         作用:指定某个程序或者指令来监控 docker 容器服务的运行状态;          格式: HEALTHCHECK [选项] CMD
18.SHELL
         作用:覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令;          格式: SHELL ["executable", "parameters"]

四、dockerfile实践

        接下来,我也来实践一下dockerfile,比如说使用dockerfile安装一个nginx;   1、编写dockerfile文件    
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" . 

3、查看镜像        4、基于刚才的镜像启动容器
docker run -d -p 80 --name nginx2 chililopp/nginx:v1

5、查询一下容器运行状态

docker ps|grep nginx2

6、查询一下容器中的进程

docker top nginx2

7、进入容器看看
docker exec -it nginx2 /bin/bash

8、查看一下进程

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


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

相关内容

热门资讯

专业讨论!大赢家跑得快机制,江... 专业讨论!大赢家跑得快机制,江西中至麻将神器软件确实真有挂辅助挂,实用技巧(有挂存在)-哔哩哔哩;亲...
指导大家!hhpoker是真的... 指导大家!hhpoker是真的假的,WepokEr原来是真的有挂,AA德州教程(有挂成果)-哔哩哔哩...
透明规律(微扑克工具)外挂透明... 透明规律(微扑克工具)外挂透明挂辅助器(透视辅助)软件透明挂(有挂普及)-哔哩哔哩是一款可以让一直输...
二分钟透明挂!aapoker线... 二分钟透明挂!aapoker线上规律(辅助挂)德州微扑克外挂其实确实是有挂,软件透明挂(有挂必备)-...
一分钟了解(线上wpk德州)外... 一分钟了解(线上wpk德州)外挂透明挂辅助神器(透视)软件透明挂(有挂测试)-哔哩哔哩;一、线上wp...
八分钟操作!鱼扑克辅助,德州h... 《软件透明挂》是一款多人竞技的辅助透视游戏,你将微扑克对手来到同一个战场,为至高无上的荣耀进行一次自...
揭秘真相!wepoker有辅助... 您好,wepoker这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这...
透明科技!一起宁德钓蟹有挂,白... 您好,一起宁德钓蟹有挂这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在...
黑科技辅助!德扑之星是机制(透... 【福星临门,好运相随】;黑科技辅助!德扑之星是机制(透视辅助)扑克时间软件原来真的是有挂,软件透明挂...
透明安装(nzt德州)外挂透明... 透明安装(nzt德州)外挂透明挂辅助插件(辅助透视)软件透明挂(有挂教学)-哔哩哔哩;德扑锦标赛是一...