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 Servidor Tomcat 6/7/8 8 [OK] davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 6 [OK] andreptb/tomcat Imagem baseada no Debian Jessie com Apache Tomc... 4 [OK] kieker/tomcat 2 [OK] fbrx/tomcat Imagem mínima do Tomcat baseada no Alpine Linux 2 [OK] jtech/tomcat Última distribuição de produção do Tomcat 1 [OK]
Aqui, puxamos a imagem oficial:
w3codebox@w3codebox:~/tomcat$ docker pull tomcat
Após a conclusão do download, poderemos encontrar o ícone REPOSITORY como tomcat na lista de imagens locais.
w3codebox@w3codebox:~/tomcat$ docker images|grep tomcat tomcat última 70f819d3d2d9 7 há dias 335.8 MB
Crie Dockerfile
Primeiro, crie o diretório tomcat, para armazenar os itens relacionados posteriormente.
w3codebox@w3codebox:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf
O diretório webapps será mapeado para o diretório de aplicativos configurados no container tomcat.
O diretório logs será mapeado para o diretório de logs do container tomcat.
Os arquivos de configuração no diretório conf serão mapeados para os arquivos de configuração do container tomcat.
Acesse o diretório criado do tomcat, crie um Dockerfile.
FROM openjdk:8-jre ENV CATALINA_HOME /usr/local/tomcat AMBIENTE PATH $CATALINA_HOME/bin:$PATH RUN mkdir -p "$CATALINA_HOME" WORKDIR $CATALINA_HOME # permitir que "Tomcat Native" viva em algum lugar isolado AMBIENTE TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/nativo-jni-lib AMBIENTE LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR # dependências de tempo de execução para Bibliotecas Nativas do Tomcat # Tomcat Native 1.2+ requere uma versão mais nova da OpenSSL do que a disponível no debian:jessie # > verificando a versão da biblioteca OpenSSL >= 1.0.2... # > configurar: erro: A sua versão do OpenSSL não é compatível com esta versão do tcnative # ver http://tomcat.10.x6.nabble.com/VOTAÇÃO-Lançamento-Apache-Tomcat-8-0-32-tp5046007p5046024.html (e discussão subsequente) # e https://github.com/docker-library/tomcat/puxar/31 AMBIENTE OPENSSL_VERSION 1.1.0f-3+deb9u2 RUN set -ex; \ currentVersion="$(dpkg-consulta --exibir --formato de exibição '${Version}\n' openssl)"; \ se dpkg --comparar-versões "$currentVersion" '<<' "$OPENSSL_VERSION"; então \ se ! grep -q stretch /etc/apt/sources.list; então \ # apenas adicionar stretch se não estivermos construindo a partir do interior de 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; \ { \ # 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-obter atualização; \ 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/* # 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/navegar/INFRA-8753?focusedCommentId=14735394#comentário-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 a versão estiver desatualizada, podemos precisar puxar do 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 \ # não todos os mirrors realmente transportam os arquivos .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-marcar showmanual)"; \ apt-obter atualização; \ \ apt-get install -y --no-install-recomenda gnupg dirmngr; \ \ export GNUPGHOME="$(mktemp -d)"; \ para chave em $GPG_KEYS; fazer\ gpg --keyserver ha.pool.sks-keyservers.net --recv-chaves "$key"; \ done; \ \ apt-get install -y --no-install-recomenda wget ca-certificados; \ \ success=; \ para url em $TOMCAT_TGZ_URLS; fazer\ if wget -O tomcat.tar.gz "$url"; então \ success=1; \\ break; \ fi; \ done; \ -n "$success" ]; \ \ echo "$TOMCAT_SHA512 *tomcat.tar.gz" | sha512soma -c -; \\ \ success=; \ para url em $TOMCAT_ASC_URLS; fazer\ 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 "$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-mark auto '.*' > /dev/null; \ -z \-mark manual $savedAptMark; \\ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \\ rm -rf /var/lib/apt/lists/*; \\ \ # sh removes env vars it doesn't support (ones with periods) # 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; \\ echo >&2 "$nativeLines"; \\ sai 1; \\ fi EXPOSE 8080 CMD ["catalina.sh", "run"]
Crie uma imagem através do Dockerfile, substitua pelo seu próprio nome:
w3codebox@w3codebox:~/tomcat$ docker build -t tomcat .
Após a criação, podemos encontrar o ícone recém-criado na lista de imagens locais:
w3codebox@w3codebox:~/tomcat$ docker images|grep tomcat tomcat última 70f819d3d2d9 7 há dias 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$
Descrição do Comando:
-p 8080:8080:Monte o host 8080 Porta mapeada para o container 8080 Porta.
-v $PWD/test:/usr/local/tomcat/webapps/test:Monte o diretório atual do host para o container /test。
Verifique o status de inicialização do container
w3codebox@w3codebox:~/tomcat$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES acb33fcb4beb tomcat "catalina.sh run" ... 0.0.0.0:8080->8080/tcp tomcat
Acesse através do navegador