首页 > 其他分享 >dockerfile构建镜像

dockerfile构建镜像

时间:2024-07-11 17:56:58浏览次数:20  
标签:CMD nginx 构建 格式 镜像 docker dockerfile

        上回书说到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 <key1>=<value1> <key2>=<value2> <key3>=<value3> ... 
4.RUN
        作用:在当前镜像构建时要运行的命令,有shell和exec两种格式;         shell格式: RUN <commond>          exec格式: RUN [“executable”,“param1”,“param2”]
5.CMD

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

        shell格式: CMD <commond>          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 <port1> [<port2>...]
8.WORKDIR
        作用:设置后续指令的工作目录,用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 建立该目录;         格式: WORKDIR <dir>
9.ENV
         作用:设置环境变量;

         格式:ENV <key> <value> 或者 ENV <key1>=<value1> <key2>=<value2>

10.ARG
         作用:设置环境变量,但是与ENV有区别;ARG 设置的环境变量仅在dockerfile内有效;          格式: ARG <key> [=<value>]
11.USER
         作用:用于指定执行后续命令的用户和用户组,只是切换后续命令执行的用户,用户和用户组必须提前已经存在;          格式: USER <user> [:<group>]
12.ADD
         作用:将文件或目录拷贝到镜像中,且会自动处理URL和解压tar压缩包;          格式: ADD [--chown=<user>:<group>] <源路径1>... <目标路径>                     ADD [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
13.COPY
         作用: 将文件或目录拷贝到镜像中,类似于ADD,但是不会解压缩,如果只是单纯的复制,推荐使用copy;          格式:  COPY [--chown=<user>:<group>] <源路径1>... <目标路径>                      COPY [--chown=<user>:<group>] ["<源路径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,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!

标签:CMD,nginx,构建,格式,镜像,docker,dockerfile
From: https://blog.csdn.net/chililopp/article/details/140300830

相关文章

  • windows安装Docker Desktop及国内镜像
    简介Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。通过Docker工具,简化了应用的部署、配置和管理过程,提高了开发效率和应用的可靠性、可移植性和可扩展性。DockerDeskto......
  • 【ChatGPT 微服务应用体系构建】开发文档
    ChatGPT微服务应用体系构建1.需求分析2.技术选型3.功能开发3-1.Nginx简单访问认证3-2.Shiro登录授权发放访问token3-3.Docker镜像构建和容器部署3-4.ChatGPT-SDK组件开发3-5.微信公众号验签和初步对接OpenAI1.需求分析2.技术选型3.功能开......
  • ali - Kubernetes镜像源
    1.Kubernetes镜像源配置由于Kubernetes官方变更了仓库的存储路径以及使用方式,如果需要使用1.28及以上版本,请使用新版配置方法进行配置。下载地址:https://mirrors.aliyun.com/kubernetes/新版下载地址:https://mirrors.aliyun.com/kubernetes-new/1.1配置方法新版配置方......
  • 阿里云镜像仓库的使用详解
    一、镜像仓库介绍Registry是Docker公司的一项创新,它提供了存放镜像的仓库服务。在构建好镜像后,我们通常会将镜像上传到Registry服务器上进行保存。这样可以保证不会因本机故障而导致镜像丢失,同时,其他机器也能很方便地通过网络方式下载。DockerHub即为Docker官方的Registry服务......
  • 中小学校园EasyCVR视频综合监管方案:构建安全、智能的校园环境
    一、背景需求分析随着科技的快速发展,校园安全问题日益受到社会各界的关注。尤其是在中小学校园中,学生的安全更是牵动着每一个家庭的心。为了更有效地保障学生的安全,提高校园安全管理水平,视频监控系统在中小学中的应用越来越广泛。在当今日益重视学校安全的背景下,为满足校园安全......
  • Dockerfile构建前后端分离项目
    【Dockerfile构建前后端分离项目】1.创建专用网络dockernetworkcreateappnet2.构建MYSOL服务器镜像2.1.准备工作创建专用目录mkdirapp/db-p获取配置文件#创建一个存放数据库配置文件的文件夹cdapp/db#创建临时mysql容器,目的是将里面的配置文件拷贝出来......
  • Perl词法作用域:自定义编程环境的构建术
    ......
  • 构建未来对话:从零开始实现基于Vue 3的AI聊天页面
    大家好,今天我们将一起探索如何从零开始,使用Vue3构建一个AI对话页面。这个过程不仅会让我们了解Vue3的新特性,还会让我们对构建交互式Web应用有一个全新的认识。如果你是编程新手,别担心,我会用通俗易懂的语言,确保你能够跟上每一步。第一步:搭建Vue3工程首先,我们需要搭建Vue3......
  • centos 更换yum的镜像源为aliyun
    /etc/yum.repos.d/CentOS-Base.repo是设置具体的镜像源复制整个命令块,从cat>开始,一直到最后的EOF。将整个命令块粘贴到终端中。按Enter键。如果一切正常,命令会自动执行,并创建(或覆盖)文件/etc/yum.repos.d/CentOS-Base.repo。命令执行完毕后,你会回到正常的命令提示符。......
  • CDGA|数据治理:构建高质量数据要素供给体系的核心在于畅通流通渠道
    随着数字化时代的到来,数据已经成为驱动经济社会发展的核心要素。数据治理作为确保数据质量、保障数据安全、促进数据价值实现的重要手段,其重要性日益凸显。在数据治理的众多环节中,构建高质量数据要素供给体系尤为关键,而该体系的核心则在于畅通高质量数据要素的流通渠道。高质......