Dockerfile使用及案例详解

这篇具有很好参考价值的文章主要介绍了Dockerfile使用及案例详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、常用Dockerfile指令

FROM          # 基础镜像
MAINTAINER    # 镜像作者信息 姓名+邮箱
RUN           # 镜像构建的时候运行的命令
ADD           # copy内容到容器(压缩包,自动解压)
COPY          # 类似ADD 将文件copy到容器中
WORKDIR       # 指定镜像工作目录
VOLUME        # 设置容器卷
EXPOSE        # 指定暴露端口
ONBUILD       # 当构一个被继承的容器 dockerfile这个时候会运行ONBUILD 的指令 ,触发指定。
ENV           # 构建时设置环境变量
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令(可以追加命令)
CMD           # 指定这个容器启动的时候要运行的命令(只有最后一个会生效,可被代替)
LABEL         # 指令用来给镜像添加一些元数据
HEALTHCHECK   # 用于指定某个程序或者指令来监控 docker 容器服务的运行状态
ARG           # ARG设置环境变量仅对 Dockerfile 内有效

构建镜像:

docker  build -t 镜像名称:版本  -f Dockefile文件  .
# -t  指定镜像名字:版本
# -f  指定Dockerfile文件   
# .  代表在当前目录下

二、常用指令详解

FROM指令:

  • 基础镜像必须是可以下载下来的

MAINTAINER指令:

  • 指定作者信息+联系方式

RUN指令:

  • RUN指令相当于你在镜像中操作的命令,包含两种模式:

    • Shell模式:

      RUN yum install -y vim
      
    • Exec模式:只要涉及到空格都需要使用 “,” 逗号代替

      RUN ["yum","install","-y","vim","wget"]
      

EXPOSE指令:

  • 仅仅只是声明端口,在docker run -P 时,会自动随机映射EXPOSE指定的端口到宿主机端口。

    EXPOSE 80 81
    

CMD指令:

  • 运行容器时执行的命令,如果存在多个CMD指令只有最后一个生效。

  • CMD指令指定的程序可被docker run 命令行参数中指定要运行的程序所覆盖。

  • 列如:下面部署nginx例子,启动容器时运行CMD指令,从而启动nginx服务。

    FROM centos:7
    RUN yum install wget proc-devel  net-tools gcc  zlib  zlib-devel  make openssl-devel  -y
    RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz
    RUN tar zxf nginx-1.14.2.tar.gz -C /usr/local/src/
    RUN cd /usr/local/src/nginx-1.14.2/ && ./configure  --prefix=/usr/local/nginx && make && make install
    WORKDIR  /usr/local/nginx/
    EXPOSE 80 443
    RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
    
    ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;","-c"]
    CMD ["/usr/local/nginx/conf/nginx.conf"]
    

ENTRYPOINT指令:

  • 类似于CMD指令,但其实不会被 docker run 的命令行参数指令所覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序。

  • 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 entrypoint指令指定的程序。

  • 如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

  • 一般常用来搭配CMD指令一起使用 CMD指定作为变参,ENTRYPOINT指定作为定参。

    ENTRYPOINT ["/usr/sbin/nginx","-c"]  # 定参,参数不变
    CMD ["/usr/local/nginx/conf/nginx.conf"] # 变参,docker run时,可在命令行指定
    
  • 如下例子:

    FROM centos:7
    RUN yum install wget proc-devel  net-tools gcc  zlib  zlib-devel  make openssl-devel  -y 
    RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz 
    RUN tar zxf nginx-1.14.2.tar.gz -C /usr/local/src/ 
    RUN cd /usr/local/src/nginx-1.14.2/ && ./configure  --prefix=/usr/local/nginx && make && make install
    WORKDIR  /usr/local/nginx/
    
    EXPOSE 80 443
    RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
    
    ENTRYPOINT ["/usr/sbin/nginx","-c"]
    CMD ["/usr/local/nginx/conf/nginx.conf"]
    

    构建镜像:

    docker build -t test:v1 -f Dockerfile .
    

    运行容器时可指定nginx配置文件:“/root/qinzt/dockerfile/test/new.conf” 文件会替换CMD指令后文件。

    docker run -itd --name nginx test:v1 /root/qinzt/dockerfile/test/new.conf
    

COPY指令:

  • 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

  • 格式:文章来源地址https://www.toymoban.com/news/detail-585744.html

    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
    COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
    
  • [–chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组

  • 源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:

    COPY hom* /mydir/
    COPY hom?.txt /mydir/
    
  • 目标路径:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建

ADD指令:

  • ADD 指令和 COPY 的使用格式一致。ADD如果负责源文件是压缩包等格式会自动解压缩。

    ADD dockerInstall.tar.gz /usr/local/src
    

VOLUME指令:

  • 定义匿名数据卷,在启动容器是自动挂载匿名卷。

  • 容器目录和宿主机目录,是实时同步的。

  • 格式:

    VOLUME ["<路径1>", "<路径2>"...]
    VOLUME <路径>
    
  • 如下例子:

    FROM centos:7
    VOLUME ["/data1","/data2"]
    CMD ["/bin/bash"]
    
    docker build -t volume:v1 .
    docker run -itd --name test1 volume:v1
    

    可以使用docker inspect 命令查看到和宿主机目录同步位置

    docker inspect test1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TbPXqDQ-1681981251613)(D:\MD归档文档\IMG\image-20230415175903214.png)]

WORKDIR指令:

  • 指定工作目录,目录必须是存在的。

ENV指令:

  • 用来为构建镜像设置环境变量,这个值将出现在构建阶段中所有后续指令环境中。

  • 格式:

    ENV <key> <value>
    ENV <key>=<value>...
    
  • 例子:

    FROM centos:7
    ENV workDir=/usr/local
    WORKDIR $workDir
    CMD ["/bin/bash"]
    

ARG指令:

  • 与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

  • 构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

  • 格式:

    ARG <参数名>[=<默认值>]
    

USER指令:

  • 用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)

  • 格式:

    USER <用户名>[:<用户组>]
    

ONBUILD指令:

  • 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的ONBUILD 指定的命令。

  • 格式:

    ONBUILD <其它指令>
    

LABEL指令:

  • LABEL指令用来给镜像添加一些元数据以键值对的形式。

  • 格式

    LABEL <key>=<value> <key>=<value> <key>=<value> ...
    
  • 列如执行一下作者信息

    LABEL org.opencontainers.image.authors="qinzt"
    

    在我们使用 docker run运行容器后 使用 inspect 命令查看是可以查看到LABEL信息如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Noc1op9H-1681981251614)(D:\MD归档文档\IMG\image-20230415191303650.png)]

HEALTHCHECK 指令:

  • 用于指定某个程序或者指令来监控 docker 容器服务的运行状态

  • 格式:

    HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
    HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
    HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
    

三、Dockerfile案例

1、Dockerfile部署Nginx案例

FROM centos:7
RUN yum install wget proc-devel  net-tools gcc  zlib  zlib-devel  make openssl-devel  -y 
RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz 
RUN tar zxf nginx-1.14.2.tar.gz -C /usr/local/src/ 
RUN cd /usr/local/src/nginx-1.14.2/ && ./configure  --prefix=/usr/local/nginx && make && make install
WORKDIR  /usr/local/nginx/
ADD dockerInstall.tar.gz /usr/local/src

EXPOSE 80 443
RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;","-c"]
CMD ["/usr/local/nginx/conf/nginx.conf"]

2、Dockerfile部署Tomcat案例

FROM qinziteng/jdk:8

WORKDIR /opt
ADD apache-tomcat-9.0.58.tar.gz /opt
EXPOSE 8080
CMD /opt/apache-tomcat-9.0.58/bin/catalina.sh run

到了这里,关于Dockerfile使用及案例详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker容器化技术(使用Dockerfile制作镜像)

    Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在

    2024年03月19日
    浏览(146)
  • docker使用Dockerfile制做容器(以hyperf为列,开机启动)

    1、Dockerfile文件 1-1、执行命令生成hyperf:latest容器(文件名是Dockerfile可以省略,如果是其它文件名需要写上docker build –f dockerfile文件路径 –t 镜像名称:版本) 2、start.sh脚本 3、启动,重新启动也会执行脚本,后面加上/data/start.sh(启动执行脚本,重新启动也会执行脚本)

    2024年01月21日
    浏览(46)
  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(64)
  • 根据Dockerfile创建容器案例讲解

    -f为dokerfile的路径, -t为新镜像的名称及版本。 后面这个点是寻址路径。

    2024年02月11日
    浏览(46)
  • 案例:Docker 镜像的创建及使用(commit与dockerfile方式)

    我要将一个包含nginx的容器做成一个镜像,供其他人使用,这样其他人就不必再执行nginx安装等操作。 首先,还是启动一个容器: 命名为n1。 然后在容器内部安装nginx: 这里yum源出现问题: 解决看这里 安装成功并启动运行: 在另一个终端,查看nginx情况: 然后看到 ip是 17

    2024年02月14日
    浏览(35)
  • Docker在windows下使用教程,通过Dockerfile创建镜像/容器,以YOLO系列为例

     通过可视化界面将极大的降低学习难度。  1.1、Docker Desktop下载  下载地址:Docker Desktop: The #1 Containerization Tool for Developers | Docker 应当是这个界面,选择下载即可 1.2、下载完成后需打开window自带的虚拟机       将Hyper-V勾选即打开,勾选后需重启。  1.3、下载WSL,由于是在

    2024年02月05日
    浏览(66)
  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(59)
  • Docker容器---dockerfile简介

    1、dockerfile介绍 dockerfile是自定义镜像的一套规则,dockerfie由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(

    2023年04月23日
    浏览(53)
  • 【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

    Docker 是一种轻量级的容器化技术,使得应用程序和它们的依赖可以被打包到一个容器中,方便在不同环境中运行。Dockerfile 是用于定义 Docker 镜像的文本文件,其中包含了一系列的指令,这些指令描述了镜像中应该包含哪些内容和如何配置。 在开始编写 Dockerfile 之前,确保你

    2024年01月24日
    浏览(54)
  • Docker容器:docker镜像的创建及dockerfile

    创建镜像有三种方法:基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.1 启动镜像 1.2 生成新镜像 2.1 OPENVZ 下载模板 2.2 导入容器生成镜像 3.1 dockerfile结构及分层 (1)dockerfile结构大致分为4个部分 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 Dockerfil

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包