Créez un environnement Apache et Tomcat avec Docker. À propos, coopération Maven & Java

Aperçu

Je veux créer une application Web avec Java, alors je vais essayer de gâcher l'environnement local! !! Je ne veux pas dépendre de l'IDE, je ferai donc de mon mieux pour créer un environnement sur la base d'une commande (tsu ・ Д ・)

L'environnement résultant

Créer un environnement Docker

Créez chaque conteneur et attachez-les avec docker-compose.yml à la fin. Pour le moment, je veux faire quelque chose qui fonctionne au moins et le personnaliser à l'avenir!

Créer un conteneur Apache

Je souhaite personnellement étudier Apache sur centos, alors installez-le et créez une image

Dockerfile


FROM centos:7

RUN yum -y update && yum clean all
RUN yum -y install httpd httpd-devel gcc* make && yum clean all

# mod_jk conf files
ADD httpd-proxy.conf /etc/httpd/conf.d/

# Simple startup script to avoid some issues observed with container restart 
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh

CMD ["/run-httpd.sh"]

httpd-proxy.conf


# forward to tomcat container
ProxyPass / ajp://tomcat:8009/

run-httpd.sh


#!/bin/bash

# Make sure we're not confused by old, incompletely-shutdown httpd
# context after restarting the container.  httpd won't start correctly
# if it thinks it is already running.
rm -rf /run/httpd/* /tmp/httpd*

exec /usr/sbin/apachectl -DFOREGROUND

Créer un conteneur Tomcat

Dockerfile


FROM tomcat:9.0.1-alpine

MAINTAINER Uchiyama <[email protected]>

ADD tomcat-users.xml /usr/local/tomcat/conf/
ADD context.xml /usr/local/tomcat/webapps/manager/META-INF/context.xml

RUN rm -rf /usr/local/tomcat/webapps/ROOT

CMD ["catalina.sh", "run"]

tomcat-users.xml


<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager-script"/>
  <user username="manager" password="manager!" roles="manager-script"/>
</tomcat-users>

Pour permettre à Tomcat Manager de s'exécuter sur autre chose que le nom d'hôte localhost. Voir This stackOverFlow pour plus de détails.

context.xml


<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

Lien avec docker-compose

docker-compose.yml


version: '3'
services:
  httpd:
    container_name: httpd-container
    build: ./docker/httpd
    ports:
      - "80:80"
  tomcat:
    container_name: tomcat-container
    build: ./docker/tomcat
    expose:
      - "8009"
volumes:
  data: {}

Essayez de bouger

zsh


docker-compose up -d --build
docker-compose ps

Après avoir confirmé que le conteneur a démarré, cliquez sur l'URL ci-dessous pour voir la page d'accueil de Tomcat. http://localhost/

Si cela ne fonctionne pas, consultez le journal d'accès du conteneur httpd ou tomcat pour voir jusqu'où vous avez atteint.

zash


docker exec -it httpd-container tail -f /etc/httpd/logs/access_log
docker exec -it tomcat-container1 tail -f /usr/local/tomcat/logs/localhost_access_log.`date +%Y-%m-%d`.log

Créer une application Java avec Maven

Installez Maven

zsh


brew install maven
mvn -v

Créer un projet (modèle) avec Maven

zsh


mvn archetype:generate \ #Création de projet
-DgroupId=tech.ucwork \ #Spécification du nom du package
-DartifactId=myapp \ #Spécifiez le nom de l'application
-DarchetypeArtifactId=maven-archetype-webapp #Spécification initiale du format de l'application (Web)
-DinteractiveMode=false #Ne pas exécuter de manière interactive

Affichage Hello World en Java

Structure du répertoire

J'ai oublié le site auquel je faisais référence, mais je vais créer un fichier comme celui-ci

zsh


$ tree -NL 5 src                                                                                                                     +[master]
src
└── main
    ├── java
    │   └── tech
    │       └── ucwork
    │           └── HelloServlet.java
    ├── resources
    │   └── log4j.properties
    └── webapp
        ├── WEB-INF
        │   └── web.xml
        └── index.jsp

7 directories, 4 files

fichier java

HelloServlet.java


package tech.ucwork;

import java.io.IOException;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static Logger log = LoggerFactory.getLogger(HelloServlet.class);
	
    public HelloServlet() {
    }
    
    @Override
    public void init() {
    	log.debug("servlet init...");
    }

    @Override
  	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	log.debug("servlet service...");
      PrintWriter out = response.getWriter();
	  	out.println("hello5");
  	}
}

log4j.properties


### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p %c{1} - %m%n

log4j.rootLogger=debug, stdout

Construire et emballer avec Maven

Faites ressembler pom.xml à ceci et exécutez des commandes!

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>tech.ucwork</groupId>
  <artifactId>myapp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myapp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.6</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.7</version>
        <scope>test</scope>
    </dependency>
    <dependency> 
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.12</version>
    </dependency>
  </dependencies>
  <build>
    <!--Plugins qui se compilent avec maven-->
    <finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <!--Plugin pour étendre les fichiers de guerre de maven à tomcat-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <path>/app</path><!--Fichier (nom du répertoire) à développer sous webapps-->
          <server>tomcat-localhost</server>
          <url>http://localhost/manager/text</url>
        </configuration>
      </plugin>
    </plugins>
  </build> 
</project>

zsh


mvn clean package

Déployer sur Tomcat

Déployer sur Tomcat avec Maven

~~ Réalisé en se référant à ce site. ~~

~~ J'ai heurté un mur, mais this stackOverFlow Résolu ~~

Déployer le fichier war sur Tomcat

Si vous y réfléchissez, c'était plus facile que d'utiliser maven pour les raisons suivantes. (J'étais inquiet à ce sujet ...)

  1. Je ne sais pas comment lancer à tous les tomcats lors du déploiement de la fonction de gestionnaire via http lorsque plusieurs tomcats sont configurés.
  2. Que diriez-vous de pouvoir déployer via un navigateur en premier lieu? Bien qu'il existe des certifications de base
  3. La théorie selon laquelle il pourrait être déployé en attachant un fichier war sous {TOMCAT_HOME} / webapps /

zsh


mvn clean package
docker cp target/myapp-1.0-SNAPSHOT.war tomcat-container:/usr/local/tomcat/webapps/app.war

Référence) Bases de Maven

TODO

Paramètres initiaux Tomcat liés (suppression des fichiers et paramètres existants tels que les journaux)

Je souhaite définir ce site comme référence

Distribution de charge et gestion de session dans la configuration de cluster Apache et Tomcat

Je veux le définir en faisant référence ici

Divers réglages des paramètres de Tomcat

Principes de base de divers fichiers de paramètres Paramètres détaillés Détails du pool de threads

Recommended Posts

Créez un environnement Apache et Tomcat avec Docker. À propos, coopération Maven & Java
Préparer un environnement de scraping avec Docker et Java
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
Créer un environnement Docker avec WSL
Créer un environnement local Couchbase avec Docker
Créer un environnement Node.js avec Docker
Créer un environnement Tomcat 8.5 avec Pleiades 4.8
Créez un environnement Docker + Laravel avec Laradock
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Jusqu'à ce que l'environnement docker soit créé et que le conteneur Ubuntu soit démarré et arrêté
[Probablement le plus simple] Développement d'applications WEB avec Apache Tomcat + Java Servlet
Construction de Rails 6 et environnement PostgreSQL avec Docker
Créer un environnement de développement PureScript avec Docker
Créez un environnement de développement d'applications Web qui utilise Java, MySQL et Redis avec Docker CE pour Windows
[Copier et coller] Créez un environnement de développement Laravel avec Docker Compose, partie 2
Créer un environnement de développement Wordpress avec Docker
Application Java CICS-Run - (2) Gestion de build avec Maven
[Docker] Construisez l'environnement d'exécution de Jupyter Lab avec Docker
Créer un environnement avec Docker sur AWS
Réduisez le temps de construction de Java / Maven avec Nexus 3 dans l'environnement DevOps OpenShift (okd 3.11)
Créer un environnement de vérification des opérations TensorFlow avec Docker
Installez Docker et créez un environnement d'exécution Java
Comment créer un environnement Rails 6 avec Docker
Rendre l'environnement SpringBoot1.5 + Gradle4.4 + Java8 + Docker compatible avec Java11
Présentation des tests Java automatisés avec JUnit 5 + Apache Maven
Créer un environnement Laravel / Docker avec VSCode devcontainer
Créez rapidement un environnement de développement WordPress avec Docker
Créez et testez des applications Java + Gradle avec Wercker
Créer un environnement de développement Apache / Tomcat sur Cent OS 7
Créer un environnement de test E2E avec Selenium (Java)
Créez des projets Spring Boot par environnement avec Gradle
Créer un environnement de développement pour Docker, Java, vs code
Créer un environnement mecab (dictionnaire NEologd) avec Docker (ubuntu)
[Rails] Comment créer un environnement avec Docker
Créer un environnement de développement Java avec VS Code
[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Création d'un environnement où kotlin peut être compilé avec cli avec docker et exécuté avec java
Créer un environnement de développement Java avec VS Code sur Mac
Comment créer un environnement Docker avec Gradle pour IntelliJ
Exécutez Maven sur Java 8 lors de la compilation sur Java 6 et des tests sur Java 11
Créez un environnement Ruby2.7.x + Rails6.0.x + MySQL8.0.x avec Docker
Recherche par requête POST avec Azure Search + Java Apache HttpClient
[Note] Créez un environnement Python3 avec Docker dans EC2