本地打包springboot工程传到linux上docker封装成镜像过程

该博客详细介绍了如何在Linux环境下配置Docker,使用Idea打包SpringBoot应用,创建Docker镜像,并将其上传至私有镜像库。步骤包括安装Docker,配置阿里云镜像源,打包SpringBoot工程,编写Dockerfile,启动及检查Docker容器,最后在阿里云容器镜像服务中上传镜像。

一、首先准备好linux的docker环境

1.执行 yum install -y yum-utils 安装仓库管理工具
在这里插入图片描述
2.执行 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 执行阿里的镜像库
在这里插入图片描述
3.执行yum list docker-ce --showduplicates | sort -r 查看docker的版本有哪些
在这里插入图片描述
4.选择其中一个版本安装
yum install docker-ce-17.12.1.ce -y 这里我选择了相对老一点的版本17.12.1
5.docker的几个常用命令

#启动docker
systemctl start docker
#重启docker
systemctl restart docker
#停止docker
systemctl stop docker
#查看docker下的镜像
docker images
#查看docker正在运行的容器
docker ps
#查看docker所有容器
docker ps -a
#删除一个镜像的步骤 1.先查容器然后删除容器 2.再根据IMAGE ID删除镜像
#删除容器
docker rm 对应要删除的容器的CONTAINER ID
#删除镜像
docker rmi 对应要删除的镜像的IMAGE ID

二、idea打包springboot工程

1.对应工程的pom文件中加入如下配置

<build>
    <finalName>video-order-service</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.3.RELEASE</version>
            <configuration>
                <mainClass>cn.net.zyx.OrderApp</mainClass>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

其中goal标签repackage必要的,如果不加就会发现打好的jar包只有几K很不对劲,试着启动就会报如下错误

video-order-service.jar中没有主清单属性

还有 mainClass 这个标签,有些时候不加再启动jar包的时候会报

could not find mainclass

这种找不到入口类的错误。

三、制作docker镜像

1.将打好的jar包传至linux的一个新建空目录下,再编写一个Dockerfile

FROM adoptopenjdk/openjdk8:latest
VOLUME /tmp
COPY video-order-service.jar /order-service.jar
ENTRYPOINT ["java","-jar","/order-service.jar"]

网上很多教程会在copy那里像下面这样写,这种写法只适用于在本地安装好docker的情况,我因为要用虚拟机所以就放弃了再win中安装docker
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
2.执行 docker build -t cloud/orderservice:1.0 . 命令封装成docker镜像,注意后面有个点,然后执行docker images 查看镜像。
在这里插入图片描述
3.启动镜像 执行 docker run -d --name order -p 9003:9003 95154646c353
order是我设置的容器名称
内外对应端口映射为9003
后面那一串是对应的IMAGE ID

[root@centos1 appTest]#  docker run -d --name order -p 9003:9003 95154646c353
0aa5575058e30494fffb6b40bf19e331f25004646d338b245bb10f5643e37f27

会产生一串字符这个可以查对应日志 执行命令
docker logs 0aa5575058e30494fffb6b40bf19e331f25004646d338b245bb10f5643e37f27
查看对应的日志,如果日志只有一行说明这个镜像有问题
注意: 如果单独启动jar包没问题再做成镜像启动后就有问题,那说明Dockerfile写的有问题,仔细检查。

四、上传至私有镜像库

我是用阿里云的容器镜像服务创建了一个个人实例,再添加命名空间和库名称做的。这个服务好像是免费的,亦或是因为我买了阿里云的ECS服务器。
在这里插入图片描述

### 将Spring Boot项目Linux环境下打包Docker镜像 为了将Spring Boot应用程序容器化并创建Docker镜像,在Linux环境中操作涉及几个重要步骤。这不仅依赖于拥有一个功能完整的Spring Boot应用,还需要编写合适的`Dockerfile`来指导Docker如何构建该应用的镜像。 #### 准备工作环境 确保已经安装了最新版本的DockerDocker Compose[^2]。对于Spring Boot项目的开发人员来说,理解基础的Docker概念以及YAML配置语法也是必不可少的一部分[^1]。 #### 创建Dockerfile 在一个典型的Spring Boot项目根目录下创建名为`Dockerfile`的文件,其内容如下所示: ```dockerfile FROM openjdk:17-jdk-alpine VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 这段脚本指定了基于Alpine Linux发行版的OpenJDK 17作为基础映像,并复制编译后的`.jar`包到容器内的指定位置。最后定义启动命令用于运行Java程序。 #### 构建Docker镜像上述准备工作之后,可以通过执行下面这条命令来构建Docker镜像: ```bash docker build -t my-spring-boot-app . ``` 这里`my-spring-boot-app`代表自定义的目标镜像名称;`.`表示当前路径即为上下文(context),意味着Docker会在此处查找所需的资源(如之前提到过的`Dockerfile`)。 #### 测试新创建的镜像 一旦构建镜像,则可以尝试通过以下指令启动一个新的容器实例来进行测试: ```bash docker run --name some-springboot-container -p 8080:8080 -d my-spring-boot-app ``` 此命令将会以前台模式启动一个命名为`some-springboot-container`的新容器,并将其内部端口8080映射至主机上的相同端口号上,从而允许外部访问服务接口。 #### 使用Docker Compose简化部署流程 如果希望进一步优化多服务间的协作关系或者简化复杂场景下的部署过程,那么利用Docker Compose将是不错的选择之一。参照提供的样例`docker-compose.yml`文件结构,可以根据实际需求调整相应参数设置,实现更加灵活高效的自动化运维管理方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值