English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Installazione Tomcat Docker

Metodo 1, docker pull tomcat

Cerca Docker Hub Sul Tomcat Image:

Puoi vedere altre versioni di tomcat tramite Sort by, la versione predefinita è la più recente tomcat:latest

Inoltre, possiamo utilizzare il comando docker search tomcat per visualizzare le versioni disponibili:

w3codebox@w3codebox:~/tomcat$ docker search tomcat
NOME                     DESCRIZIONE                                   STELLE   UFFICIALE   AUTOMATICO
tomcat                     Apache Tomcat è un implementazione open source...   744     [OK]       
dordoka/tomcat             Ubuntu 14.04, Oracle JDK 8 e Tomcat 8 ba...   19                   [OK]
consol/tomcat-7.0          Tomcat 7.0.57, 8080, "admin/admin"              16                   [OK]
consol/tomcat-8.0          Tomcat 8.0.15, 8080, "admin/admin"              14                   [OK]
cloudesire/tomcat          Tomcat server, 6/7/8                            8                    [OK]
davidcaste/alpine-tomcat   Apache Tomcat 7/8 using Oracle Java 7/8 wi...   6                    [OK]
andreptb/tomcat            Debian Jessie based image with Apache Tomc...   4                    [OK]
kieker/tomcat                                                              2                    [OK]
fbrx/tomcat                Minimal Tomcat image based on Alpine Linux      2                    [OK]
jtech/tomcat               Latest Tomcat production distribution on l...   1                    [OK]

Ecco, stiamo scaricando l'immagine ufficiale:

w3codebox@w3codebox:~/tomcat$ docker pull tomcat

Dopo il completamento del download, possiamo trovare l'immagine con REPOSITORY equal a tomcat nella lista delle immagini locali.

w3codebox@w3codebox:~/tomcat$ docker images|grep tomcat
tomcat              latest              70f819d3d2d9        7 days ago          335.8 MB

Metodo due: costruzione tramite Dockerfile

Creare Dockerfile

Prima di tutto, creare la directory tomcat per contenere le cose pertinenti successive.

w3codebox@w3codebox:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf

La directory webapps sarà mappata alla directory delle applicazioni configurate nel container Tomcat.

La directory logs sarà mappata alla directory di log del container Tomcat.

Le configurazioni dei file nella directory conf saranno mappate ai file di configurazione del container Tomcat.

Entrare nella directory creata per tomcat, creare Dockerfile.

FROM openjdk:8-jre
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
# far vivere "Tomcat Native" da qualche parte isolato
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
# dipendenze runtime per le librerie native di Tomcat
# Tomcat Native 1.2+ richiede una versione più recente di OpenSSL rispetto a quella disponibile su debian:jessie
# > controllando la versione della libreria OpenSSL >= 1.0.2...
# > configure: errore: La tua versione di OpenSSL non è compatibile con questa versione di tcnative
# vedere http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (e seguenti discussioni)
# e https://github.com/docker-library/tomcat/pull/31
ENV OPENSSL_VERSION 1.1.0f-3+deb9u2
RUN set -ex;
    currentVersion="$(dpkg-query --show --showformat '${Version}\n' openssl)";
    if dpkg --compare-versions "$currentVersion" '<' "$OPENSSL_VERSION"; then
        if ! grep -q stretch /etc/apt/sources.list; then
# aggiungi stretch solo se non stiamo già costruendo all'interno di stretch
            {
                echo 'deb http://deb.debian.org/debian stretch main';
                echo 'deb http://security.debian.org stretch/updates main';
                echo 'deb http://deb.debian.org/debian stretch-updates main';
            }> /etc/apt/sources.list.d/stretch.list;
            {
# aggiungi un "Pin-Priority" negativo in modo che non riceviamo mai mai pacchetti da stretch a meno che non li richiediamo espressamente
                echo 'Package: *';
                echo 'Pin: release n=stretch*';
                echo 'Pin-Priority: -10';
                echo;
# ... eccetto OpenSSL, che è il motivo per cui siamo qui
                echo 'Package: openssl libssl*';
                echo "Pin: versione $OPENSSL_VERSION";
                echo 'Pin-Priority: 990'; \}}
            } > /etc/apt/preferences.d/stretch-openssl; \
        fi;
        apt-get update;
        apt-get install -y --no-install-recommends openssl="$OPENSSL_VERSION"; \
        rm -rf /var/lib/apt/lists/*;
    fi
RUN apt-get update && apt-get install -y --no-install-recommends \
        libapr1 \
    && rm -rf /var/lib/apt/lists/*
# vedere https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS
# vedere anche "update.sh" (https://github.com/docker-library/tomcat/blob/master/update.sh)
ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.5.32
ENV TOMCAT_SHA512 fc010f4643cb9996cad3812594190564d0a30be717f659110211414faf8063c61fad1f18134154084ad3ddfbbbdb352fa6686a28fbb6402d3207d4e0a88fa9ce
ENV TOMCAT_TGZ_URLS \
# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
    https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
# Se la versione è obsoleta, potremmo dover estrarre dal dist/archive:/
    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
ENV TOMCAT_ASC_URLS \
    https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
# non tutti i mirror effettivamente portano i file .asc :('
    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
    https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc
RUN set -eux; \
    \
    savedAptMark="$(apt-mark showmanual)";
    apt-get update;
    \
    apt-get install -y --no-install-recommends gnupg dirmngr;
    \
    export GNUPGHOME="$(mktemp -d)";
    for key in $GPG_KEYS; do
        gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key";
    done;
    \
    apt-get install -y --no-install-recommends wget ca-certificates;
    \
    success=;
    for url in $TOMCAT_TGZ_URLS; do
        if wget -O tomcat.tar.gz "$url"; then
            success=1;
            break;
        fi;
    done;
    [ -n "$success" ];
    \
    echo "$TOMCAT_SHA512 *tomcat.tar.gz" | sha512sum -c -;
    \
    success=;
    for url in $TOMCAT_ASC_URLS; do
        if wget -O tomcat.tar.gz.asc "$url"; then
            success=1;
            break;
        fi;
    done;
    [ -n "$success" ];
    \
    gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz;
    tar -xvf tomcat.tar.gz --strip-components=1;
    rm bin/*.bat;
    rm tomcat.tar.gz*;
    rm -rf "$GNUPGHOME";
    \
    nativeBuildDir="$(mktemp -d)";
    tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1;
    apt-get install -y --no-install-recommends \
        dpkg-dev
        gcc
        libapr1-dev
        libssl-dev
        make
        "openjdk-${JAVA_VERSION%%[.~bu-]*}-jdk=$JAVA_DEBIAN_VERSION"
    ;
    (
        export CATALINA_HOME="$PWD";
        cd \
        gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)";
        ./configure
            --build="$gnuArch"
            --libdir="$TOMCAT_NATIVE_LIBDIR"
            --prefix="$CATALINA_HOME"
            --with-apr="$(which apr-1-config)"
            --with-java-home="$(docker-java-home)"
            --with-ssl=yes;
        make -j \
        make install;
    );
    rm -rf "$nativeBuildDir";
    rm bin/tomcat-native.tar.gz;
    \
# ripristina l'elenco "manuale" di apt-mark in modo che "purge --auto-remove" rimuova tutte le dipendenze di costruzione
    apt-mark auto '.*' > /dev/null;
    [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark;
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false;
    rm -rf /var/lib/apt/lists/*;
    \
# sh rimuove variabili d'ambiente che non supporta (quelle con punti)
# https://github.com/docker-library/tomcat/issues/77
    find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' +
# verify Tomcat Native is working properly
RUN set -e \
    && nativeLines="$(catalina.sh configtest 2>&1)" \
    && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
    && nativeLines="$(echo "$nativeLines" | sort -u)" \
    && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
        echo >&2 "$nativeLines"; \
        exit 1; \
    fi
EXPOSE 8080
CMD ["catalina.sh", "run"]

通过 Dockerfile 创建一个镜像,替换成你自己的名字:

w3codebox@w3codebox:~/tomcat$ docker build -t tomcat .

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像:

w3codebox@w3codebox:~/tomcat$ docker images|grep tomcat
tomcat              latest              70f819d3d2d9        7 days ago          335.8 MB

Usa l'immagine tomcat

Esegui il container

w3codebox@w3codebox:~/tomcat$ docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat  
acb33fcb4beb8d7f1ebace6f50f5fc204b1dbe9d524881267aa715c61cf75320
w3codebox@w3codebox:~/tomcat$

Spiegazione del comando:

-p 8080:8080:Mappa il porto 8080 del host al porto 8080 del container.

-v $PWD/test:/usr/local/tomcat/webapps/test:Monta il directory corrente del host /test nel /test del container.

Visualizza lo stato di avvio del container

w3codebox@w3codebox:~/tomcat$ docker ps 
ID CONTAINER  IMMAGINE  COMANDO  ... PORTI  NOMI
acb33fcb4beb  tomcat  "catalina.sh run"  ... 0.0.0.0:8080->8080/tcp  tomcat

Accedi tramite il browser