This is an automated email from the ASF dual-hosted git repository. gk pushed a commit to branch docker in repository https://gitbox.apache.org/repos/asf/turbine-archetypes.git
commit 2ea3eb50e310f38a355596adea0c4063a77b1154 Author: Georg Kallidis <[email protected]> AuthorDate: Mon Nov 26 16:47:44 2018 +0100 Update docu, fix app Dockerfile/docker-compose, add docker parameter --- README.md | 11 ++++++ .../META-INF/maven/archetype-metadata.xml | 5 ++- .../docker-resources/app/Dockerfile | 29 +++++---------- .../docker-resources/docker-compose.yml | 3 +- .../docker-resources/docker-info.md | 41 ++++++++++++++++------ src/main/resources/archetype-resources/pom.xml | 13 ++++--- .../resources/projects/first/archetype.properties | 1 + 7 files changed, 62 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index d05d8bc..2755d40 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,23 @@ These instructions will get you a copy of the project up and running on your loc ### Prerequisites +#### Host system installation * Java 8 JDK or later * [MySQl](https://www.mysql.com/) - Database Server * [Maven](https://maven.apache.org/) - Dependency Management You should have Java 8 or later installed. The archetype sets up a new application using MySQL as the default database store. However, you can adjust this to use any database supported by Apache Torque 4.0. Therefore, you should be at least have a database instance where you have access rights to create a new database schema and populate it with the tables the application generates. Finally, this is a maven archetype, so of course you should install a local version of Maven (tested wi [...] +#### Docker (alpha/experimental) + +Use docker to rapidly start development without Mysql installing on your local machine. It requires Java 8 and Maven in the hosting system (see above) and additionally + +* Docker version > 17 (Docker-Desktopm Windows) + +To install the Docker Archetype into the local repository, run + +* Run mvn clean install -Pdocker + ### Installing diff --git a/src/main/resources/META-INF/maven/archetype-metadata.xml b/src/main/resources/META-INF/maven/archetype-metadata.xml index 5b4c2dd..773abed 100644 --- a/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -54,9 +54,12 @@ <requiredProperty key="turbine_database_password"> <defaultValue>db_password</defaultValue> </requiredProperty> - <requiredProperty key="app_volume_local_repo"> + <requiredProperty key="app_volume_local_repo"> <defaultValue>${settings.localRepository}</defaultValue> </requiredProperty> + <requiredProperty key="docker"> + <defaultValue>false</defaultValue> + </requiredProperty> </requiredProperties> <fileSets> <fileSet filtered="true" packaged="true"> diff --git a/src/main/resources/archetype-resources/docker-resources/app/Dockerfile b/src/main/resources/archetype-resources/docker-resources/app/Dockerfile index 14cbcd4..2905c59 100644 --- a/src/main/resources/archetype-resources/docker-resources/app/Dockerfile +++ b/src/main/resources/archetype-resources/docker-resources/app/Dockerfile @@ -1,30 +1,17 @@ -FROM maven:3-jdk-8 +FROM maven:3-jdk-8 -ENV APP_ROOT /myapp +# cft hub.docker.com/r/library/maven +ADD ./docker-resources/app/settings.xml /usr/share/maven/ref/settings.xml # Set our working directory inside the image -RUN mkdir /myapp +ADD pom.xml /myapp/pom.xml +ADD src/ /myapp/src/ WORKDIR /myapp -# cft hub.docker.com/r/library/maven -COPY ./docker-resources/app/settings.xml /usr/share/maven/ref/ - -COPY pom.xml /myapp/pom.xml -COPY src/main/torque-schema/ /myapp/src/main/torque-schema/ -COPY src/main/webapp/ /myapp/src/main/webapp/ - -# builds app and runs commands connecting to mysql port 13306 -# CMD ["mvn clean install"] -# RUN mvn clean install & sleep 10 - -# copy generated target et al. -COPY . /myapp/ - -RUN sleep 5 +# build app outside docker, if you use snapshots +# RUN mvn -f /myapp/pom.xml clean package # do this not in build -# mvn jetty:run - - +# mvn jetty:run \ No newline at end of file diff --git a/src/main/resources/archetype-resources/docker-resources/docker-compose.yml b/src/main/resources/archetype-resources/docker-resources/docker-compose.yml index d5a84e1..65c24ce 100644 --- a/src/main/resources/archetype-resources/docker-resources/docker-compose.yml +++ b/src/main/resources/archetype-resources/docker-resources/docker-compose.yml @@ -9,8 +9,7 @@ services: dockerfile: ./docker-resources/app/Dockerfile # optional environment variable configuration for app # this runs the app server in the container - #command: mvn package jetty:run -Pdocker - command: mvn jetty:run + command: mvn clean package jetty:run -Pdocker ports: - "8081:8081" - "8080:8080" diff --git a/src/main/resources/archetype-resources/docker-resources/docker-info.md b/src/main/resources/archetype-resources/docker-resources/docker-info.md index c1b6239..297455c 100644 --- a/src/main/resources/archetype-resources/docker-resources/docker-info.md +++ b/src/main/resources/archetype-resources/docker-resources/docker-info.md @@ -14,13 +14,19 @@ Optional Cleanup ``` docker-compose down docker-compose down -v -docker system prune + docker volume rm $(docker volume ls -qf dangling=true) +docker system prune ``` Build Services ``` docker-compose build --no-cache --build-arg DB_CONTEXT=./docker-resources/db + + // build only app + // docker-compose build --no-cache app + // docker-compose build --no-cache --build-arg DB_CONTEXT=./docker-resources/db db + ``` DB_CONTEXT is set to allow starting the db container standalone (in folder db, e.g. with docker build --tag my-db .) to test it. @@ -29,29 +35,37 @@ Builds db, populates it with (hard coded data and prepares application. Start all services ``` docker-compose up + +// docker-compose up db ``` Jetty is run and exposes the webapp to http://localhost:80801/app +#Test Services: App, Database -#Test Database - -## start service +## Start service ``` -docker-compose up db -docker-compose run db /bin/sh --build-arg DB_CONTEXT=./docker-resources/db +docker-compose run --rm db /bin/sh --build-arg DB_CONTEXT=./docker-resources/db ``` -Extract data +Extract data in db-Service ``` - docker-compose exec db mysql -u root --password=... -e "show databases;" --build-arg DB_CONTEXT=./docker-resources/db - docker-compose exec db sh -c 'exec mysqldump --all-databases -uroot -p...' --build-arg DB_CONTEXT=./docker-resources/db > dump.sql // check mysql in service container db -# mysql -u root -h db -P 3306 -p + // # mysql -u root -h db -P 3306 -p + // docker-compose exec db mysql -u root --password=... -e "show databases;" --build-arg DB_CONTEXT=./docker-resources/db + // docker-compose exec db sh -c 'exec mysqldump --all-databases -uroot -p...' --build-arg DB_CONTEXT=./docker-resources/db > dump.sql ``` +- Service app +``` +docker-compose up app +docker-compose run --rm app /bin/sh +// ls -la /myapp // should list pom.xml ... +``` # Windows +## Powershell + - Replace backslashes to slashes in docker-compose.yml in localRepository - check COMPOSE_CONVERT_WINDOWS_PATHS, https://docs.docker.com/compose/reference/envvars/#compose_convert_windows_paths @@ -66,6 +80,13 @@ Extract data 1. docker rm $(docker ps -a -q) 2. Stop the Docker on your machine & restart it. +## Windows Subsystem for Linux (WSL) + +- Check file permissions of archetype generated files (chmod -R a+rw docker-resources, chmod -R a+rw src . + +- https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly + + Resetting / Preparation (optional) diff --git a/src/main/resources/archetype-resources/pom.xml b/src/main/resources/archetype-resources/pom.xml index c8aea05..e95882f 100644 --- a/src/main/resources/archetype-resources/pom.xml +++ b/src/main/resources/archetype-resources/pom.xml @@ -453,14 +453,13 @@ under the License. <profile> <id>docker</id> <activation> - <property> - <name>docker</name> - </property> - </activation> - <properties> + <activeByDefault>${docker}</activeByDefault> + </activation> + <properties> <turbine_database_url>jdbc:mysql://db:3306/</turbine_database_url> - <!-- to provide e.g. local snapshot builds --> - <app_volume_local_repo>#var("settings.localRepository")</app_volume_local_repo> + <!-- to provide e.g. local snapshot builds --> + <app_volume_local_repo>#var("settings.localRepository")</app_volume_local_repo> + <docker>true</docker> </properties> </profile> </profiles> diff --git a/src/test/resources/projects/first/archetype.properties b/src/test/resources/projects/first/archetype.properties index 1d7a742..a6065d1 100644 --- a/src/test/resources/projects/first/archetype.properties +++ b/src/test/resources/projects/first/archetype.properties @@ -13,3 +13,4 @@ turbine_database_url=${turbine_database_url} turbine_database_user=db_user turbine_database_password=db_password app_volume_local_repo=${app_volume_local_repo} +docker=${docker}
