Alpine Linux Docker Image

Alpine Linux Docker Image

Blog-Quickie: Schnelles Beispiel für die Erstellung eines Alpine Linux Docker-Images

In meiner Artikel-Serie Docker Images From Scratch habe ich gezeigt, wie ein eigenes Docker Basis-Image erzeugt werden kann. Dazu habe ich Debian als Distribution verwendet.
Das Ergebnis war ein recht kleines Image für Docker (https://hub.docker.com/r/bundeskanzler4711/jessie-minbase/).

Aber das muss noch kleiner und besser gehen.

Schritt 1

Zuerst habe ich mir dafür BusyBox angesehen. BusyBox ist ein wirklich kleines Linux, aber leider ohne Paketmanager. Die Installation weiterer Software ist ohne wirklich eine qual. Damit ist es keine wirkliche, belastbare Option.

Eine andere Distribution namens Alpine Linux adressiert genau dieses Problem.
Es basiert auf BusyBox und fügt diesem Linux einen einfachen Paketmanager namens „apk“ hinzu.

Lange Rede, kurzer Sinn, habe ich diese Schritte in meinem lokalen Workspace durchgeführt:

mkdir alpinlinux     
cd alpinlinux/     
mkdir root     

curl -sSL http://nl.alpinelinux.org/alpine/latest-stable/main/x86_64/apk-tools-static-$(curl \      
   -sSL http://nl.alpinelinux.org/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz | \      
   tar -Oxz | \      
   grep --text '^P:apk-tools-static$' -A1 | \      
   tail -n1 | \      
   cut -d: -f2).apk | \      
   tar -xz -C . sbin/apk.static  

./sbin/apk.static \   
   --repository http://nl.alpinelinux.org/alpine/latest-stable/main/ \   
   --update-cache \   
   --allow-untrusted \   
   --root ./root \   
   --initdb add alpine-base  

echo "http://nl.alpinelinux.org/alpine/latest-stable/main/" > ./root/etc/apk/repositories     
echo "http://nl.alpinelinux.org/alpine/latest-stable/community/" >> ./root/etc/apk/repositories     
tar --numeric-owner -C root -c . | docker import - alpine:0 

Jetztist das Basisimage von Alpine Linux für Docker schon fertig.

Natürlich habe ich mein Image auf Docker Hub veröffentlicht. So könnt ihr es verwenden, testen und damit rumspielen: https://hub.docker.com/r/bundeskanzler4711/alpine-base/

Schritt 2

Als zweiten Schritt habe ich darauf basierend ein kleines OpenJDK 8 JRE-Image erstellt. Dafür habe ich das folgende kleine Dockerfile benutzt:

FROM bundeskanzler4711/alpine-base:latest     
RUN apk add --no-cache openjdk8-jre 

Ja genau, das war es schon 🙂
Nach ein paar Sekunden war mein Image auch schon fertig gebaut:

$ docker build -t bundeskanzler4711/alpine-base:0-java8 .     Sending build context to Docker daemon 2.048 kB     
Step 1 : FROM bundeskanzler4711/alpine-base:latest     
 ---> 3337a006116b     
Step 2 : RUN apk add --no-cache openjdk8-jre     
 ---> Running in 30bd48d54d95     
fetch http://nl.alpinelinux.org/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz     
fetch http://nl.alpinelinux.org/alpine/latest-stable/community/x86_64/APKINDEX.tar.gz     
(1/24) Installing libffi (3.2.1-r2)     
(2/24) Installing libtasn1 (4.7-r0)     
(3/24) Installing p11-kit (0.23.1-r1)     
(4/24) Installing p11-kit-trust (0.23.1-r1)     
(5/24) Installing openssl (1.0.2g-r0)     
(6/24) Installing ca-certificates (20160104-r2)     
(7/24) Installing java-cacerts (1.0-r0)     
(8/24) Installing libxau (1.0.8-r1)     
(9/24) Installing libxdmcp (1.1.2-r1)     
(10/24) Installing libxcb (1.11.1-r0)     
(11/24) Installing libx11 (1.6.3-r2)     
(12/24) Installing libxext (1.3.3-r1)     
(13/24) Installing libxi (1.7.5-r0)     
(14/24) Installing libxrender (0.9.9-r1)     
(15/24) Installing libxtst (1.2.2-r0)     
(16/24) Installing libpng (1.6.20-r0)     
(17/24) Installing freetype (2.6.2-r0)     
(18/24) Installing libgcc (5.3.0-r0)     
(19/24) Installing giflib (5.1.1-r0)     
(20/24) Installing openjdk8-jre-lib (8.72.15-r2)     
(21/24) Installing java-common (0.1-r0)     
(22/24) Installing alsa-lib (1.1.0-r1)     
(23/24) Installing openjdk8-jre-base (8.72.15-r2)     
(24/24) Installing openjdk8-jre (8.72.15-r2)     
Executing busybox-1.24.1-r7.trigger     
Executing ca-certificates-20160104-r2.trigger     
Executing java-common-0.1-r0.trigger     
OK: 106 MiB in 40 packages     
 ---> 3b0ce8bcd143     
Removing intermediate container 30bd48d54d95     
Successfully built 3b0ce8bcd143 

Ich bin sehr stolz. 😉
Und: es funktioniert WIRKLICH:

$ docker run bundeskanzler4711/alpine-base:latest-java8 java -version     
openjdk version "1.8.0_72-internal"     
OpenJDK Runtime Environment (build 1.8.0_72-internal-alpine-r2-b15)     
OpenJDK 64-Bit Server VM (build 25.72-b15, mixed mode) 

Wie oben beschrieben, findet ihr alle Images auf Docker Hub (https://hub.docker.com/u/bundeskanzler4711/).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.