alpine docker_精益,卑鄙的Java虚拟机:使用Alpine Linux减轻Docker 7x的负担

alpine docker

如何在Alpine Linux上使用Docker构建最小的JVM容器?

肯定有某种觉醒。 最近,我们越来越多地听到有关Alpine Linux的信息,这是一个轻量级发行版,由于其Docker用例而越来越受欢迎。 几个月前的一次Takipi支持聊天激起了我们的兴趣,从那时起,我们看到越来越多的用户使用其容器对其进行尝试。 在本文中,我们将对Alpine进行快速概述和演练,以及如何使用它来使用Java或任何其他JVM语言构建轻量级Docker容器。

让我们开始吧。

那么,什么是Alpine Linux?

Alpine Linux是基于musl libc (发音为“ muscle”)和busybox的独立精简版Linux。 除了轻量级之外,它还面向安全性并使用grsec / Pax ,这是Linux内核的安全性增强。 简单地减少其他发行版中默认添加的软件包和实用程序,也可以增加其安全性。

另外,Alpine使用自己的软件包管理器apk,它既快速又易于使用。 另一个很酷的好处是它的RAM运行功能。

高山Linux兴起– Google趋势

高山Linux兴起– Google趋势

图像尺寸真的重要吗?

Docker就是关于极简主义的一切,但是当涉及到Docker上的JVM时,官方的Java Docker映像将总计超过800MB。 即使您对磁盘空间不敏感,这也很麻烦,原因有两个。

图像尺寸越大,花费的时间越长:

  1. 建立它
  2. 通过网络发货

当您处理成百上千个容器时,或者不断更新时,它会增强大图像尺寸的负面影响,因此,这很重要。 同时,Alpine基本映像仅占用5MB的空间。

这是gliderlabs / alpine图片的比较,后者是官方docker-alpine图片的来源:

图片大小

与可能是Docker用户最受欢迎的发行版Ubuntu相比,它的性能提高了37倍,节省了183MB的磁盘空间。 话虽如此,Alpine并不适合每个人,并且需要根据您的特定用例和您希望从操作系统中获得的功能类型进行深入研究。 如果清洁和最小化是您最大的顾虑之一,那么无论如何,您应该检查一下。

Alpine vs Ubuntu官方Docker镜像:Alpine上为110万,Ubuntu上为39.3M

Alpine vs Ubuntu官方Docker镜像 :在Alpine上为 110万,在Ubuntu上为39.3M

Alpine入门:查阅Alpine Wiki及其与其他发行版的实际比较

在Java上超级有用

虽然不特定于Java用例,但与Docker上的JVM一起使用时,使用Alpine会带来巨大的规模收益。 开箱即用的官方Java Docker映像占用了800MB以上的内存,而使用Alpine时,如果仅在Java 8上包含JRE, 则可以减少到117MB 。这几乎减轻了7倍! 至于实际的安装,这取决于要使用的Java版本。 由于Alpine使用musl libc,我们有2个选择:

  1. OpenJDK安装可与musl libc一起使用, 这是一个示例
  2. Oracle HotSpot取决于glibc,并且需要执行其他步骤。

Oracle Java最受欢迎的dockerfile由frolvlad (9.3K拉)和anapsix (6.9K拉)发布,包括用于最小安装的不同配置,包括glibc。 这是在Alpine上添加glibc的一种方法:

RUN apk --update add curl ca-certificates tar && \
    curl -Ls https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-2.21-r2.apk > /tmp/glibc-2.21-r2.apk && \
    apk add --allow-untrusted /tmp/glibc-2.21-r2.apk

在旁注中,一个不错的小技巧是通过imagelayers.io查看docker映像。 anapsix的Java 8映像如下所示:

如何在Alpine Linux上安装Takipi?

我们最初是在希望通过Takipi监视JVM的用户的请求下听说过Alpine的。 为了能够在Alpine上运行Takipi,我们必须包含更多的依赖项。 除了glibc之外,我们还需要zlib压缩库libstdc ++和低级运行时库libgcc 。 紧紧抓住! 附件是一个Dockerfile,其中描述了所有必需的步骤并带有注释。 您将看到如何使用glibc在Alpine上安装Java,添加其他依赖项,安装Takipi以及监视具有一些错误的简单Scala服务器(顺便说一句,要了解有关Takipi的更多信息,您可以查看此页面 ) :

# Takipi
FROM alpine:3.2

MAINTAINER Chen Harel "https://github.com/chook"

# Install dependencies 
RUN apk --update add curl ca-certificates tar sqlite icu bash && \
    curl -Ls https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-2.21-r2.apk > /tmp/glibc-2.21-r2.apk && \
    apk add --allow-untrusted /tmp/glibc-2.21-r2.apk

# Java version
ENV JAVA_VERSION_MAJOR 7
ENV JAVA_VERSION_MINOR 79
ENV JAVA_VERSION_BUILD 15
ENV JAVA_PACKAGE       jdk

# Download and unarchive Java
RUN mkdir /opt && curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie"\
  http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz \
    | tar -xzf - -C /opt &&\
    ln -s /opt/jdk1.7.0_79 /opt/jdk &&\
    rm -rf /opt/jdk/*src.zip \
           /opt/jdk/lib/missioncontrol \
           /opt/jdk/lib/visualvm \
           /opt/jdk/lib/*javafx* \
           /opt/jdk/jre/lib/plugin.jar \
           /opt/jdk/jre/lib/ext/jfxrt.jar \
           /opt/jdk/jre/bin/javaws \
           /opt/jdk/jre/lib/javaws.jar \
           /opt/jdk/jre/lib/desktop \
           /opt/jdk/jre/plugin \
           /opt/jdk/jre/lib/deploy* \
           /opt/jdk/jre/lib/*javafx* \
           /opt/jdk/jre/lib/*jfx* \
           /opt/jdk/jre/lib/amd64/libdecora_sse.so \
           /opt/jdk/jre/lib/amd64/libprism_*.so \
           /opt/jdk/jre/lib/amd64/libfxplugins.so \
           /opt/jdk/jre/lib/amd64/libglass.so \
           /opt/jdk/jre/lib/amd64/libgstreamer-lite.so \
           /opt/jdk/jre/lib/amd64/libjavafx*.so \
           /opt/jdk/jre/lib/amd64/libjfx*.so \
    && addgroup -g 999 app && adduser -D  -G app -s /bin/false -u 999 app \
    && rm -rf /tmp/* \
    && rm -rf /var/cache/apk/* \
    && echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf

# Set environment
ENV JAVA_HOME /opt/jdk
ENV PATH ${PATH}:/opt/jdk/bin	

### Takipi Installation 

# Takipi installer dependencies (we need xz for a future untar process)
RUN apk --update add xz

# Download required libraries libgcc_s.so.1, libstdc++.so.6
RUN curl -Ls https://www.archlinux.org/packages/core/x86_64/gcc-libs/download > /tmp/gcc-libs.tar.gz && \
	mkdir /usr/libgcc && tar -xvf /tmp/gcc-libs.tar.gz -C /usr/libgcc

# Download required libraries libz.so.1
RUN curl -Ls https://www.archlinux.org/packages/core/x86_64/zlib/download/ > /tmp/zlib.tar.gz && \
	mkdir /usr/zlib && tar -xvf /tmp/zlib.tar.gz -C /usr/zlib

# Register the new libraries (before starting the Takipi installation process)
RUN echo /usr/zlib/usr/lib >> /etc/ld.so.conf
RUN echo /usr/libgcc/usr/lib >> /etc/ld.so.conf
RUN /usr/glibc/usr/bin/ldconfig

# Starting the default run level to avoid errors while starting Takipi
RUN rc default

# Install Takipi
RUN curl -s /dev/null http://s3.amazonaws.com/get.takipi.com/takipi-t4c-installer | \
	bash /dev/stdin -i --sk=<SECRET_KEY>

# Register Takipi libraries
RUN echo /opt/takipi/lib >> /etc/ld.so.conf
RUN /usr/glibc/usr/bin/ldconfig

# We must add Takipi to the PATH so the agent be able to start Takipi by itself
ENV PATH ${PATH}:/opt/takipi/bin

### Takipi installation complete

# Get a Java tester app
RUN wget https://s3.amazonaws.com/app-takipi-com/chen/scala-boom.jar -O scala-boom.jar

# Running a Java process with Takipi
CMD java -agentlib:TakipiAgent -jar scala-boom.jar

社区

要更深入地研究Alpine并参与其开发,您可以在FreeNode上查看其IRC频道:#alpine-linux和#alpine-devel,这些是核心开发人员所关注的地方。 您也可以加入邮件列表和论坛

从我们在Twitter,HN和Reddit上看到的评论来看,普遍的看法是非常积极的,许多Alpine用户正在看到图像尺寸的显着减小,而不会影响其他OS功能。 数字不说谎,它正在获得一些严重的动力。

最后的想法

与Alpine这样的最小操作系统相比,使用完整的发行版的优势有时并不值得。 特别是对于容器用例。 您甚至可以称它们为……微型容器。

我们希望这篇文章可以帮助您发现新的事物,并很高兴听到您对此的想法。 请随时使用下面的评论部分。

翻译自: https://www.javacodegeeks.com/2016/02/lean-mean-java-virtual-machine-making-docker-7x-lighter-alpine-linux.html

alpine docker

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值