dockerfile相关(4):docker常用基础镜像——java镜像

本文介绍了如何使用Java镜像构建应用镜像及在容器中直接运行Java代码的方法。提供了不同版本的Java镜像标签,并详细说明了如何利用这些镜像进行开发。

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

1. java镜像

使用Java镜像的最直接方法是把它作为基础镜像或运行时环境。

1.1 镜像tag

java:<version>

如果你不确定你需要什么,那么请用这个tag。它可以作为一个运行时环境,装载你的源代码,并启动你的应用程序容器;也可以作为基础镜像,用于构建应用镜像。

常用tag有:

  • 6b38-jdk, 6b38, 6-jdk, 6, openjdk-6b38-jdk, openjdk-6b38, openjdk-6-jdk, openjdk-6
  • 6b38-jre, 6-jre, openjdk-6b38-jre, openjdk-6-jre
  • 7u111-jdk, 7u111, 7-jdk, 7, openjdk-7u111-jdk, openjdk-7u111, openjdk-7-jdk, openjdk-7
  • 7u121-jdk-alpine, 7u121-alpine, 7-jdk-alpine, 7-alpine, openjdk-7u121-jdk-alpine, openjdk-7u121-alpine, openjdk-7-jdk-alpine, openjdk-7-alpine
  • 7u111-jre, 7-jre, openjdk-7u111-jre, openjdk-7-jre
  • 7u121-jre-alpine, 7-jre-alpine, openjdk-7u121-jre-alpine, openjdk-7-jre-alpine
  • 8u111-jdk, 8u111, 8-jdk, 8, jdk, latest, openjdk-8u111-jdk, openjdk-8u111, openjdk-8-jdk, openjdk-8
  • 8u111-jdk-alpine, 8u111-alpine, 8-jdk-alpine, 8-alpine, jdk-alpine, alpine, openjdk-8u111-jdk-alpine, openjdk-8u111-alpine, openjdk-8-jdk-alpine, openjdk-8-alpine
  • 8u111-jre, 8-jre, jre, openjdk-8u111-jre, openjdk-8-jre
  • 8u111-jre-alpine, 8-jre-alpine, jre-alpine, openjdk-8u111-jre-alpine, openjdk-8-jre-alpine
  • 9-b149-jdk, 9-b149, 9-jdk, 9, openjdk-9-b149-jdk, openjdk-9-b149, openjdk-9-jdk, openjdk-9
  • 9-b149-jre, 9-jre, openjdk-9-b149-jre, openjdk-9-jre

如果要求最终的应用镜像尽可能的小,你应该使用alpine。使用alpine作为基础镜像,然后你可以在Dockerfile中添加想要的东西,详见如何在alpine中安装软件包

java:alpine

1.2 java镜像作为基础镜像

如果你希望独立构建应用镜像,首先,编写dockerfile:

FROM java:7

COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]

然后,构建应用镜像

$ docker build -t my-java-app .

最后,运行应用容器

$ docker run -it --rm --name my-running-app my-java-app

1.3 java镜像作为运行时环境

如果你希望直接在容器中运行你的代码,在CMD运行以下命令:

$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp java:7 javac Main.java

上述操作会把当前目录作为卷添加到容器中,并把卷设置为工作目录,然后运行命令javac Main.java,这会告诉Java编译Main.java,并将Java类文件输出到Main.class。

### 使用 Docker 部署基于 Java 的 CRMDB 应用 #### 准备工作 为了成功部署基于 Java 的 CRMDB 应用程序,需先安装并配置好 DockerDocker Compose 工具。确保环境满足最低硬件需求以及网络连接正常。 #### 构建镜像 构建自定义的 Docker 镜像是第一步。假设已有一个 Maven 或 Gradle 项目结构的应用源码,可以编写 `Dockerfile` 来描述如何打包应用程序到容器中: ```dockerfile FROM openjdk:17-jdk-alpine WORKDIR /app COPY target/my-app.jar my-app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app/my-app.jar"] ``` 此脚本指定了基础镜像为 OpenJDK 版本 17,并将编译后的 JAR 文件复制进去作为入口点运行[^1]。 #### 编写 docker-compose.yml 文件 对于多服务架构下的应用(比如包含数据库),可以通过 `docker-compose.yml` 文件来简化管理多个关联的服务实例的过程。下面是一个简单的例子用于说明如何设置 Web 应用及其对应的 MySQL 数据库服务: ```yaml version: '3' services: crmdb-web: build: . ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:mysql://crmdb-db:3306/crm?useSSL=false&serverTimezone=UTC SPRING_JPA_HIBERNATE_DDL_AUTO: update depends_on: - crmdb-db crmdb-db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: crm volumes: - db-data:/var/lib/mysql volumes: db-data: ``` 这段 YAML 文档定义了一个名为 `crmd-web` 的前端服务和一个名为 `crmdb-db` 后端数据存储节点之间的关系。通过指定依赖项 (`depends_on`) 可以控制启动顺序;而持久化卷则用来保存重要的数据库状态信息防止丢失[^4]。 #### 运行与测试 完成上述准备工作之后,在终端执行如下指令即可一键拉起整个系统: ```bash $ docker-compose up --build ``` 这会自动下载所需的镜像资源、建立必要的网络链接并将所有组件按照设定的方式组合起来共同运作。访问 http://localhost:8080 即可查看正在工作的 CRMDB 应用了。 如果遇到任何问题,如“No DataSource set”,可能是因为 Spring Boot 应用未能正确初始化其数据源连接池。此时建议进入具体的服务容器内部进一步排查错误日志或调整参数配置[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值