記錄docker第一次選jdk鏡像(1)

需求:編寫(xiě)一個(gè)基于alpine的jdk1.8環(huán)境

網(wǎng)上很多包括官方都是基于jre的,因?yàn)槲⒎?wù)其實(shí)只要服務(wù)跑起來(lái)即可虫啥。
但是由于我們公司新上微服務(wù),所以希望可以帶上jstat 等分析命令好后期幫助分析問(wèn)題,而jre里面是沒(méi)有這些命令的枢泰,所以需要jdk環(huán)境。

一铝噩、官方尋找

發(fā)現(xiàn)只有基于jdk14 alpine3.10的Dockerfile
https://github.com/docker-library/docs/blob/master/openjdk/README.md#supported-tags-and-respective-dockerfile-links
由于jdk版本太高了衡蚂,放棄,不過(guò)這個(gè)可以作為我自己編寫(xiě)jdk1.8的參考
其他都是基于Debian的

FROM alpine:3.10

ENV JAVA_HOME /opt/openjdk-14
ENV PATH $JAVA_HOME/bin:$PATH

# https://jdk.java.net/
ENV JAVA_VERSION 14-ea+15
ENV JAVA_URL https://download.java.net/java/early_access/alpine/15/binaries/openjdk-14-ea+15_linux-x64-musl_bin.tar.gz
ENV JAVA_SHA256 76091da1b6ed29788f0cf85454d23900a4134286e5feb571247e5861f618d3cd
# "For Alpine Linux, builds are produced on a reduced schedule and may not be in sync with the other platforms."

RUN set -eux; \
    \
    wget -O /openjdk.tgz "$JAVA_URL"; \
    echo "$JAVA_SHA256 */openjdk.tgz" | sha256sum -c -; \
    mkdir -p "$JAVA_HOME"; \
    tar --extract --file /openjdk.tgz --directory "$JAVA_HOME" --strip-components 1; \
    rm /openjdk.tgz; \
    \
# https://github.com/docker-library/openjdk/issues/212#issuecomment-420979840
# https://openjdk.java.net/jeps/341
    java -Xshare:dump; \
    \
# basic smoke test
    java --version; \
    javac --version

# https://docs.oracle.com/javase/10/tools/jshell.htm
# https://docs.oracle.com/javase/10/jshell/
# https://en.wikipedia.org/wiki/JShell
CMD ["jshell"]

這里讓我遇到了一個(gè)很大的坑骏庸,我看這個(gè)這么簡(jiǎn)單毛甲,那我改掉上面的jdk14換成我自己的jdk8不就行了嘛,結(jié)果試了很多次都是失敗告終具被。
查了很多資料:

  • Java是基于GUN Standard C library(glibc)
  • Alpine是基于MUSL libc(mini libc)
    也就是alpine不能很好的支持jdk環(huán)境玻募,支持jre可以。
    解決辦法:
  • 采用alpine-glbic鏡像 如frolvlad/alpine-glibc:alpine-3.9,不過(guò)好像不維護(hù)了一姿,當(dāng)然自己的jdk8需要好好的瘦身才行七咧。
  • 采用alpine,然后利用阿里的repo源安裝jdk環(huán)境叮叹,這個(gè)時(shí)候應(yīng)該是裝上相關(guān)環(huán)境才能讓jdk執(zhí)行艾栋。這樣安裝發(fā)現(xiàn)鏡像也比較小。

二蛉顽、網(wǎng)上查找1

https://blog.csdn.net/qq_37054881/article/details/84580812
這篇文章也還算新蝗砾,19年2月寫(xiě)的
不過(guò)這里找到了一個(gè)重點(diǎn)說(shuō)jdk需要依賴glibc,暫且放著這點(diǎn)。

\# using alpine-glibc instead of alpine  is mainly because JDK relies on glibc
FROM docker.io/jeanblanchard/alpine-glibc

他的方法是自己下載jre1.8然后刪掉不需要的文件
這個(gè)恰恰印證了上面的觀點(diǎn)悼粮,good闲勺!

三、網(wǎng)上查找2

https://qingmu.io/2018/08/07/How-to-run-springcloud-in-docker/
這篇文章雖然有點(diǎn)老扣猫,但寫(xiě)的很不錯(cuò)菜循,我可能需要參考這篇文章來(lái)持續(xù)集成。

四苞笨、通過(guò)官方docker知道了一些點(diǎn)

node:<version>

基于Debian,官方默認(rèn)鏡像债朵。當(dāng)你不確定你需要什么的時(shí)候選擇這個(gè)就對(duì)了。這個(gè)被設(shè)計(jì)成可以丟棄的鏡像瀑凝,也就是可以用作構(gòu)建源碼使用序芦。體積挺大。

node:<version>-slim

基于Debian粤咪, 刪除了很多默認(rèn)公共的軟件包谚中,只有node運(yùn)行的最小環(huán)境。除非你有空間限制寥枝,否則推薦使用默認(rèn)鏡像宪塔。
node:buster-slim其實(shí)就是debian10的瘦身版

node:<version>-alpine

基于alpine, 比Debian小的多。如果想要最小的鏡像囊拜,可以選擇這個(gè)做為base某筐。需要注意的是,alpine使用musl代替glibc冠跷。一些c環(huán)境的軟件可能不兼容南誊。但大部分沒(méi)問(wèn)題。

五蜜托、結(jié)論

如沒(méi)有非常必要都選用alpine然后在這之上去構(gòu)建自己的需求抄囚。

  • jdk的Dockerfile
FROM alpine:3.8
MAINTAINER qingmu 247687009@qq.com
ENV LANG=C.UTF-8 \
    JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre \
    PATH=$PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin \
    TZ=Asia/Shanghai
RUN echo "" > /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.8/main/" >> /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.8/community/" >> /etc/apk/repositories \
&& apk update && apk add --no-cache openjdk8 ca-certificates tzdata ttf-dejavu tini \
&& rm -rf /var/cache/apk/* \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  • jre的Dockerfile
FROM alpine:3.8
MAINTAINER qingmu 247687009@qq.com
ENV LANG=C.UTF-8 \
    JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre \
    PATH=$PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin \
    TZ=Asia/Shanghai
RUN echo "" > /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.8/main/" >> /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.8/community/" >> /etc/apk/repositories \
&& apk update && apk add --no-cache openjdk8-jre ca-certificates tzdata ttf-dejavu tini \
&& rm -rf /var/cache/apk/* \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市橄务,隨后出現(xiàn)的幾起案子幔托,更是在濱河造成了極大的恐慌,老刑警劉巖蜂挪,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重挑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棠涮,警方通過(guò)查閱死者的電腦和手機(jī)攒驰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)故爵,“玉大人,你說(shuō)我怎么就攤上這事∥艽梗” “怎么了劲室?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)结窘。 經(jīng)常有香客問(wèn)我很洋,道長(zhǎng),這世上最難降的妖魔是什么隧枫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任喉磁,我火速辦了婚禮,結(jié)果婚禮上官脓,老公的妹妹穿的比我還像新娘协怒。我一直安慰自己,他們只是感情好卑笨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布孕暇。 她就那樣靜靜地躺著,像睡著了一般赤兴。 火紅的嫁衣襯著肌膚如雪妖滔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天桶良,我揣著相機(jī)與錄音座舍,去河邊找鬼。 笑死陨帆,一個(gè)胖子當(dāng)著我的面吹牛曲秉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歧譬,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼岸浑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瑰步?” 一聲冷哼從身側(cè)響起矢洲,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缩焦,沒(méi)想到半個(gè)月后读虏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袁滥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年盖桥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题翻。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揩徊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塑荒,我是刑警寧澤熄赡,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站齿税,受9級(jí)特大地震影響彼硫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凌箕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一拧篮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牵舱,春花似錦串绩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沿盅,卻和暖如春把篓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腰涧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工韧掩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窖铡。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓疗锐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親费彼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滑臊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容