使用Dockerfile来构建服务的镜像,并部署在容器中

这篇具有很好参考价值的文章主要介绍了使用Dockerfile来构建服务的镜像,并部署在容器中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、构建服务镜像

1、编写Dockerfile

  • 在项目的根目录下,创建Dockerfile
    使用Dockerfile来构建服务的镜像,并部署在容器中,java后端技术栈,docker
  • 基础写法:
FROM openjdk:8-jre-slim
MAINTAINER Forrest
ENV PARAMS="" TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD target/chatgpt-api-1.0-SNAPSHOT.jar /chatgpt-api-1.0-SNAPSHOT.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /chatgpt-api-1.0-SNAPSHOT.jar $PARAMS"]
  • 对上面的每一行进行详细说明:

(1)FROM openjdk:8-jre-slim

基础镜像 【这个镜像包含了 OpenJDK 8 (Java 运行环境)和一个精简版的操作系统。】

(2)MAINTAINER Forrest

镜像的作者

(3)ENV PARAMS="" TZ=PRC

1)设置环境变量
2)PARAMS表示传给main方法的参数。这个PARAMS就相当于public static void main(String[] args) {...}的args。
3)当运行 Docker 容器时,可以通过 -e 参数来覆盖这个环境变量的值,例如:docker run -e PARAMS=“arg1 arg2 arg3” your-image-name。这样,你的 Java 应用启动时就会接收到 “arg1 arg2 arg3” 这些参数,作为 main 方法的参数(args)来使用。
4)TZ表示时区, 设置时区为中国(People’s Republic of China,RPC)

(4)RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

1)这行命令主要是用于设置 Docker 容器内的系统时区。
2)ln 是 Linux 系统中用于创建符号链接(symbolic link)的命令,-s 表示创建软链接,-n 表示如果目标文件已存在,直接覆盖,-f 表示强制执行。所以,ln -snf /usr/share/zoneinfo/$TZ /etc/localtime这条命令的意思是创建一个指向 /usr/share/zoneinfo/$TZ 的链接 /etc/localtime。

在macOS上,查看下/usr/share/zoneinfo/RPC/etc/localtime
使用Dockerfile来构建服务的镜像,并部署在容器中,java后端技术栈,docker
继续查看下/etc/timezone
使用Dockerfile来构建服务的镜像,并部署在容器中,java后端技术栈,docker

很显然,这不是中国时区,因此,为了保险起见,echo $TZ > /etc/timezone把/etc/timezone改为中国时区。

(5)ADD target/chatgpt-api-1.0-SNAPSHOT.jar /chatgpt-api-1.0-SNAPSHOT.jar
使用Dockerfile来构建服务的镜像,并部署在容器中,java后端技术栈,docker

  • 因此,这条命令是把上下文路径(一般是Dockerfile所在的根目录)的target目录下的chatgpt-api-1.0-SNAPSHOT.jar,添加到根目录下。

(6)ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /chatgpt-api-1.0-SNAPSHOT.jar $PARAMS"]

这个命令分解如下:
“sh”:表示使用 shell 环境。用于执行后面跟随的命令。
“-c”:这是传递给 sh 的一个选项,表示后面的字符串是一个需要被 sh 执行的命令。
相当于,在命令行,执行java -jar $JAVA_OPTS /chatgpt-api-1.0-SNAPSHOT.jar $PARAMS

2、构建脚本

IDEA支持通过可视化的方式构建镜像:
使用Dockerfile来构建服务的镜像,并部署在容器中,java后端技术栈,docker

  • 但用shell脚本的方式更灵活,在Dockerfile同一目录下,创建build.sh,代码为:
docker build -f ./Dockerfile -t forrest/chatgpt-api .

(1)docker build:docker构建镜像的命令
(2)-f ./Dockerfile:选择用于构建镜像的Dockerfile文件
(3)-t forrest/chatgpt-api:镜像的名字,开头必须是小写
(4).: 上下文路径(一般是Dockerfile所在的根目录)

3、启动脚本

  • 构建好了后,以本地容器的方式启动,启动脚本start.sh,代码为:
docker run -p 8080:8080 \
--name chatgpt-api \
-d forrest/chatgpt-api

二、问题及解决办法

1、no main manifest attribute, in /chatgpt-api-1.0-SNAPSHOT.jar

<build>
    <plugins>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <!-- 包含"public static void main(String[] args)"的类 -->
                        <mainClass>com.forrest.learnChatgpt.Application</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

解决办法文章来源地址https://www.toymoban.com/news/detail-815405.html

  • 局限性:如果是SpringBoot项目,上面这种做法会导致新问题,即java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

2、如果是SpringBoot项目,应该这么做:

<build>
   <plugins>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
   </plugins>
</build>

到了这里,关于使用Dockerfile来构建服务的镜像,并部署在容器中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用Dockerfile构建自定义jdk镜像,在使用jdk镜像创建一个容器来外部访问(一步一步来哦~好简单的呢)

    使用Dockerfile构建自定义jdk镜像,在使用jdk镜像创建一个容器来外部访问(一步一步来哦~好简单的呢)

    文章主人公:帅哥BUG😎  文章路人: 路人 🤨  路人 😛 🤨:什么是dockerfile? 😎:Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 😛:知道了知道了,

    2024年02月09日
    浏览(9)
  • Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

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

    【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

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

    2024年01月24日
    浏览(13)
  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月10日
    浏览(8)
  • Dockerfile自定义镜像 - 基于 java:8-alpine 镜像,将一个Java项目构建为镜像

    Dockerfile自定义镜像 - 基于 java:8-alpine 镜像,将一个Java项目构建为镜像

    目录   一、前置知识 1.镜像结构 2.Dockerfile是什么 二、自定义一个 java 项目镜像 1.创建一个空目录,在这个空目录中创建一个文件,命名为 DockerFile,最后将 java 项目打包成 jar 包,放到这个目录中 2.编写 Dockerfile 文件 3.使用 docker build 构建为一个镜像 4.使用 docker run 运行镜像

    2024年02月07日
    浏览(21)
  • 使用Dockerfile构建nginx镜像

     雨雀:使用Dockerfile构建nginx镜像 · 语雀 (yuque.com)  yaml文件用法:02 Docker三剑客之一-Dockerfile · 语雀 (yuque.com) 1.使用Dockerfile构建nginx镜像 2.编写Dockerfile yaml文件用法:02 Docker三剑客之一-Dockerfile · 语雀 (yuque.com) 3.构建镜像 4.运行镜像   

    2024年02月12日
    浏览(12)
  • Docker容器化技术(使用Dockerfile制作镜像)

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

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

    2024年03月19日
    浏览(349)
  • SpringBoot项目 使用Dockerfile创建镜像与容器

    SpringBoot项目 使用Dockerfile创建镜像与容器

    这里我使用的是云服务器,Centos7-Linux操作系统 需要以下环境支持 1、maven环境 2、java环境 3、springboot项目 maven环境 可以去我这个博客了解\\\'\\\'配置MAVEN环境-CSDN博客\\\'\\\' java环境 可以去\\\'\\\' java环境变量配置-CSDN博客\\\'\\\' springboot项目 先来简单创建一个springboot项目 一、进入IDEA的终端 使用

    2024年03月28日
    浏览(4)
  • Docker 解析:使用 Dockerfile 自动构建镜像

    简介 Docker 容器是使用 基础 镜像创建的。一个镜像可以是基本的,只包含操作系统的基本要素,也可以包含一个准备好启动的复杂的预构建应用程序堆栈。 在使用 Docker 构建镜像时,每个操作(例如执行的命令,比如 apt-get install)都会形成一个新的层叠在之前的层之上。然

    2024年03月26日
    浏览(10)
  • Docker 项目如何使用 Dockerfile 构建镜像?

    1.1、Docker 简介 :讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。 本文已收录于,我的技术网站 ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等

    2024年01月16日
    浏览(18)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包