Skip to content

Latest commit

 

History

History
101 lines (76 loc) · 4.56 KB

docker-compose.asciidoc

File metadata and controls

101 lines (76 loc) · 4.56 KB

Containerization

In this exercise we will launch our application in a container. For this we have to build the image, deploy it in Rancher Desktop and update it when we change something in our application.

Get to know Docker and Rancher Desktop

  • Run in a CLI docker images. What do you see?

  • Check in CLI if docker containers are running. What do you see?

  • Build our application with maven and package it

  • Create a docker file describing the image for our application

  • Add the container description to the docker-compose file

Docker Compose

Now, we will containerize our application. We will learn how to run docker compose with postgres, our application and keycloak as well how to navigate inside of a container.

Running with docker

Note
The following docker commands need to be executed inside the backend sub-folder of your java-quarkus project. However, the docker-compose commands need to be run directly in the top-level java-quarkus project folder.

Familiarize yourself with the structure of Dockerfile.jvm and docker-compose.yaml

First create a separate network for the database and app by running: : docker network create --driver bridge quarkus

  • Start database container:

    docker pull postgres
    docker run --name myPostgresDb -p 5432:5432 --net=quarkus -e POSTGRES_USER=quarkus -e POSTGRES_PASSWORD=quarkus -e POSTGRES_DB=quarkus-db -d postgres
  • Build and start the application:

    mvn package
    docker build -f src/main/docker/Dockerfile.jvm -t quarkus/backend .
    docker run -i --rm -p 8080:8080 --net=quarkus quarkus/backend
  • Check created containers running docker ps

Run docker compose

To run the containers you had to execute many commands. It would be easier if we only had to execute one command. We can achieve this by using Docker Compose.

Running Docker compose

Docker Compose works by applying many rules declared within a single docker-compose.yml configuration file.

  • Start application by running docker-compose up -d

    With this command we started container for our backend app, database and keycloak. This images are defined as services in docker compose. A volume is a shared directory in the host, visible from some or all containers. Similarly, networks define the communication rules between containers, and between a container and the host. The option -d starts the containers in the background (as daemon). Otherwise (without -d) your terminal will get blocked and if your enter [Ctrl][c] the containers will be terminated.

  • To list all build images run docker-compose images

  • Run this command to see that the containers arte up and running docker-compose ps

Note
If you want to stop what you have started with docker-compose, you can run docker-compose down. In case you use docker-compose down -v then all volumes will be discarded (so your state with database, etc is thrown away). That can be helpful, if you changed flyway SQL scripts during development and DDL migration will fail otherwise.
Access the database

Now we will access Postgres using psql.

  • Connect to Postgres with this command docker exec -it <name of your db container> bash

Now you are ‘inside’ your container.

  • Connect to our quarkus database:

    psql -h localhost -p 5432 -U <name of db user> -W

  • List all available databases inside of your container with \l

  • List all tables that were created with \dt, press "Enter" to show more tables.

Access keycloak

Keycloak is an open source identity and access management solution which mainly aims at applications and services. Users can authenticate with Keycloak rather than individual applications. So, the applications don’t have to deal with login forms, authenticating users and storing users.

  • Access Keycloak bei call the URL localhost:<keycloak port from docker compose>

  • Go to "Administration Console" and enter the user login data from docker compose

  • Navigate to users > view all users. Here you can see your admin-user.

Stop services with Docker compose
  • To safely stop the active services, we can use stop, which will preserve containers, volumes, and networks, along with every modification made to them docker-compose stop

  • To reset the status of our project, we can simply run down, which will destroy everything with the exception of external volumes docker-compose down