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

相关内容

热门资讯

透视科普!云扑克德州PK,we... 透视科普!云扑克德州PK,weopke真的(原来真的有挂);科技详细教程小薇《136704302》所...
透视开发!wpk德州透视辅助,... 透视开发!wpk德州透视辅助,wpk代打是真的(其实真的有挂);科技详细教程小薇《136704302...
透视普及!微扑克ai机器人,c... 透视普及!微扑克ai机器人,cloud辅助(其实真的有挂)1、透视普及!微扑克ai机器人,cloud...
六分钟实锤!德州哪里有扑克辅助... 六分钟实锤!德州哪里有扑克辅助器"德州ai人工智能(其实真的有挂)-哔哩哔哩;德州哪里有扑克辅助器黑...
透视开发!线上wpk德州ai机... 透视开发!线上wpk德州ai机器人,德扑ai软件(原来真的有挂)1、进入到德州ai机器人黑科技之后,...
8分钟透明挂!微扑克ai辅助工... 8分钟透明挂!微扑克ai辅助工具"wpk透视辅助测试(原来真的有挂)-哔哩哔哩是一款可以让一直输的玩...
透视科普!governorof... 透视科普!governorofpoker3有挂吗,线上德州辅助工具有哪些(原来真的有挂)1、ai辅助...
七分钟科普!poker外挂&q... 七分钟科普!poker外挂"aapoker外挂(其实真的有挂)-哔哩哔哩1、构建自己的poker外挂...
5分钟揭秘!wepower透视... 5分钟揭秘!wepower透视辅助"微扑克ai辅助(原来真的有挂)-哔哩哔哩;科技详细教程小薇《75...
透视开发!微扑克可以用模拟器,... 透视开发!微扑克可以用模拟器,wpk辅助器下载方式(其实真的有挂)1、ai辅助优化,发牌逻辑科技护佑...