• Dockerfile中编译、打包、部署spring boot项目


    1、Dockerfile

    1.1、什么是Dockerfile

            Dockerfile是自动构建docker镜像的配置文件,将镜像构建过程通过指令的方式定义在Dockerfile中。配合docker build命令行可以实现自动化的Docker镜像的构建。

    1.2、Dockerfile语法解析

            我们在学习一门语言或文档语法的时候,最快的学习方式就是看别人是怎么写的。这里这个“「别人」”是谁就很重要,跟着臭棋篓子下棋越下越臭。

            所以学习Dockerfile语法,我们有必要找一个模范:大家可以去Dockerhub看一下那些开源软件官方提供的镜像,都可以找到对应的Dockerfile,看看别人是怎么写的。我们就以上文中的nginx:1.20.2版本docker镜像的Dockerfile( 官方提供的),我们来逐行解析它的语法及构建过程。本文中涉及的脚本都可以在github:docker-nginx官方渠道获取。

    1.3、Dockerfile命令

    FROM

            一般我们构建镜像的都需要一个基础的linux操作系统的发行版镜像,并且在此基础上我们构建自己的镜像。
            所以FROM指令的作用就是指定基础镜像,nginx这里使用的基础linux镜像是debian:bullseye-slim。其中debian:bullseye是debian的linux发行本操作系统的一个版本,版本名称叫做bullseye。slim通常是指这个镜像是该发行版本中的最小安装版本,因为我们构建完成的镜像是要在后续的持续集成过程中,以及仓库和docker服务器之间网络传播的,所以尽可能让镜像的构建结果size最小化。「基础镜像的选择要着重考虑size的大小,满足linux基本功能及你的程序运行的前提下越小越好」

    FROM debian:bullseye-slim

    LABEL

            LABEL用于给当前镜像添加一些描述、解释性信息,如:当前镜像的维护人及联系方式等信息。用键值对的方式自定义,一行可以定义多个。

    LABEL <key>=<value> <key>=<value> <key>=<value> ...

    maintainer、description

            也可以定义多行,如maintainer维护人信息,description镜像描述信息。如果描述信息一行写不下,可以用“\”换行。

    1. LABEL maintainer="NGINX Docker Maintainers "
    2. LABEL description="This is a Docker image \
    3. for nginx 1.20.2. "

            Dockerfile语法中有一个指令叫做MAINTAINER,用于描述该镜像的维护人信息,但是现在已经不建议使用了,统一使用LABEL。

    ENV

            ENV的作用是设置环境变量,该环境变量设置之后,可以在shell脚本中使用。

            使用方法如:${NGINX_VERSION}。学过JAVA的同学想想你的JAVA_HOME环境变量怎么设置的以及怎么使用的?ENV是同样的道理。只不过放到docker这里语法发生了变化而已,语法格式:ENV 环境变量KEY 环境变量Value。

    1. ENV NGINX_VERSION 1.20.2
    2. ENV NJS_VERSION 0.7.0
    3. ENV PKG_RELEASE 1~bullseye

    RUN

            RUN指令的作用就是执行linux的shell脚本,通过下图可以看到在shell脚本中可以使用通过ENV定义的环境变量。
            对于nginx镜像而言,RUN指令的作用就是执行一系列shell命令行来(脚本)完成nginx的安装。所以说要想掌握RUN指令的重点不在于RUN指令本身,关键在于:

    • 你会不会手动安装nginx?
    • 你会不会l
  • 相关阅读:
    WEB APIs (3)
    基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)
    开源模型应用落地-工具使用篇-Ollama(六)
    C语言第三章第5节数据的输出学习导案
    C认证笔记 - 计算机通识 - HTTPS
    VirtualBox解决VERR_SUPDRV_COMPONENT_NOT_FOUND错误
    Linux的一些知识(8)
    112. 使用自开发的代理服务器解决 SAP UI5 FileUploader 上传文件时遇到的跨域访问错误
    艾美捷彗星检测试剂盒(单细胞凝胶电泳)化验原理及研究
    什么是自动化测试?如何开展自动化测试你需要知道这些点
  • 原文地址:https://blog.csdn.net/yangyangye/article/details/132622061