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原来真实是有挂辅助挂,大神讲解(有挂套路)-哔哩...
必备攻略(wepoke好友房)... 必备攻略(wepoke好友房)外挂透明挂辅助插件(透视)软件透明挂(有挂助手)-哔哩哔哩;一、wep...
四分钟了解!wpk用辅助器(透... 四分钟了解!wpk用辅助器(透视辅助)微扑克智能原来真实是有挂辅助挂,软件透明挂(有挂教程)-哔哩哔...
六分钟胜率!wepoke透明挂... 六分钟胜率!wepoke透明挂件,wepoker辅助工具,爆料教程(有挂安装)-哔哩哔哩;wepok...
让我来分享经验!亲友棋牌有挂,... 让我来分享经验!亲友棋牌有挂,多乐跑得快牌确实是真的有挂,揭秘教程(有挂实锤)-哔哩哔哩是一款可以让...
玩家必看科普!hhpoker智... 您好,WEPOKEr这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这...
实测交流(德州数据)外挂透明挂... 实测交流(德州数据)外挂透明挂辅助工具(辅助透视)软件透明挂(有挂盘点)-哔哩哔哩;德州数据免费下载...
1分钟了解!鱼扑克发牌规律(辅... 您好,鱼扑克发牌规律这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这...
玩家必看攻略!如何判断wpk辅... 玩家必看攻略!如何判断wpk辅助软件的真假,WepOker软件透明挂,专业教程(有挂技巧)-哔哩哔哩...
每日必看推荐!陕西微乐挖坑有漏... 每日必看推荐!陕西微乐挖坑有漏洞,吉祥游戏辅助器安卓有挂确实有辅助挂,我来教教你(有挂方法)-哔哩哔...