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,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!

相关内容

热门资讯

小米mix能刷安卓7.0吗 小米MIX可以刷安卓7.0。但刷机有一定风险,可能导致设备无法正常使用或失去保修服务,建议谨慎操作并...
三星手机系统内存4g 三星手机系统内存4GB指的是手机的RAM大小,它决定了手机能够同时运行多少应用程序。4GB的RAM对...
魅蓝5s 6系统升级 魅蓝5s的Flyme 6系统升级主要带来了全新的One Mind智能思维引擎,优化了游戏模式,提升了...
w10系统权限哪里设置 在Windows 10系统中,权限设置通常在“控制面板”的“用户账户”中进行,可以调整用户权限和组策...
记者爆料!Wepoke线上原来... 记者爆料!Wepoke线上原来是有挂的,德普外挂透明挂代打(有挂揭秘)-哔哩哔哩;德普软件透明挂是一...
终于懂了!(闲来玩游戏)外挂透... 【福星临门,好运相随】;终于懂了!(闲来玩游戏)外挂透视辅助测试!(透视)教你教程(2021已更新)...
2个小技巧!(WEPOKE)外... 2个小技巧!(WEPOKE)外挂透明挂测试(辅助挂)软件透明挂(2025已更新)(哔哩哔哩);1、不...
研究成果!Wepoke德州局原... 相信很多朋友都在电脑上玩过德州吧,但是很多朋友都在抱怨用电脑玩起来不方便。为此小编给大家带来了德州手...
解密关于(多乐保皇黑科技)原来... 解密关于(多乐保皇黑科技)原来真有外挂辅助器透视(2021已更新)(哔哩哔哩)是一款可以让一直输的玩...
记者爆料!Wepoke工具原来... 您好,智星菠萝德州这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款...