Erstellen Sie mit Docker eine Apache- und Tomcat-Umgebung. Übrigens Maven & Java Kooperation

Überblick

Ich möchte eine Webanwendung mit Java erstellen, also werde ich versuchen, die lokale Umgebung durcheinander zu bringen! !! Ich möchte nicht von der IDE abhängig sein, daher werde ich mein Bestes tun, um eine Umgebung auf Befehlsbasis zu erstellen (tsu ・ Д ・).

Die resultierende Umgebung

Erstellen Sie eine Docker-Umgebung

Erstellen Sie jeden Container und hängen Sie ihn am Ende mit docker-compose.yml an. Vorerst möchte ich etwas machen, das zumindest funktioniert, und es in Zukunft anpassen!

Erstellen Sie einen Apache-Container

Ich persönlich möchte Apache auf Centos studieren, also installiere es und erstelle ein 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

Erstellen Sie einen Tomcat-Container

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>

Damit Tomcat Manager auf einem anderen als dem Hostnamen localhost ausgeführt werden kann. Weitere Informationen finden Sie unter This stackOverFlow.

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>

Link mit 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: {}

Versuche dich zu bewegen

zsh


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

Nachdem Sie bestätigt haben, dass der Container gestartet wurde, klicken Sie auf die unten stehende URL, um die Tomcat-Startseite anzuzeigen. http://localhost/

Wenn es nicht funktioniert, überprüfen Sie das Zugriffsprotokoll des httpd- oder Tomcat-Containers, um festzustellen, wie weit Sie erreicht haben.

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

Erstellen Sie eine Java-Anwendung mit Maven

Installieren Sie Maven

zsh


brew install maven
mvn -v

Erstellen Sie mit Maven ein Projekt (Vorlage)

zsh


mvn archetype:generate \ #Projekterstellung
-DgroupId=tech.ucwork \ #Spezifikation des Paketnamens
-DartifactId=myapp \ #Geben Sie den Anwendungsnamen an
-DarchetypeArtifactId=maven-archetype-webapp #Erste Spezifikation des Anwendungsformats (Web)
-DinteractiveMode=false #Laufen Sie nicht interaktiv

Hallo Welt Anzeige in Java

Verzeichnisaufbau

Ich habe vergessen, auf welche Site ich verwiesen habe, aber ich werde eine solche Datei erstellen

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

Java-Datei

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

Build & Package mit Maven

Lass pom.xml so aussehen und führe Befehle aus!

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, die mit maven kompiliert werden-->
    <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 zum Erweitern von Kriegsdateien von Maven zu Tomcat-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <path>/app</path><!--Datei (Verzeichnisname), die unter Webanwendungen erweitert werden soll-->
          <server>tomcat-localhost</server>
          <url>http://localhost/manager/text</url>
        </configuration>
      </plugin>
    </plugins>
  </build> 
</project>

zsh


mvn clean package

Bereitstellung in Tomcat

Mit Maven auf Tomcat bereitstellen

~~ Realisiert durch Bezugnahme auf diese Site. ~~

~~ Ich bin gegen eine Wand gestoßen, aber dieser stackOverFlow Gelöst ~~

Stellen Sie die Kriegsdatei für Tomcat bereit

Wenn Sie darüber nachdenken, war es aus den folgenden Gründen einfacher als die Verwendung von Maven. (Ich war besorgt darüber ...)

  1. Ich weiß nicht, wie ich bei der Bereitstellung der Manager-Funktion über http auf alle Tomcats werfen soll, wenn mehrere Tomcats konfiguriert sind.
  2. Wie wäre es überhaupt mit der Bereitstellung über einen Browser? Obwohl es grundlegende Zertifizierungen gibt
  3. Die Theorie, dass es durch Anhängen einer Kriegsdatei unter {TOMCAT_HOME} / webapps / bereitgestellt werden könnte

zsh


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

Referenz) Grundlagen von Maven

TODO

Tomcat-Anfangseinstellung bezogen (Löschen vorhandener Dateien und Einstellungen wie Protokolle)

Ich möchte diese Site als Referenz festlegen

Lastverteilung und Sitzungsverwaltung in der Apache- und Tomcat-Clusterkonfiguration

Ich möchte es hier verweisen

Verschiedene Einstellungen Tuning von Tomcat

Grundlagen verschiedener Einstellungsdateien Detaillierte Einstellungen Details zum Thread-Pool

Recommended Posts

Erstellen Sie mit Docker eine Apache- und Tomcat-Umgebung. Übrigens Maven & Java Kooperation
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Bereiten Sie die Umgebung für Java11 und JavaFx mit Ubuntu 18.4 vor
Erstellen einer Docker-Umgebung mit WSL
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Erstellen Sie mit Docker eine Node.js-Umgebung
Erstellen Sie mit Pleiades 4.8 eine Tomcat 8.5-Umgebung
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Bis die Docker-Umgebung erstellt und der Ubuntu-Container gestartet und gestoppt wurde
[Wahrscheinlich die einfachste] WEB-Anwendungsentwicklung mit Apache Tomcat + Java Servlet
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker CE für Windows eine Webanwendungsentwicklungsumgebung, die Java, MySQL und Redis verwendet
[Kopieren und Einfügen] Erstellen Sie mit Docker Compose Part 2 eine Laravel-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
CICS-Java-Anwendung ausführen- (2) Build-Management mit Maven
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker
Erstellen Sie eine Umgebung mit Docker unter AWS
Reduzieren Sie die Java / Maven-Erstellungszeit mit Nexus 3 in der OpenShift (okd 3.11) DevOps-Umgebung
Erstellen Sie mit Docker eine TensorFlow-Betriebsüberprüfungsumgebung
Installieren Sie Docker und erstellen Sie eine Java-Ausführungsumgebung
So erstellen Sie eine Rails 6-Umgebung mit Docker
Machen Sie die SpringBoot1.5 + Gradle4.4 + Java8 + Docker-Umgebung mit Java11 kompatibel
Einführung automatisierter Java-Tests mit JUnit 5 + Apache Maven
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
Erstellen Sie eine Apache / Tomcat-Entwicklungsumgebung unter Cent OS 7
Erstellen Sie eine E2E-Testumgebung mit Selenium (Java).
Erstellen Sie mit Gradle Spring Boot-Projekte nach Umgebung
Erstellen Sie eine Entwicklungsumgebung für Docker, Java und Code
Erstellen Sie mit Docker (Ubuntu) eine Mecab-Umgebung (NEologd Dictionary).
[Rails] So erstellen Sie eine Umgebung mit Docker
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Erstellt eine Umgebung, in der Kotlin mit Docker mit CLI kompiliert und mit Java ausgeführt werden kann
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code auf dem Mac
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Führen Sie Maven unter Java 8 aus, während Sie unter Java 6 kompilieren und unter Java 11 testen
Erstellen Sie mit Docker eine Ruby2.7.x + Rails6.0.x + MySQL8.0.x-Umgebung
Suche nach POST-Anforderung mit Azure Search + Java Apache HttpClient
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2