Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abdulhadad/91c2f2226094170c0d1be66c9e409916 to your computer and use it in GitHub Desktop.
Save abdulhadad/91c2f2226094170c0d1be66c9e409916 to your computer and use it in GitHub Desktop.
temp_springapp_docker-compose_docker-machine.md

software kebutuhan

git

git --version git config --global user.name "Nama Saya" git config --global user.email "nama.saya@gmail.com"

java jdk 8, dibutuhkan gradle

java -version javac -version

gradle

gradle --version

docker

docker version docker info

docker machine

docker-machine version

docker compose

docker-compose version

virtualbox, dibutuhkan docker machine

VirtualBox --help

software kebutuhan di opensuse

git

zypper in git

virtualbox

zypper in virtualbox

mongodb

zypper in mongodb systemctl start mongodb systemctl stop mongodb ss -plntu # atau netstat -plntu mongo

use admin
db.createUser({user:"admin", pwd:"R@has14iz3", roles:[{role:"root", db:"admin"}]})
show dbs

mongo -u admin -p R@has14iz3 --authenticationDatabase admin

show dbs

docker

zypper in docker

docker compose

zypper install python3-docker-compose

docker machine

curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-Linux-x86_64 > docker-machine-Linux-x86_64-v0.14.0 sudo install docker-machine-Linux-x86_64-v0.14.0 /usr/local/bin/docker-machine

java jdk 8

zypper install java-1_8_0-openjdk-devel update-alternative --all # pilih jdk 8 untuk java, javac, jdk ...

tomcat

zypper install tomcat tomcat-webapps tomcat-docs-webapp tomcat-admin-webapps

gradle

curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" sdk version sdk install gradle 4.8.1 exit terminal, buka terminal lagi

buat project

mkdir DockerSpringApp cd DockerSpringApp

docker compose source

git clone https://github.com/garystafford/spring-music-docker music cd music git checkout docker_v2 cd ..

docker

git clone https://github.com/garystafford/spring-music cd spring-music git checkout springmusic_v2 cd ..

Analisa code

buka editor, vscode

code .

konfigurasi docker compose

music/docker-compose.yml berisi informasi port forwarding docker, image docker, volume docker yang digunakan, link ke beberapa konfigurasi docker

konfigurasi docker mongodb

music/mongodb/Dockerfile berisi informasi image docker mongodb, database yang digunakan di aplikasi

konfigurasi docker nginx

music/nginx/Dockerfile berisi informasi image docker nginx, web server dan reverse proxy, digunakan untuk menjembatani aplikasi tomcat java spring ke web server

konfigurasi docker tomcat

music/tomcat/Dockerfile berisi informasi image docker tomcat, server aplikasi spring java yang digunakan

konfgurasi build aplikasi mengunakan gradle

music/spring-music/build.gradle

konfigurasi nginx

music/nginx/default.conf berisi konfigurasi web server dan konfigurasi reverse proxy dan load balancing dari server tomcat ke web server konfigurasi revese proxy dengan tiga instance tomcat container ada di bagian "upstream backend {"

sebelum jalankan ubah

  • resources\config.properties
...
mongodb.username=admin
mongodb.password=R@has14iz3
mongodb.authdb=admin
  • org.cloudfoundry.samples.music.config.data.MongoConfig:
...
import java.util.Arrays;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
...
    @Value("${mongodb.username}")
    private String mongoUsername;

    @Value("${mongodb.password}")
    private String mongoPassword;

    @Value("${mongodb.authdb}")
    private String mongoAuthDatabase;
...
        // credential
        MongoCredential credential = MongoCredential.createCredential(mongoUsername, mongoAuthDatabase, mongoPassword.toCharArray());
        // server
        ServerAddress serverAddress = new ServerAddress(mongoUrl, mongoPort);
        MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential));
        return new SimpleMongoDbFactory(mongoClient, mongoDatabase);

jalankan di local dengan gradle

gradle clean build tomcatRun -Dspring.profiles.active=mongodb -Dmongodb.url=127.0.0.1 browser http://localhost:8080/spring-music

jalankan di local, opensuse

ubah url resources\config.properties

mongodb.url=127.0.0.1

Build aplikasi untuk local

cd DockerSpringApp/spring-music gradle clean build gradle warNoStatic warCopy zipGetVersion zipStatic cd ..

copy aplikasi dan konfigurasi ke tomcat

cd DockerSpringApp/ sudo rpm -ql tomcat | grep tomcat-users sudo mv /etc/tomcat/tomcat-users.xml /etc/tomcat/tomcat-users.xml.old sudo cp music/tomcat/tomcat-users.xml /etc/tomcat/tomcat-users.xml

sudo rpm -ql tomcat-webapps # dapatkan drektory webapps, /srv/tomcat/webapps sudo mv /srv/tomcat/webapps/ROOT/ /srv/tomcat/webapps/_ROOT # backup sudo cp spring-music/build/distributions/spring-music.war /srv/tomcat/webapps/ROOT.war

sudo systemctl start tomcat # jalankan sudo tail -f /var/log/tomcat/catalina.out sudo systemctl stop tomcat # stop

jalankan di local, tomcat ekstraks

ubah url resources\config.properties

mongodb.url=127.0.0.1

copy aplikasi dan konfigurasi ke tomcat, tomcat non distro

cd DockerSpringApp/ extraks tomcat ke ~/apache-tomcat-9.0.10 tar zxvf ~/Downloads/apache-tomcat-9.0.10.tar.gz -C / TOMCAT_DIR=/apache-tomcat-9.0.10 mv $TOMCAT_DIR/conf/tomcat-users.xml $TOMCAT_DIR/conf/tomcat-users.xml.old cp music/tomcat/tomcat-users.xml $TOMCAT_DIR/conf/tomcat-users.xml

mv $TOMCAT_DIR/webapps/ROOT $TOMCAT_DIR/webapps/_ROOT # backup cp spring-music/build/libs/spring-music.war $TOMCAT_DIR/webapps/ROOT.war

#cp spring-music/build/distributions/spring-music.war $TOMCAT_DIR/webapps/ROOT.war

$TOMCAT_DIR/bin/startup.sh tail -f $TOMCAT_DIR/logs/catalina.out mkdir -p $TOMCAT_DIR/webapps/ROOT/assets #unzip spring-music/build/distributions/spring-music-static.zip -d $TOMCAT_DIR/webapps/ROOT/assets $TOMCAT_DIR/bin/shutdown.sh

jalankan static file di nginx

pasang nginx

zypper in nginx /usr/sbin/nginx -t -c /home/gk/Documents/Projects/DockerSpringApp/music/nginx/default.conf

Pull image docker yang digunakan

image docker mongodb

docker pull mongo:latest

image docker nginx

docker pull nginx:latest

image docker tomcat

docker pull tomcat:8.5.4-jre8

image ELK Stack, untuk monitoring log

docker pull sebp/elk:latest

siapkan instance docker machine springmusic

docker-machine create --driver virtualbox springmusic atau offline dengan iso yang sudah ada/di-download docker-machine create --driver virtualbox --virtualbox-boot2docker-url file://$HOME/Downloads/boot2docker.iso springmusic

iso di-download dengan alamat

url https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso

set env docker ke docker machine springmusic

docker-machine env springmusic && eval "$(docker-machine env springmusic)"

docker compose mongo pakai password

environment:
  MONGO_INITDB_ROOT_USERNAME: admin
  MONGO_INITDB_ROOT_PASSWORD: R@has14iz3

siapkan docker volume music_data dan music_elk

docker volume create --name music_data docker volume create --name music_elk docker volume ls # melihat docker volume yang dibuat

siapkan docker network

docker network create -d bridge music_net # tidak usah dicreate juga bisa docker network ls

save images yang diperlukan

docker save -o springmusic.tar
mongo:latest
nginx:latest
tomcat:8.5.4-jre8
sebp/elk:latest

lood image ke docker-machine

eval $(docker-machine env springmusic) docker load -i springmusic.tar docker images

jalankan di lingkugan docker-compose

cd DockerSpringApp/music/ eval $(docker-machine env springmusic) docker-compose -p music up -d elk && sleep 15
&& docker-compose -p music up -d mongodb && sleep 15
&& docker-compose -p music up -d app
&& docker-compose scale app=3 && sleep 15
&& docker-compose -p music up -d proxy && sleep 15 ganti ke docker-compose -p music up -d elk && sleep 15
&& docker-compose -p music up -d mongodb && sleep 15
&& docker-compose -p music up -d app --scale 3 && sleep 15
&& docker-compose -p music up -d proxy && sleep 15 docker-machine ip springmusic

error di elk

tidak bisa browsing elk ternyata containernya langsung stop ketika dipanggil localhost:9200 atau host:9200 docker exec -ti elk /bin/bash

mongodb ok

di test pakai mongodb-compass

remove

docker-compose stop docker-compose rm -v docker-compose down # hapus container dan network docker-compose down --volumes # hapus container dan network dan volume docker volume rm music_data docker volume rm music_elk

check running

ss -lntu netstat -lntu cat /etc/services

test web apps

Spring Music Application: 192.168.99.100 NGINX Status: 192.168.99.100/nginx_status Tomcat Web Console – music_app_1*: 192.168.99.100:32771/manager Environment Variables – music_app_1: 192.168.99.100:32771/env Album List (RESTful endpoint) – music_app_1: 192.168.99.100:32771/albums Elasticsearch Info: 192.168.99.100:9200 Elasticsearch Status: 192.168.99.100:9200/_status?pretty Kibana Web Console: 192.168.99.100:5601

Test image docker

test tomcat

docker run -it --rm tomcat:8.5.4-jre8 # http://container-ip:8080/ # ip contaner docker inspect | grep "IPAddress" docker run -it -p 8888:8080 --rm tomcat:8.5.4-jre8 # http://host-ip:8080/ docker exec -ti %container-name-or-id% /bin/bash

test mongo

docker run --name some-mongo -d mongo:tag docker run -it --link some-mongo:mongo --rm mongo mongo --host mongo test

catatan training

penginstalan dasar

  • pasang docker
  • pasang jdk
  • pasang gradle dengan sdkman
  • pasang virtualbox
  • pasang git
  • cek jdk terinstall
  • cek gradle terinstall
  • cek docker terinstall
  • cek git terinstall dan konfigurasi git

docker playground

  • cari image tomcat di docker hub
  • penjeasan dockerhub terkait pull, halaman depan dan halaman tag
  • cek ukuran images di dockerhub
  • pull image tomcat, tag standar dan bisa custom tag
  • lihat docker yang sudah di pull
  • coba run image tomcat tidak pakai port binding dan pakai port binding
  • pull dan run image hello
  • lihat container yang running, container yang di stop
  • cek ip container
  • arsitektur docker, hubungan antara container ke host
  • perbedaan antara docker di host langsung dan yang pakai docker vm
  • cek storage docker di fisik
  • lihat container yang lagi jalan, container id dan container name
  • save image, hapus images, load has save image, save container
  • pengertian devops
  • pengertian docker compose, penamaan running contaner, scale container, parameter container

Referensi

Artikel Asal https://programmaticponderings.com/2016/08/07/spring-music-revisited-java-spring-mongodb-web-app-with-docker-1-12/ Git https://git-scm.com/ Java JDK http://www.oracle.com/technetwork/java/javase/overview/index.html Gradle https://gradle.org/ Docker https://www.docker.com/ Docker Machine https://github.com/docker/machine Docker Compose https://github.com/docker/compose Virtualbox https://www.virtualbox.org/ Image Docker MongoDB https://hub.docker.com/_/mongo/ Image Docker NGinx https://hub.docker.com/_/nginx/ Image Docker Apache Tomcat https://hub.docker.com/_/tomcat/ Image Docker ELK Sebp https://hub.docker.com/r/sebp/elk/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment