本地JAR打镜像,并启动

本文介绍了使用Docker的相关操作,包括准备jar和Dockerfile文件、打镜像、查看镜像,针对双端口服务给出启动命令,还说明了如何优化服务随Docker开启而启动。此外,详细阐述了启动Redis容器的高级应用,最后提及删除未启动容器的多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.准备好jar,和Dockerfile文件。

2.使用命令打镜像

docker build -t wstest .

 3. 查看镜像

4. 由于服务是两个端口。使用以下命令

 

 5.优化怎么随着docker的开启而启动

docker run --restart=always -d -p 8089:8089 -p 8069:8069 wsserver

docker run --restart=always -d -p 8089:8089 -p 8069:8069 --name wstest wsserver

docker run --restart=always -d -p 8089:8089 -p 8069:8069 -v /home/springboot/application.yaml:/etc/conf/application.yaml --name wstest wsserver

docker run --restart=always -d -p 8089:8089 -p 8069:8069 wsserver

docker run --restart=always -d -p 8089:8089 -p 8069:8069 --name wstest wsserver

docker run --restart=always -d -p 8089:8089 -p 8069:8069 -v /home/springboot/application.yaml:/etc/conf/application.yaml --name wstest wsserver

-- 设置挂载,日志,配置文件

docker run --restart=always -d -p 8089:8089 -p 8069:8069 -v /home/springboot/wstest/conf:/etc/conf/ -v /home/springboot/wstest/logs:/build/logs/ --name ws wstest 

执行后,可以看到,

6. 高级应用 启动redis 容器

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass 000415

--restart=always 总是开机启动
--log是日志方面的
-p 6379:6379 将6379端口挂载出去
--name 给这个容器取一个名字
-v 数据卷挂载
- /home/redis/myredis/myredis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。
- /home/redis/myredis/data:/data 这个同上
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf
–appendonly yes 开启redis 持久化
–requirepass 000415 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置,我被搞过,可以看这篇文章“阿里云服务器中毒‘Kirito666’经历”)
成功界面

成功界面

7.删除未启动的容器

方法一:

1

2

3

4

5

6

7

#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,

sudo docker ps -a|grep Exited|awk '{print $1}'

#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器

sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`

方法二: 

1

2

#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)

sudo docker rm $(sudo docker ps -a -q)

方法三:

1

2

3

#根据容器的状态,删除Exited状态的容器

sudo docker rm $(sudo docker ps -qf status=exited)

方法四:

1

2

3

4

#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。

sudo docker container prune

#删除所有镜像

sudo docker rmi $(docker images -q)

<think>好的,我现在要解决用户的问题:如何将Java JAR文件打包创建为Docker容器镜像。根据用户提供的引用内容,我需要综合这些信息来给出步骤清晰的指导。 首先,用户已经提供了三个引用,其中引用[1]和引用[2]是关于Dockerfile的示例,引用[3]提到了运行JAR包的命令。我需要结合这些内容,整理出一个标准的流程。 第一步应该是准备Dockerfile。根据引用[1]和引用[2],Dockerfile的基础镜像可以是java:8或者openjdk:8-jdk-alpine。注意到这两个镜像的区别,后者是更轻量级的Alpine Linux版本,可能更适合生产环境。所以可能需要建议用户根据需求选择合适的基础镜像。 接下来是设置工作目录,引用[2]中使用了WORKDIR /app,而引用[1]直接复制到根目录。一般来说,设置工作目录可以更好地组织文件,避免根目录混乱,所以应该推荐使用WORKDIR。 然后是复制JAR包的步骤。引用[1]中直接复制到根目录下的docker-app.jar,而引用[2]复制到/app/app.jar。需要指出用户需要将实际的JAR包名称替换为自己的,比如your-application-1.0-SNAPSHOT.jar,或者像引用[3]中的HelloTest-0.0.1-SNAPSHOT.jar。此外,用户需要确保构建上下文正确,即COPY指令的源路径是否正确,比如在引用[2]中是COPY target/...,这可能意味着项目构建后的JAR位于target目录下。 暴露端口的部分,引用[1]使用EXPOSE 8088,引用[2]是EXPOSE 8080,用户需要根据自己应用的实际情况修改端口号。这点需要强调,避免用户直接复制端口导致应用无法访问。 最后是启动命令,引用[1]和引用[2]都使用了ENTRYPOINT或CMD来执行java -jar命令。需要注意的是ENTRYPOINT和CMD的区别,ENTRYPOINT更适合用于固定命令,而CMD可以作为参数默认值。不过在这个场景下,两者都可以使用,但可能需要说明推荐的方式。 用户可能还需要知道如何构建镜像的命令,比如docker build -t image-name .,以及运行容器的命令,比如docker run -p 主机端口:容器端口 image-name。这些步骤在引用中没有详细说明,但用户的问题是关于创建镜像,所以构建命令是必须的,运行命令可以作为后续步骤补充。 另外,用户提供的引用中存在不同的基础镜像和路径,可能会让新手混淆。需要指出这些差异,解释如何根据具体情况调整Dockerfile的内容。 总结步骤应该是: 1. 准备Dockerfile,选择基础镜像。 2. 复制JAR文件到镜像中。 3. 暴露端口。 4. 定义启动命令。 5. 构建镜像。 6. 运行容器测试。 此外,还需要提醒用户确保JAR文件在正确的位置,例如在构建Docker镜像前使用Maven或Gradle打包生成JAR确认Dockerfile中的路径正确。例如,如果使用Maven,JAR通常位于target目录下,所以COPY指令应该是target/*.jar。 可能还需要提到多阶段构建来减小镜像大小,但根据引用内容,用户可能只需要基础步骤,所以暂时可以不深入,但作为优化点可以提及。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何优化镜像大小、如何处理依赖项、如何配置环境变量等。</think>要将Java JAR文件打包为Docker镜像,需通过Dockerfile定义构建流程。以下是分步说明: --- ### **步骤1: 准备Dockerfile** 创建一个名为`Dockerfile`的文本文件(无后缀),内容如下: ```dockerfile # 使用Java 8官方镜像作为基础 FROM openjdk:8-jdk-alpine # 轻量级镜像[^2] # 设置工作目录(容器内部路径) WORKDIR /app # 将本地JAR文件复制到容器中(需替换为实际JAR文件名) COPY target/your-application-1.0-SNAPSHOT.jar app.jar # 注意路径匹配[^2] # 声明应用端口(与实际应用端口一致) EXPOSE 8080 # 启动JAR包 CMD ["java", "-jar", "app.jar"] ``` --- ### **步骤2: 构建Docker镜像** 在Dockerfile所在目录执行命令: ```bash docker build -t my-java-app:1.0 . ``` - `-t`指定镜像名称和标签 - `.`表示使用当前目录作为构建上下文 --- ### **步骤3: 运行容器** ```bash docker run -p 8080:8080 my-java-app:1.0 ``` - `-p`将主机端口映射到容器端口(格式:`主机端口:容器端口`) --- ### **关键配置说明** 1. **基础镜像选择** - 轻量级推荐:`openjdk:8-jre-alpine`(仅运行时环境,体积更小) - 开发环境推荐:`openjdk:11`(完整JDK,支持调试) 2. **JAR文件路径** 确保`COPY`指令中的路径与实际构建生成的JAR文件路径一致。例如Maven项目默认输出到`target/`目录[^3]。 3. **多阶段构建优化** 若需进一步减小镜像体积,可使用多阶段构建: ```dockerfile # 第一阶段:使用Maven构建 FROM maven:3.8.6 AS build COPY src /app/src COPY pom.xml /app RUN mvn -f /app/pom.xml clean package # 第二阶段:仅保留运行时环境 FROM openjdk:8-jre-alpine COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值