English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
查找 Docker Hub 上的 Tomcat 镜像:
可以通过 Sort by 查看其他版本的 tomcat,默认是最新版本 tomcat:latest。
此外,我们还可以用 docker search tomcat 命令来查看可用版本:
w3codebox@w3codebox:~/tomcat$ docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementa... 744 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and 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]
Aquí estamos trayendo la imagen oficial:
w3codebox@w3codebox:~/tomcat$ docker pull tomcat
Después de que se complete la descarga, podremos encontrar la imagen con REPOSITORY tomcat en la lista de imágenes locales.
w3codebox@w3codebox:~/tomcat$ docker images|grep tomcat tomcat última 70f819d3d2d9 7 hace días 335.8 MB
Crea Dockerfile
Primero, crea el directorio tomcat, que se utilizará para almacenar las cosas relacionadas a continuación.
w3codebox@w3codebox:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf
El directorio webapps se mapeará al directorio de aplicaciones configuradas del contenedor tomcat.
El directorio logs se mapeará al directorio de registro del contenedor tomcat.
Los archivos de configuración en el directorio conf se mapearán a los archivos de configuración del contenedor tomcat.
Ingresa al directorio de tomcat creado, crea 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 # dejar que "Tomcat Native" viva en algún lugar aislado ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/nativo-jni-lib ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR # dependencias de tiempo de ejecución para las Bibliotecas Nativas de Tomcat # Tomcat Native 1.2+ requiere una versión más nueva de OpenSSL que la que debian:jessie tiene disponible # > verificando la versión de la biblioteca OpenSSL >= 1.0.2... # > configurar: error: Su versión de OpenSSL no es compatible con esta versión de tcnative # ver http://tomcat.10.x6.nabble.com/VOTE-Lanzamiento-Apache-Tomcat-8-0-32-tp5046007p5046024.html (y el siguiente debate) # y https://github.com/docker-library/tomcat/sacar/31 ENV OPENSSL_VERSION 1.1.0f-3+deb9u2 RUN set -ex; \ currentVersion="$(dpkg-consulta --mostrar --mostrarformat '${Version}\n' openssl); \ if dpkg --comparar-versiones "$currentVersion" '<<' "$OPENSSL_VERSION"; entonces \ if ! grep -q estiramiento /etc/apt/sources.list; entonces \ # solo agregar estiramiento si no estamos construyendo desde dentro del estiramiento { \ 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; \ { \ # add a negative "Pin-Priority" so that we never ever get packages from stretch unless we explicitly request them echo 'Package: *'; \ echo 'Pin: release n=stretch*'; \ echo 'Pin-Priority: -10'; \ echo; \ # ... except OpenSSL, which is the reason we're here echo 'Package: openssl libssl*'; \ echo "Pin: version $OPENSSL_VERSION"; \ echo 'Pin-Priority: 990'; \ }> /etc/apt/preferences.d/stretch-openssl; \ fi; \ apt-get update; \ apt-get install -s --no-install-recommends openssl="$OPENSSL_VERSION"; \ rm -rf /var/lib/apt/lists/*; \ fi RUN apt-get update && apt-get install -s --no-install-recommends \ libapr1 \ && rm -rf /var/lib/apt/lists/* # see https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS # see also "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 \ # if the version is outdated, we might have to pull from the 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 \ # not all the mirrors actually carry the .asc files :(' 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 -s --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 -s --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 -s --no-install-recommends \ dpkg-dev \ gcc \ libapr1-dev \ libssl-dev \ make \ "openjdk-${JAVA_VERSION%%[.~bu-]*}-jdk=$JAVA_DEBIAN_VERSION" \ ; \ ( \ export CATALINA_HOME="$PWD"; \ cd "$nativeBuildDir/native"; \ 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 "$(nproc)"; \ make install; \ ); \ rm -rf "$nativeBuildDir"; \ rm bin/tomcat-native.tar.gz; \ \ # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies apt-marcar automático '.'*' > /dev/null; \ [ -z "$savedAptMark" ] || apt-marcar manualmente $savedAptMark; \ apt-obtener purge -s --auto-eliminar -o APT::AutoRemove::RecommendsImportant=false; \ rm -rf /var/lib/apt/lists/*; \ \ # sh elimina las variables de entorno que no admite (las que tienen puntos) # https://github.com/docker-library/tomcat/issues/77 find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' + # verificar que Tomcat Native esté funcionando correctamente 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"; \ salir 1; \ fi EXPOSE 8080 CMD ["catalina.sh", "run"]
Crea una imagen mediante Dockerfile, reemplázala con tu propio nombre:
w3codebox@w3codebox:~/tomcat$ docker build -t tomcat .
Después de que se complete, podemos encontrar la imagen recién creada en la lista de imágenes locales:
w3codebox@w3codebox:~/tomcat$ docker images|grep tomcat tomcat última 70f819d3d2d9 7 hace días 335.8 MB
w3codebox@w3codebox:~/tomcat$ docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat acb33fcb4beb8d7f1ebace6f50f5fc204b1dbe9d524881267aa715c61cf75320 w3codebox@w3codebox:~/tomcat$
Explicación de comandos:
-p 8080:8080:Montar el anfitrión 808Puerto 0 mapeado al contenedor 808Puerto 0.
-v $PWD/test:/usr/local/tomcat/webapps/test:Montar test en el directorio actual del anfitrión en el contenedor /test。
Ver el estado de inicio del contenedor
w3codebox@w3codebox:~/tomcat$ docker ps CONTAINER ID IMAGE COMMAND ... PUERTOS NAMES acb33fcb4beb tomcat "catalina.sh run" ... 0.0.0.0:8080->8080/tcp tomcat
Acceder a través del navegador