Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1

Einführung

Derzeit ist das Ziel, eine Entwicklungsumgebung erstellen zu können, und wir zielen nicht auf Produktionsabläufe mit Docker ab.

Führen Sie tomcat8 im Docker der lokalen Entwicklungsumgebung aus. Das Ziel ist es, War for Webapp von IDE usw. bereitzustellen und den Betrieb zu überprüfen.

Darüber hinaus entfällt die Erläuterung der Installationsprozedur wie Docker für Mac, Docker-Befehl und Docker-Compose-Befehl, die für diese Vorgänge erforderlich sind.

Dieses Mal werden wir die folgenden zwei Dinge tun.

  1. Erstellen Sie eine Jollen-http-Proxy-Umgebung
  2. Führen Sie Tomcat in der Docker-Umgebung aus

Ich werde das nächste Mal die Bereitstellung von Web-Apps erläutern.

Erforderliche Pakete und Befehle

--docker für Mac (Anwendung) --docker-compose (Befehl) --Verwenden Sie es, da es bequem ist, verschiedene Parameter an den Docker-Container zu übergeben.

Versionsinformationen wurden bestätigt

docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true
docker-compose --version
docker-compose version 1.11.2, build dfed245

Erstellen Sie eine Jollen-http-Proxy-Umgebung

https://github.com/codekitchen/dinghy-http-proxy

Dies ist ein Reverse-Proxy- und DNS-Server für die Docker-Umgebung. Wenn Sie dies eingeben und festlegen, können Sie in der Docker-Umgebung unter der URL http: //tomcat.docker/ auf den Tomcat-Container zugreifen. Es ist leicht zu verstehen.

Starten Sie das Beiboot-http-Proxy

docker run -d --restart=always \
  -v /var/run/docker.sock:/tmp/docker.sock:ro \
  -v ~/.dinghy/certs:/etc/nginx/certs \
  -p 80:80 -p 443:443 -p 19322:19322/udp \
  -e DNS_IP=127.0.0.1 -e CONTAINER_NAME=http-proxy \
  --name http-proxy \
  codekitchen/dinghy-http-proxy

Überprüfen Sie, ob der Jollen-http-Proxy-Prozess auf Docker ps ausgeführt wird

docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                                                           NAMES
96067c3ea144        codekitchen/dinghy-http-proxy   "/app/docker-entry..."   47 seconds ago      Up 45 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 19322/tcp, 0.0.0.0:19322->19322/udp   http-proxy

Fügen Sie dem DNS-Resolver des Mac Einstellungen hinzu.

Erstellen Sie eine Datei mit dem Namen "Docker" in "/ etc / resolver /" und Bitte beschreiben Sie den folgenden Inhalt. Wenn nun eine Abfrage für die Docker-Domäne erfolgt, wird die Abfrage an den DNS-Server des Beiboot-http-Proxys gesendet.

nameserver 127.0.0.1
port 19322

Führen Sie PHP mit Docker aus und überprüfen Sie die Funktion von Jolle-http-Proxy.

docker run -it --name testphp --expose 80 --env VIRTUAL_HOST=testphp.docker php php -S 0.0.0.0:80

Versuchen Sie, mit Ihrem Browser auf testphp.docker zuzugreifen. Es ist in Ordnung, wenn das Protokoll auf der Konsole angezeigt wird.

PHP 7.1.3 Development Server started at Sat Apr 15 02:53:30 2017
Listening on http://0.0.0.0:80
Document root is /
Press Ctrl-C to quit.
[Sat Apr 15 02:53:44 2017] 172.17.0.2:40528 [404]: / - No such file or directory
[Sat Apr 15 02:53:45 2017] 172.17.0.2:40530 [404]: /favicon.ico - No such file or directory

Senden Sie nach der Überprüfung STRG-C an die Konsole, die PHP gestartet hat, um das Programm zu beenden.

Der zur Bestätigung verwendete Container ist ebenfalls nicht erforderlich. Löschen Sie ihn daher.

docker rm testphp 

Führen Sie Tomcat in einer Docker-Umgebung aus

Erstellen einer Docker-Compose-Datei

Erstellen Sie ein leeres Verzeichnis und erstellen Sie die folgende Datei docker-compose.yml.

docker-compose.yml


tomcat:
  image: tomcat:8.0-jre8
  ports:
    - "8000:8000"
    - "9090:9090"
  environment:
    VIRTUAL_HOST: tomcat.docker
    VIRTUAL_PORT: 8080
    CATALINA_OPTS: "-Dcom.sun.management.jmxremote
     -Dcom.sun.management.jmxremote.port=9090
     -Dcom.sun.management.jmxremote.rmi.port=9090
     -Dcom.sun.management.jmxremote.ssl=false
     -Dcom.sun.management.jmxremote.local.only=false
     -Dcom.sun.management.jmxremote.authenticate=false
     -Djava.rmi.server.hostname=tomcat.docker"
  command: catalina.sh jpda run

9090 ist der JMX-Verbindungsport. 8000 ist der Port zum Anschließen des Debuggers (JPDA). Da der 8080-Port über ein Beiboot-http-Proxy eine Verbindung herstellt, ist es nicht erforderlich, die Publizität in den Ports anzugeben.

Die Umgebungsvariablen VIRTUAL_HOST und VIRTUAL_PORT sind Einstellungen für Beiboot-http-Proxy. Jetzt, wenn Sie http: //tomcat.docker/ von Mac in Ihrem Browser öffnen Es stellt eine Verbindung zu Port 8080 des Docker-Containers her.

Starten Sie Tomcat mit Docker-Compose

Wechseln Sie in dasselbe Verzeichnis wie docker-compose.yml und führen Sie den folgenden Befehl aus, um den tomcat8-Container zu starten.

docker-compose up
Starting tomcat8docker_tomcat_1
Attaching to tomcat8docker_tomcat_1
tomcat_1  | Listening for transport dt_socket at address: 8000
tomcat_1  | 15-Apr-2017 03:39:25.168 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.0.43
tomcat_1  | 15-Apr-2017 03:39:25.173 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Mar 28 2017 14:42:59 UTC
tomcat_1  | 15-Apr-2017 03:39:25.174 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.0.43.0
tomcat_1  | 15-Apr-2017 03:39:25.175 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
tomcat_1  | 15-Apr-2017 03:39:25.175 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.9.13-moby
tomcat_1  | 15-Apr-2017 03:39:25.177 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
tomcat_1  | 15-Apr-2017 03:39:25.177 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-8-openjdk-amd64/jre
tomcat_1  | 15-Apr-2017 03:39:25.178 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_121-8u121-b13-1~bpo8+1-b13
tomcat_1  | 15-Apr-2017 03:39:25.182 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
tomcat_1  | 15-Apr-2017 03:39:25.182 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
tomcat_1  | 15-Apr-2017 03:39:25.183 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
tomcat_1  | 15-Apr-2017 03:39:25.190 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
tomcat_1  | 15-Apr-2017 03:39:25.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
tomcat_1  | 15-Apr-2017 03:39:25.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
tomcat_1  | 15-Apr-2017 03:39:25.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
tomcat_1  | 15-Apr-2017 03:39:25.196 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=n
tomcat_1  | 15-Apr-2017 03:39:25.197 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote
tomcat_1  | 15-Apr-2017 03:39:25.198 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=9090
tomcat_1  | 15-Apr-2017 03:39:25.200 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.rmi.port=9090
tomcat_1  | 15-Apr-2017 03:39:25.201 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
tomcat_1  | 15-Apr-2017 03:39:25.202 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.local.only=false
tomcat_1  | 15-Apr-2017 03:39:25.202 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.authenticate=false
tomcat_1  | 15-Apr-2017 03:39:25.204 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=tomcat.docker
tomcat_1  | 15-Apr-2017 03:39:25.205 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs=/usr/local/tomcat/endorsed
tomcat_1  | 15-Apr-2017 03:39:25.206 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
tomcat_1  | 15-Apr-2017 03:39:25.206 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
tomcat_1  | 15-Apr-2017 03:39:25.208 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
tomcat_1  | 15-Apr-2017 03:39:25.211 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.12 using APR version 1.5.1.
tomcat_1  | 15-Apr-2017 03:39:25.212 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
tomcat_1  | 15-Apr-2017 03:39:25.224 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.1.0e  16 Feb 2017)
tomcat_1  | 15-Apr-2017 03:39:25.402 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]
tomcat_1  | 15-Apr-2017 03:39:25.428 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-apr-8009"]
tomcat_1  | 15-Apr-2017 03:39:25.434 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 785 ms
tomcat_1  | 15-Apr-2017 03:39:25.494 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
tomcat_1  | 15-Apr-2017 03:39:25.504 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.43
tomcat_1  | 15-Apr-2017 03:39:25.527 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/host-manager
tomcat_1  | 15-Apr-2017 03:39:26.172 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/host-manager has finished in 645 ms
tomcat_1  | 15-Apr-2017 03:39:26.175 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/ROOT
tomcat_1  | 15-Apr-2017 03:39:26.227 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 52 ms
tomcat_1  | 15-Apr-2017 03:39:26.230 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/manager
tomcat_1  | 15-Apr-2017 03:39:26.293 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/manager has finished in 63 ms
tomcat_1  | 15-Apr-2017 03:39:26.294 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/docs
tomcat_1  | 15-Apr-2017 03:39:26.353 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/docs has finished in 60 ms
tomcat_1  | 15-Apr-2017 03:39:26.355 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/examples
tomcat_1  | 15-Apr-2017 03:39:26.700 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/examples has finished in 345 ms
tomcat_1  | 15-Apr-2017 03:39:26.707 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
tomcat_1  | 15-Apr-2017 03:39:26.728 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"]
tomcat_1  | 15-Apr-2017 03:39:26.752 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1317 ms

Versuchen Sie, die Tomcat-Seite anzuzeigen

Versuchen Sie, die folgende URL in Ihrem Browser anzuzeigen.

http://tomcat.docker/

Hast du die Tomcat-Begrüßungsseite gesehen?

スクリーンショット 2017-04-15 12.42.11.png

Versuchen Sie, eine Verbindung zu JMX herzustellen

jconsole tomcat.docker:9090

Haben Sie den Speicherauslastungsstatus mit jconsole überprüft?

jconsole2.png

jconsole1.png

In Bezug auf die JMX-Verbindung zu Tomcat, die im Docker-Container ausgeführt wird

Die folgenden zwei Systemeigenschaften sind wichtig:

Ich habe auf den folgenden Artikel verwiesen. http://d.hatena.ne.jp/Kazuhira/20141112/1415782056

com.sun.management.jmxremote.rmi.port

Die JMX-Remoteverbindung verwendet zwei Portnummern, von denen eine eine unbestimmte Portnummer hat. Wenn also eine Firewall usw. vorhanden ist, konnte vor dem Java7-Update4 keine Verbindung hergestellt werden.

Da Docker nur dann eine Verbindung herstellen kann, wenn Sie den Port explizit angeben und veröffentlichen, Geben Sie diese Eigenschaft an, um den für die JMX-Verbindung verwendeten Port zu reparieren, und dann Sie müssen diesen Port zuordnen und auf der Mac-Seite verfügbar machen.

Ich habe auf den folgenden Artikel verwiesen. http://tech.furyu.jp/blog/?p=3467

java.rmi.server.hostname

https://ptmccarthy.github.io/2014/07/24/remote-jmx-with-docker/

Und

https://forums.docker.com/t/enable-jmx-rmi-access-to-a-docker-container/625

Entsprechend der Systemeigenschaft java.rmi.server.hostname beim JavaVM-Start Es scheint, dass Sie die IP-Adresse des Dockers in setzen sollten.

In diesem Fall ist es in Ordnung, wenn Sie "127.0.0.1" angeben, da Docker auf dem lokalen Computer ausgeführt wird. Selbst wenn Sie "tomcat.docker" angeben, wird es per DNS-Abfrage in 127.0.0.1 konvertiert, sodass beide in Ordnung zu sein scheinen.

Recommended Posts

Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Erstellen Sie mit Docker CE für Windows eine Webanwendungsentwicklungsumgebung, die Java, MySQL und Redis verwendet
[Für Anfänger] Bis zum Erstellen einer Webanwendungsentwicklungsumgebung mit Java unter Mac OS
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
Erstellen Sie eine Entwicklungsumgebung für Docker, Java und Code
Erstellen einer Java-Entwicklungsumgebung (für Mac)
Erstellung einer Webanwendungsentwicklungsumgebung in Java (für unerfahrene Personen)
Erstellung einer Java-Webanwendungsentwicklungsumgebung mit VS-Code (struts2)
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie eine Java-Entwicklungsumgebung auf dem Mac
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
[Kopieren und Einfügen] Erstellen Sie mit Docker Compose Part 2 eine Laravel-Entwicklungsumgebung
Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Mac-Version).
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
# 1 [Anfänger] Erstellen Sie eine Webanwendung (Website) mit Eclipse aus Wissen 0. "Lassen Sie uns eine Umgebung zum Erstellen von Web-Apps erstellen"
Erstellen Sie eine Java-Entwicklungsumgebung mit jenv auf Ihrem Mac
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code auf dem Mac
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Erstellen einer kompakten Java-Umgebung, die unter Docker ausgeführt wird
Java-Entwicklungsumgebung (Mac, Eclipse)
Mit Docker erstellte Webanwendung (1)
Docker x Java Erstellen einer zu einfachen Entwicklungsumgebung
Bereitstellen einer Java-Umgebung mit Windows Subsystem für Linux (WSL)
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Einführung von Spring Boot2, einem Java-Framework für die Webentwicklung (für Anfänger)
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie mit Docker eine Node.js-Umgebung
Umgebungskonstruktion für die Entwicklung von Servlet-Anwendungen
Umgebungsbau mit Docker für Anfänger
Bereiten Sie die Java-Entwicklungsumgebung mit Atom vor
Erstellen Sie eine Webanwendung mit Javalin
[Java & SpringBoot] Umgebungskonstruktion für Mac
Java-Entwicklungsumgebung (Mac, VS Code)
Installieren Sie die Java-Entwicklungsumgebung auf dem Mac
Vergleich der WEB-Anwendungsentwicklung mit Rails und Java Servlet + JSP
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
[Wahrscheinlich die einfachste] WEB-Anwendungsentwicklung mit Apache Tomcat + Java Servlet
AWS Elastic Beanstalk # 1 mit Java von Grund auf neu Erstellen einer Java-Webanwendungsumgebung mit EB CLI-