dockerfile组合自定义镜像 - java jdk python

背景

需求是需要在docker里运行java程序,java程序会去调用python文件处理数据。那么就需要我们的镜像里不仅有java运行环境,还需要有python的运行环境。

思路

通过查看dockerhub官网上pythonjava的构建命令,发现第一行命令都基于同一个根镜像,所以思考是否可以将2者的构建命令合并到一起。通过不断的测试调整之后成功了,所以确实是可以这样做的。

实现

编写Dockerfile文件

FROM python:3.9.2
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN set -eux; apt-get update; apt-get install -y --no-install-recommends bzip2 unzip xz-utils fontconfig libfreetype6 ca-certificates p11-kit ; rm -rf /var/lib/apt/lists/*
ENV JAVA_HOME=/usr/local/openjdk-8
RUN { echo '#/bin/sh'; echo 'echo "$JAVA_HOME"'; } > /usr/local/bin/docker-java-home && chmod +x /usr/local/bin/docker-java-home && [ "$JAVA_HOME" = "$(docker-java-home)" ] # backwards compatibility
ENV PATH=/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV JAVA_VERSION=8u282
RUN set -eux; arch="$(dpkg --print-architecture)"; case "$arch" in 'amd64') downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u282-b08/OpenJDK8U-jdk_x64_linux_8u282b08.tar.gz'; ;; *) echo >&2 "error: unsupported architecture: '$arch'"; exit 1 ;; esac; wget --progress=dot:giga -O openjdk.tgz "$downloadUrl"; wget --progress=dot:giga -O openjdk.tgz.asc "$downloadUrl.sign"; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys EAC843EBD3EFDB98CC772FADA5CD6035332FA671; gpg --batch --keyserver ha.pool.sks-keyservers.net --keyserver-options no-self-sigs-only --recv-keys CA5F11C6CE22644D42C6AC4492EF8D39DC13168F; gpg --batch --list-sigs --keyid-format 0xLONG CA5F11C6CE22644D42C6AC4492EF8D39DC13168F | tee /dev/stderr | grep '0xA5CD6035332FA671' | grep 'Andrew Haley'; gpg --batch --verify openjdk.tgz.asc openjdk.tgz; gpgconf --kill all; rm -rf "$GNUPGHOME"; mkdir -p "$JAVA_HOME"; tar --extract --file openjdk.tgz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner ; rm openjdk.tgz*; { echo '#!/usr/bin/env bash'; echo 'set -Eeuo pipefail'; echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$JAVA_HOME/jre/lib/security/cacerts"'; } > /etc/ca-certificates/update.d/docker-openjdk; chmod +x /etc/ca-certificates/update.d/docker-openjdk; /etc/ca-certificates/update.d/docker-openjdk; find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; ldconfig; javac -version; java -version

其中RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list这里是将deb.debian.org镜像源替换为中科大的镜像源,避免国内网络问题导致apt-get update执行很久报错。

生成镜像

docker build --rm -t jdk-python:base .

镜像构建成功日志
当看到Successfully tagged jdk-python:base的时候表示镜像构建成功。后续就可以拿着镜像使去用啦。

总结

利用dockerfile的分层构建的功能可以做到一些自定义镜像的功能,比如结合java和python,本文也算是抛砖引玉,可以利用这个原理去结合其他的镜像。


参考

https://mirrors.ustc.edu.cn/help/debian.html

https://hub.docker.com

https://www.jianshu.com/p/93a678d1bde6

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
要配置 Java JDK 的开发环境,你需要按照以下步骤进行操作: 1. 下载 Java JDK 访问 Oracle 官方网站(https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)或 OpenJDK 网站(https://openjdk.java.net/install/)下载适用于你的操作系统的最新版本的 Java JDK。 2. 安装 Java JDK 执行下载的安装程序并按照指示进行安装。选择默认安装路径或自定义路径。 3. 配置环境变量 在 Windows 上: - 打开“控制面板” -> “系统与安全” -> “系统” -> “高级系统设置” -> “环境变量”。 - 在“系统变量”下,点击“新建”。 - 输入变量名为:JAVA_HOME。 - 输入变量值为 JDK 的安装路径(例如:C:\Program Files\Java\jdk-11.0.10)。 - 在“系统变量”下,找到“Path”变量,点击“编辑”。 - 在变量值的末尾添加“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”。 在 macOS 上: - 打开终端。 - 使用文本编辑器(如 nano 或 vim)打开 `~/.bash_profile` 或 `~/.zshrc` 文件。 - 在文件的末尾添加以下行: ``` export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home export PATH=$PATH:$JAVA_HOME/bin ``` 在 Linux 上: - 打开终端。 - 使用文本编辑器(如 nano 或 vim)打开 `~/.bashrc` 或 `~/.bash_profile` 文件。 - 在文件的末尾添加以下行: ``` export JAVA_HOME=/usr/lib/jvm/jdk-11.0.10 export PATH=$PATH:$JAVA_HOME/bin ``` 4. 验证安装 打开命令行终端,并运行以下命令来验证 Java JDK 是否已正确配置: ``` java -version ``` 如果显示了安装的 JDK 版本信息,则说明配置成功。 现在,你已成功配置了 Java JDK 的开发环境。你可以开始使用 Java 进行开发了!
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值