Docker 自定义Ubuntu-Java基础镜像
一 概述
正常情况下,我们使用Docker打包Java服务,可以直接在Dockerfile中选择"Java:8"基础镜像,其Linux发行版本采用的是CentOS系统。
构建此自定义镜像的目的:
- Java服务使用Docker部署;
- Java程序后台调用一个后台程序执行一些数据处理操作;
- 该后台程序需要在Linux-Ubuntu20.04上运行;
- 该后台程序同时依赖了一些第三方库。
因此我需要一个满足上述条件的基础镜像,我的服务在打包部署时,Dockerfile直接FROM这个基础镜像即可。
二 具体操作
在本机或者服务器上创建一个基础镜像的文件夹“ubuntu-java-baseimage”,存放我们要用到的jdk包、Dockerfile。
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
...
再执行对项目模块的打包即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下