展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 怎么使用dockerfile部署springboot项目

怎么使用dockerfile部署springboot项目

一、dockerfile概述Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。1、dockerfile基础1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数2:指令按照从上到下,顺序执行3:#表示注释4:每条指令都会创建一个新的镜像层并对镜像进行提交2、Docker执行Dockerfile的大致流程(1)docker从基础镜像运行一个容器(2)执行一条指令并对容器作出修改(3)执行类似dockercommit的操作提交一个新的镜像层(4)doc

本文目录

    一、dockerfile概述

    Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

    1、dockerfile基础

    1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
    2:指令按照从上到下,顺序执行
    3:#表示注释
    4:每条指令都会创建一个新的镜像层并对镜像进行提交

    2、Docker执行Dockerfile的大致流程

    (1)docker从基础镜像运行一个容器
    (2)执行一条指令并对容器作出修改
    (3)执行类似docker commit的操作提交一个新的镜像层
    (4)docker再基于刚提交的镜像运行一个新容器
    (5)执行dockerfile中的下一条指令直到所有指令都执行完成

    怎么使用dockerfile部署springboot项目

    3、镜像、容器、dockerfile的关系

    从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

    • Dockerfile是软件的原材料

    • Docker镜像是软件的交付品

    • Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例
      Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

    1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
    2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;
    3 Docker容器,容器是直接提供服务的。

    基本构建步骤:(1)编写Dockerfile文件(2)docker build命令构建镜像(3)docker run依镜像运行容器实例

    二、dockerfile常用保留字

    1、FROM

    基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条命令必须是FROM

    # 命令格式
    FROM [--platform=]  [AS ]
    FROM [--platform=] [:] [AS ]
    FROM [--platform=] [@] [AS ]
    # 实例:
    FROM centos:7.0

    2、MAINTAINER与LABEL

    镜像维护者的姓名和邮箱地址

    # 命令格式
    MAINTAINER 

    该命令已经废弃了。推荐使用LABEL,它可以设置您需要的任何元数据。

    # 命令格式
    LABEL = = = ...
    
    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates \
    that label-values can span multiple lines."

    3、RUN

    容器构建时需要运行的命令,RUN是在 docker build时运行

    (1)shell格式(常用)

    # <命令行命令> 等同于,在终端操作的shell命令
    RUN <命令行命令>

    (2)exec格式

    # 录入:RUN ["./test.php", "dev", "offline"] 等价于RUN ./test.php dev offline
    RUN ["可执行文件", "param1", "param2"]

    4、EXPOSE

    当前容器对外暴露出的端口

    EXPOSE 80
    EXPOSE 80/tcp
    EXPOSE 80/udp

    5、WORKDIR

    指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

    WORKDIR /path/to/workdir

    6、USER

    指定该镜像以什么样的用户去执行,如果都不指定,默认是root

    # 命令格式
    USER [:]
    USER [:]
    
    # 实例
    USER cxf

    7、ENV

    用来在构建镜像过程中设置环境变量

    # 命令格式
    ENV = ...
    
    # 实例
    ENV MY_PATH /usr/mytest
    #这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量,
    #比如:WORKDIR $MY_PATH

    8、ADD

    将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

    ADD a.tar.gz /mydir/

    9、COPY

    类似ADD,拷贝文件和目录到镜像中。
    将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

    COPY src dest
    COPY ["src", "dest"]
    :源文件或者源目录
    :容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

    10、VOLUME

    容器数据卷,用于数据保存和持久化工作

    11、CMD

    指定容器启动后的要干的事情

    注意!Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

    CMD ["executable","param1","param2"]
    CMD ["param1","param2"]
    CMD command param1 param2
    
    # 覆盖默认的CMD,不会启动tomcat
    docker exec -it comcat /bin/bash

    CMD是在docker run 时运行。RUN是在 docker build时运行。

    12、ENTRYPOINT

    也是用来指定一个容器启动时要运行的命令。

    类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序

    # 命令格式
    ENTRYPOINT ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2

    ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。
    当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成: “”

    FROM ubuntu
    ENTRYPOINT ["top", "-b"] # 定参
    CMD ["-c"] # 变参
    # 最终执行top -c,而如果使用命令行指定 -H,会替换CMD的-c

    在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数。如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

    三、使用dockerfile构建一个自带jdk的centos

    1、下载jdk并上传至linux

    2、编写Dockerfile

    # 注意大写字母D
    vi Dockerfile
    # 指定基础镜像,需要保证本地有这个镜像
    FROM centos
    # 指定作者邮箱
    MAINTAINER cxf
    # 工作目录
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    # 准备工作
    RUN cd /etc/yum.repos.d/
    RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
    RUN yum makecache
    RUN cd /usr/local
    #安装vim编辑器
    RUN yum -y install vim
    #安装ifconfig命令查看网络IP
    RUN yum -y install net-tools
    #安装java8及lib库
    RUN yum -y install glibc.i686
    RUN mkdir /usr/local/java
    #ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
    ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
    #配置java环境变量
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    ENV PATH $JAVA_HOME/bin:$PATH
    EXPOSE 80
    CMD echo $MYPATH
    CMD echo "success--------------ok"
    CMD /bin/bash

    3、构建Dockerfile

    注意!本目录下只有一个Dockerfile并且包含jdk安装包

    怎么使用dockerfile部署springboot项目

    # 构建新镜像命令格式 。注意,上面TAG后面有个空格,有个点
    docker build -t 新镜像名字:TAG .
    # 构建我们的镜像,等一会就会构建成功
    docker build -t centosjava8:1.0 .
    
    [root@localhost myfile]# docker images
    REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
    centosjava8                   1.0       4dbff0755585   34 seconds ago   747MB
    centos                        latest    5d0da3dc9764   19 months ago    231MB

    4、运行一下试试

    docker run -it 4dbff0755585 /bin/bash
    
    #我们发现,新的镜像携带着vim、ifconfig和java环境了!

    四、虚悬镜像

    仓库名、标签都是的镜像,俗称dangling image

    1、制造一个虚悬镜像

    (1)创建Dockerfile

    FROM centos
    CMD echo 'action is success'

    (2)构建

    docker build .

    (3)查看

    [root@localhost xu]# docker images
    REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
    centosjava8                   1.0       4dbff0755585   31 minutes ago   747MB
                                9818ccf3738e   19 months ago    231MB
    centos                        latest    5d0da3dc9764   19 months ago    231MB
    
    # 查看所有虚悬镜像
    [root@localhost xu]# docker image ls -f dangling=true
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
               9818ccf3738e   19 months ago   231MB

    (4)删除

    # 删除虚悬镜像
    docker image prune

    虚悬镜像已经失去存在价值,可以删除

    五、docker运行springboot项目

    1、准备一个springboot项目

    编写一个测试Controller,以供测试。

    @RestController
    @RequestMapping
    public class TestController {
    
        @GetMapping("/test")
        public String test(){
            return "启动成功 ===================test";
        }
    }

    2、手动构建jar包

    我们使用maven package命令手动打包并上传到服务器上。

    [root@localhost ~]# cd mydocker/
    [root@localhost mydocker]# ll
    total 17084
    -rw-r--r--. 1 root root 17491177 Apr  9 14:18 demo-0.0.1-SNAPSHOT.jar

    注!通常来说这一步可以使用jenkins自动构建。

    3、编写Dockerfile

    # 基础镜像使用java
    FROM centosjava8:1.0
    # 作者
    MAINTAINER cxf
    # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
    VOLUME /tmp
    # 将jar包添加到容器中并更名为cxf_docker.jar
    ADD demo-0.0.1-SNAPSHOT.jar /cxf_docker.jar
    # 运行jar包
    RUN bash -c 'touch /cxf_docker.jar'
    ENTRYPOINT ["java","-jar","/cxf_docker.jar"]
    #暴露6001端口作为微服务
    EXPOSE 8088

    4、构建镜像

    docker build -t mydemo:1.0 .
    
    [root@localhost mydocker]# docker images
    REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
    mydemo                        1.0       7124eca083ad   26 seconds ago   764MB
    centosjava8                   1.0       4dbff0755585   7 hours ago      747MB

    5、运行容器

    docker run -d -p 8088:8088 7124eca083ad

    6、访问测试

    访问服务器我们的接口,发现测试成功!

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。