Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1

introduction

Pour le moment, le but est de pouvoir créer un environnement de développement, pas au point d'opération de production à l'aide de docker.

Plus précisément, exécutez tomcat8 sur le docker de l'environnement de développement local, Le but est de déployer war for webapp à partir de l'IDE, etc. et de vérifier le fonctionnement.

De plus, l'explication de la procédure d'installation telle que docker pour mac, commande docker, commande docker-compose requise pour ces opérations est omise.

Cette fois, nous ferons les deux choses suivantes.

  1. Créez un environnement dinghy-http-proxy
  2. Exécutez tomcat dans l'environnement docker

Je vous expliquerai comment déployer des applications Web la prochaine fois.

Packages et commandes requis

--docker pour mac (application) --docker-compose (commande)

Informations de version confirmées comme fonctionnant

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

Créer un environnement dinghy-http-proxy

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

Il s'agit d'un proxy inverse et d'un serveur DNS pour l'environnement docker. Si vous le mettez et le définissez, vous pourrez accéder au conteneur tomcat dans l'environnement docker avec l'URL http: //tomcat.docker/. C'est facile à comprendre.

Démarrer dinghy-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

Vérifiez que le processus dinghy-http-proxy est en cours d'exécution sur docker ps

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

Ajoutez des paramètres au résolveur DNS du mac.

Créez un fichier nommé "docker" dans / etc / resolver / et Veuillez décrire le contenu suivant. Désormais, lorsqu'il y a une requête pour le domaine docker, la requête sera envoyée au serveur DNS de dinghy-http-proxy.

nameserver 127.0.0.1
port 19322

Exécutez php avec docker et vérifiez le fonctionnement de dinghy-http-proxy.

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

Essayez d'accéder à testphp.docker avec votre navigateur, C'est OK si le journal apparaît sur la console.

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

Après vérification, envoyez CTRL-C à la console qui a démarré php pour quitter.

Le conteneur utilisé pour la confirmation est également inutile, supprimez-le.

docker rm testphp 

Exécutez tomcat dans l'environnement docker

Création d'un fichier docker-compose

Créez un répertoire vide et créez-y le fichier docker-compose.yml suivant.

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 est le port pour la connexion JMX, 8000 est le port pour connecter le débogueur (JPDA). Comme le port 8080 se connecte via dinghy-http-proxy, il n'est pas nécessaire de spécifier la publicité dans les ports.

Les variables d'environnement VIRTUAL_HOST et VIRTUAL_PORT sont des paramètres pour dinghy-http-proxy. Maintenant, lorsque vous ouvrez http: //tomcat.docker/ à partir de mac dans votre navigateur Il se connecte au port 8080 du conteneur docker.

Démarrez Tomcat avec docker-compose

Accédez au même répertoire que docker-compose.yml et exécutez la commande suivante pour démarrer le conteneur tomcat8.

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

Essayez d'afficher la page tomcat

Essayez d'afficher l'URL suivante dans votre navigateur.

http://tomcat.docker/

Avez-vous vu la page d'accueil de Tomcat?

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

Essayez de vous connecter à JMX

jconsole tomcat.docker:9090

Avez-vous vérifié l'état d'utilisation de la mémoire avec jconsole?

jconsole2.png

jconsole1.png

Concernant la connexion JMX à tomcat fonctionnant dans le conteneur docker

Les deux propriétés système suivantes sont importantes:

J'ai fait référence à l'article suivant. http://d.hatena.ne.jp/Kazuhira/20141112/1415782056

com.sun.management.jmxremote.rmi.port

La connexion à distance JMX utilise deux numéros de port, et l'un d'eux a un numéro de port indéfini, donc s'il y a un pare-feu, etc., il n'était pas possible de se connecter avant java7 update4.

Étant donné que docker ne peut pas se connecter sauf si vous spécifiez explicitement le port et le publiez, Spécifiez cette propriété pour corriger le port utilisé pour la connexion JMX, puis Vous devez mapper ce port et l'exposer du côté mac.

J'ai fait référence à l'article suivant. http://tech.furyu.jp/blog/?p=3467

java.rmi.server.hostname

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

Et

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

Selon la propriété système java.rmi.server.hostname au démarrage de JavaVM Il semble que vous deviez définir l'adresse IP du docker dans.

Dans ce cas, puisque le docker est en cours d'exécution sur la machine locale, c'est OK si vous spécifiez 127.0.0.1, Même si vous spécifiez tomcat.docker, il sera converti en 127.0.0.1 par requête DNS, il semble donc que l'un ou l'autre convienne.

Recommended Posts

Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
Créez un environnement de développement d'applications Web qui utilise Java, MySQL et Redis avec Docker CE pour Windows
[Pour les débutants] Jusqu'à la création d'un environnement de développement d'applications Web utilisant Java sur Mac OS
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
Créer un environnement de développement pour Docker, Java, vs code
Création d'un environnement de développement Java (pour Mac)
Construction d'environnement de développement d'applications Web en Java (pour les personnes inexpérimentées)
Construction d'environnement de développement d'applications Web Java avec VS Code (struts2)
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Construction de l'environnement de développement Laravel avec Docker (Mac)
Créer un environnement de développement PureScript avec Docker
Créer un environnement de développement Java sur Mac
Créer un environnement de développement Wordpress avec Docker
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Créer un environnement de développement pour Docker + Rails6 + Postgresql
[Copier et coller] Créez un environnement de développement Laravel avec Docker Compose, partie 2
Créez un environnement de développement local pour les didacticiels Rails avec Docker (Rails 6 + PostgreSQL + Webpack)
Préparer un environnement de scraping avec Docker et Java
Modèle: créer un environnement de développement Ruby / Rails avec un conteneur Docker (version Mac)
Créer un environnement de développement Spring Boot avec docker
Créer un environnement de développement Java avec VS Code
# 1 [Débutant] Créez une application Web (site Web) avec Eclipse à partir de la connaissance 0. "Construisons un environnement pour créer des applications Web"
Créez un environnement de développement Java à l'aide de jenv sur votre Mac
Créer un environnement de développement Java avec VS Code sur Mac
[Note] Créez un environnement Java à partir de zéro avec docker
Essayez de créer un environnement de développement Java à l'aide de Docker
Création d'un environnement Java léger qui s'exécute sur Docker
Environnement de développement Java (Mac, Eclipse)
Application Web construite avec docker (1)
Docker x Java Construire un environnement de développement trop simple
Déploiement d'un environnement Java avec le sous-système Windows pour Linux (WSL)
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
Jusqu'à ce que vous créiez une application Web avec Servlet / JSP (Partie 1)
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Présentation de Spring Boot2, un framework Java pour le développement Web (pour les débutants)
J'ai essayé de créer un environnement de développement padrino avec Docker
Créez un environnement Vue3 avec Docker!
Créer un environnement Node.js avec Docker
Construction d'environnement pour le développement d'applications Servlet
Construction d'environnement avec Docker pour les débutants
Préparer l'environnement de développement Java avec Atom
Créer une application Web avec Javalin
[Java & SpringBoot] Construction de l'environnement pour Mac
Environnement de développement Java (Mac, VS Code)
Installer l'environnement de développement Java sur Mac
Comparaison du développement d'applications WEB avec Rails et Java Servlet + JSP
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application Web de gestion de livres avec Spring Boot part2
[Probablement le plus simple] Développement d'applications WEB avec Apache Tomcat + Java Servlet
AWS Elastic Beanstalk # 1 avec Java à partir de zéro - Création d'un environnement d'application Web Java à l'aide de l'interface de ligne de commande EB-