This is an old revision of the document!
01. [00p] Running a multi-container application
Subtasks
based on the sources and the Dockerfile in the api folder from the lab archive, build an image with the name api-lab4-image
create a bridge network called lab4-db-network
create another bridge network called lab4-adminer-network
create a volume named lab4-db-volume
launch a container in the background for a database with the following features:
a bind mount will be attached that will map between the ./database/init-db.sql file on the local machine (this will be the source to the bind mount flag and can be found in the lab archive) and the /docker-entrypoint-initdb.d/init-db.sql file in the container to be run (this will be the destination)
attach the previously-created lab4-db-volume volume (as source) to the /var/lib/postgresql/data path in the running container (as destination)
the container will be part the previously-created lab4-db-network and lab4-adminer-network networks
the following environment variables will be specified (in a docker run command, this is done as follows: docker run -e NAME=value):
environment variable POSTGRES_USER with value admin
environment variable POSTGRES_PASSWORD with value admin
environment variable POSTGRES_DB with value books
the container you run will be called lab4-db
you will run the postgres image from the official register
Start a container with the previously created image api-laborator-1-image in the background, with the following features:
the container will run on the previously created laboratory1-db-network network
the following environmental variables will be specified:
variable PGUSER with value admin
variable PGPASSWORD with value admin
variable PGDATABASE with the value books
variable PGHOST with value laboratory1-db
variable PGPORT with value 5432
the rolled container will be called laborator1-api
the container will display port 80 and map it to port 5555 on the local machine.
Check that the two containers are running properly and have connectivity:
using
Postman or any other similar application, make GET and POST requests on
books (for a tutorial on Postman, you can enter
aici)
a JSON body with the format {"title": "title", "author": "author"}
is expected for POST requests
GET applications will return a list of books added by POST applications.
Verify that the volume you added keeps the data persisting:
stop and delete the two containers
restart the two containers with the same commands as before
send a GET request
If you set it up correctly, you will receive a list of previously added books.
What to upload