idea中打包docker image,并推到docker hub中

本文介绍了如何在Windows环境下,使用IDEA、Maven打包Java项目为jar,然后创建Dockerfile,构建Docker镜像,并在容器中运行验证。最后,将镜像推送到Dockerhub的过程,包括解决在打包和Docker配置中遇到的问题。

前言

刚接触docker,之前学了怎么pull别人的镜像,今天写了个demo想学习一下自己的项目怎么打包成镜像,再发布到docker hub上,记录一下。
总结一下大概流程就是在idea上配置docker, 然后把自己的项目打包成jar包,再打包成镜像在容器里运行一下,确定运行没有问题之后再登录自己的docker hub,把镜像传上去。

环境

windows10, idea 2022, jdk 8,maven

具体步骤

1.使用maven给项目打成jar包

点package

在这里插入图片描述

注意:这里记录几个问题
(1)我一开始就是直接打包的,然后terminal运行jar包报错,如下
在这里插入图片描述
查了一下问题是打包的时候要制定main class,解决方案是在pom.xml里添加:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.fisco.Application</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

红线的地方写自己主类的位置
在这里插入图片描述
我的main class 位置
在这里插入图片描述
(2)修改上面的问题之后,再运行又报错:
在这里插入图片描述
查了一番资料,感觉是maven打包出的问题,目前没解决这个问题,我在主函数里没有使用这个包

2.idea连接docker

(1)在 File-> Settings 里安装docker插件

在这里插入图片描述

(2)连接docker

在 File-> Settings->build,execution,deployment->Docker,点上面那个+,填写右边的配置信息。
注意connect to docker daemon with:的选项,我看了很多文章,发现大家都没有docker for windows的选项,不知道为啥,可能idea版本问题??很多人都用的TCP socket连接,感觉很麻烦,暂时留个坑,下次弄了来填。
选了docker for windows之后他就自动连上了,下面会显示连接成功。
在这里插入图片描述

(3)编写docker file

我新建了一个file,取名Dockerfile 放在target目录下面,HelloWorld-1.0-SNAPSHOT.jar是我打包的jar包

我的docker file内容,docker file语法参照这篇文章Docker 基础之Dockerfile命令详解,根据自己需求进行修改

##使用 JDK 8 环境为基础镜像,如果镜像不是本地的将会从 DockerHub 进行下载
FROM java:8
#作者
MAINTAINER cnzhangxy

#复制上下文目录下的target/demo-0.0.1-SNAPSHOT.jar 到容器里
COPY HelloWorld-1.0-SNAPSHOT.jar HelloWorld-1.0-SNAPSHOT.jar

#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8081

#指定容器启动程序及参数   <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-jar","HelloWorld-1.0-SNAPSHOT.jar"]

(4)添加项目Docker运行配置

点Edit configurations
在这里插入图片描述

点“+”
在这里插入图片描述

点 Docker-> dockerfile
在这里插入图片描述
在这里插入图片描述

3.在容器内运行

把configuration换成docker,再点击运行
在这里插入图片描述

会发现下面弹出docker的窗口,就可以看到自己的docker的信息啦,可以在images和containers可以看见刚刚新建的镜像和容器。
在这里插入图片描述

4.上传docker hub

确定在容器内的运行是正确的之后就可以发布在docker hub上了

(1)登录:docker login -u 你的用户名

(2)输入密码,登陆成功后,在推送前,必须将你的镜像命名规范格式,否则会失败。输入如下命令:

docker tag 镜像id 你的docker账户名/新的镜像名:版本号

例:docker tag c3e2d1273618 cnzhangxy/demo:1.0

(3)规范格式后可以推送镜像

docker push 用户名/镜像名:标签(版本号)

例:docker push cnzhangxy/demo:1.0

5.结束

打开docker hub,登陆之后就能看见自己的镜像啦
在这里插入图片描述

### 开发前准备 - **安装Docker**:Docker的安装可以参考https://docs.docker.com/install/ [^3]。 - **配置docker远程连接端口**:通过`vi /usr/lib/systemd/system/docker.service`进行配置 [^3]。 - **镜像加速**:可选择阿里镜像加速,执行以下命令: ```bash mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://l90lo6hm.mirror.aliyuncs.com"] } EOF # 或者使用其他镜像源 tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.ccs.tencentyun.com", "https://registry.docker-cn.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ``` [^4] ### 使用IntelliJ IDEA将项目打包成JAR文件 1. **配置项目的打包插件**:在项目的`pom.xml`文件中添加`maven-shade-plugin`或者`maven-assembly-plugin`等打包插件。以`maven-shade-plugin`为例: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.MainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 其中`com.example.MainClass`是项目的主类。 2. **执行打包命令**:在IntelliJ IDEA的`Maven`工具窗口中,找到`Lifecycle`下的`package`,双击执行,即可在`target`目录下生成JAR文件。 ### 构建Docker镜像 1. **创建Dockerfile**:在项目根目录下创建一个名为“Dockerfile”的文本文件,不包含任何文件扩展名。对于Java应用,可使用多阶段构建优化镜像大小,示例如下: ```Dockerfile # 第一阶段:使用Maven镜像编译和打包项目 FROM maven:3.8.4-openjdk-17 AS build COPY src /app/src COPY pom.xml /app RUN mvn -f /app/pom.xml clean package # 第二阶段:从更小的JRE基础镜像开始,仅复制构建好的JAR包 FROM openjdk:17-jre-slim COPY --from=build /app/target/your-application.jar /app/your-application.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/app/your-application.jar"] ``` 其中`your-application.jar`需替换为实际生成的JAR文件名,`8080`为应用暴露的端口,可根据实际情况修改 [^1]。 2. **构建Docker镜像**:在IntelliJ IDEA的终端中,进入项目根目录,执行以下命令构建Docker镜像: ```bash docker build -t your-image-name:your-tag . ``` 其中`your-image-name`是镜像名称,`your-tag`是镜像标签,`.`表示使用当前目录下的Dockerfile进行构建。 ### 运行容器实例 构建好镜像后,可使用以下命令运行容器实例: ```bash docker run -p 8080:8080 your-image-name:your-tag ``` 其中`-p 8080:8080`表示将容器的8080端口映射到宿主机的8080端口。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值