Docker 自定义Ubuntu-Java基础镜像

一 概述

正常情况下,我们使用Docker打包Java服务,可以直接在Dockerfile中选择"Java:8"基础镜像,其Linux发行版本采用的是CentOS系统。

构建此自定义镜像的目的:

  • Java服务使用Docker部署;
  • Java程序后台调用一个后台程序执行一些数据处理操作;
  • 该后台程序需要在Linux-Ubuntu20.04上运行;
  • 该后台程序同时依赖了一些第三方库。

因此我需要一个满足上述条件的基础镜像,我的服务在打包部署时,Dockerfile直接FROM这个基础镜像即可。

二 具体操作

在本机或者服务器上创建一个基础镜像的文件夹“ubuntu-java-baseimage”,存放我们要用到的jdk包、Dockerfile。
image.png

1 创建Dockerfile

# 基本镜像,ubuntu:20.04
FROM ubuntu:20.04

# 跳过时区选择(必须执行,否则后续构建镜像时会卡死到时区选择)
ENV DEBIAN_FRONTEND=noninteractive

# 编码格式
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# 拷贝并解压jdk包
COPY jdk-8u291-linux-x64.tar.gz /opt/
RUN mkdir /usr/lib/jvm
RUN tar -xzvf /opt/jdk-8u291-linux-x64.tar.gz -C /usr/lib/jvm
RUN rm -rf /opt/jdk-8u291-linux-x64.tar.gz

# 配置Java环境
ENV JAVA_HOME /usr/lib/jvm/jdk1.8.0_291
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
RUN java -version

# 指定用户
USER root

# 切换时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 切换到国内镜像源(镜像、容器内部的)
RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN  apt-get clean

# 安装运行环境,比如一些第三方工具或者Java服务程序所依赖的包
RUN set -x; apt-get update \
   && apt-get install sudo \
   && sudo apt-get update \
   && sudo apt install -y libssl-dev \
   && sudo apt-get install -y libpq-dev \
   && sudo apt-get install libfontconfig1-dev -y \
   && sudo apt-get install libegl1-mesa-dev -y

2 build镜像

docker build -t docker build -t java-ubuntu-baseimage:1.0.0 .

3 项目中更换FROM镜像源

#FROM java:8
FROM java-ubuntu-baseimage:1.0.0
...

再执行对项目模块的打包即可。

posted @   billy_gisboy  阅读(461)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示