Browse Source

feat(play-with-containers): update subject and audit

Make subject and audit language agnostic
pull/2333/head^2
nprimo 1 year ago committed by MSilva95
parent
commit
a34a04258e
  1. 115
      subjects/devops/play-with-containers/README.md
  2. 18
      subjects/devops/play-with-containers/audit/README.md
  3. BIN
      subjects/devops/play-with-containers/pictures/architecture.png
  4. 0
      subjects/devops/play-with-containers/resources/Microservices.png
  5. BIN
      subjects/devops/play-with-containers/resources/play-with-containers-py.png

115
subjects/devops/play-with-containers/README.md

@ -1,87 +1,124 @@
## play-with-containers ## play-with-containers
![Microservices](pictures/Microservices.png) ![Microservices](./resources/Microservices.png)
### Objectives ### Objectives
This project aims to discover the container concepts and tools, and practice these tools by creating a microservices architecture with docker and docker-compose. Additionally, as a cloud and DevOps student, you will gain insight into key containers and docker concepts as follows: This project aims to discover the container concepts and tools, and practice
these tools by creating a microservices' architecture with docker and
- `Containers`, is a unit of software that packages code and its dependencies so the application runs quickly and reliably across computing environments. docker-compose. Additionally, as a cloud and DevOps student, you will gain
- `Docker`, is a set of "platform as a service" products that use OS-level virtualization to deliver software in packages called containers. insight into key containers and docker concepts as follows:
- `Dockerfile`, is a text document that contains all the commands a user could call on the command line to assemble an image.
- `Docker Images`, is a read-only template that contains a set of instructions for creating a container that can run on the Docker platform. - `Containers`, is a unit of software that packages code and its dependencies,
- `Docker Networks`, it enables a user to link a Docker container to as many networks as he/she requires. so the application runs quickly and reliably across computing environments.
- `Docker Volumes`, Volumes are the preferred mechanism for persisting data generated and used by Docker containers. - `Docker`, is a set of "platform as a service" products that use OS-level
- `Docker Compose`, Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services. virtualization to deliver software in packages called containers.
- `Dockerfile`, is a text document that contains all the commands a user could
call on the command line to assemble an image.
- `Docker Images`, is a read-only template that contains a set of instructions
for creating a container that can run on the Docker platform.
- `Docker Networks`, it enables a user to link a Docker container to as many
networks as he/she requires.
- `Docker Volumes`, Volumes are the preferred mechanism for persisting data
generated and used by Docker containers.
- `Docker Compose`, Compose is a tool for defining and running multi-container
Docker applications. With Compose, you use a YAML file to configure your
application's services.
### Tips ### Tips
- Spend time on the theory before rushing into the practice. - Spend time on the theory before rushing into the practice.
- Read the official documentation of Docker. - Read the official documentation of Docker.
> Any lack of understanding of the concepts of this project may affect the difficulty of future projects, take your time to understand all concepts. > Any lack of understanding of the concepts of this project may affect the
> difficulty of future projects, take your time to understand all concepts.
> Be curious and never stop searching! > Be curious and never stop searching!
> Each operation in Dockerfile is a layer in the image, You must design it appropriately to avoid duplicate or useless layers in the image. > Each operation in Dockerfile is a layer in the image, You must design it
> appropriately to avoid duplicate or useless layers in the image.
> It is not recommended to use 'latest' in your Dockerfile, instead of that you can specify the version in the tag. > It is not recommended to use 'latest' in your Dockerfile, instead of that
> you can specify the version in the tag.
### Instructions ### Instructions
You have to install Docker in your Linux virtual machine, you will also need it in the audit. You have to install Docker in your Linux virtual machine, you will also need it
in the audit.
You have to implement this architecture: You have to implement this architecture:
![architecture](pictures/architecture.png) ![architecture](./resources/play-with-containers-py.png)
You will use the services you developed in the `crud-master` project. You will use the services you developed in the `crud-master-py` project.
You are required to create `Dockerfile`s for each service and call them in your `docker-compose.yml` (Each service should have its container for optimal performance.). You are required to create a `Dockerfile` for each service and call them in
To ensure performance, the containers should be created from the penultimate stable version of either `Alpine` or `Debian`, depending on your preference. your `docker-compose.yml` (each service should have its container for optimal
The corresponding service and Docker image must share the same name. performance.). To ensure performance, the containers should be created from the
This implies that you must build your project's Docker images and you are not allowed to use pre-built Docker images or services like DockerHub, except for `Alpine` and `Debian`. penultimate stable version of either `Alpine` or `Debian`, depending on your
preference. The corresponding service and Docker image must share the same
name. This implies that you must build your project's Docker images, and you are
not allowed to use pre-built Docker images or services like Docker Hub, except
for `Alpine` and `Debian`.
#### Docker Containers: #### Docker Containers:
- `inventory-database container` is a SQL database server that contains your inventory database, it must be accessible via port `5432`. - `inventory-db container` is a SQL database server that contains your
- `billing-database container` is a SQL database server that contains your billing database, it must be accessible via port `5432`. inventory database, it must be accessible via port `5432`.
- `inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`. - `billing-db container` is a SQL database server that contains your
- `billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`. billing database, it must be accessible via port `5432`.
- `RabbitMQ container` is a RabbitMQ server that contains the queue. - `inventory-app container` is a server that contains your
- `api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`. inventory-app. It will be connected to the inventory database and accessible
via port `8080`.
- `billing-app container` is a server that contains your billing-app.
It will be connected to the billing database and consuming the messages from
the RabbitMQ queue. It will be accessible via port `8080`.
- `rabbit-queue` is a RabbitMQ server that contains the queue.
- `api-gateway-app container` is a server that contains your
API gateway. It will forward the requests to the other services, and it's
accessible via port `3000`.
> Containers must be restarted in case of failure! > Containers must be restarted in case of failure!
#### Docker Volumes: #### Docker Volumes:
- `inventory-database volume` contains your inventory database. - `inventory-db volume` contains your inventory database.
- `billing-database volume` contains your billing database. - `billing-db volume` contains your billing database.
- `api-gateway-app volume` contains your Api gateway logs. - `api-gateway-app volume` contains your API gateway logs.
#### Docker Network: #### Docker Network:
- You must have a docker network that establishes the connection between all services inside your docker host. - You must have a docker network that establishes the connection between all
- Any outside request must be able to access only the `api-gateway-app` via port `3000`. services inside your docker host.
- Any outside request must be able to access only the `api-gateway-app` via
port `3000`.
> All resources in your infrastructure must be targeted and managed by docker-compose. > All resources in your infrastructure must be targeted and managed by
> docker-compose.
> You don't have to push your credentials and passwords to your repo, the credentials and passwords must be in the `.env` file, and this file must be ignored in the `.gitignore` file. > You don't have to push your credentials and passwords to your repo, the
> credentials and passwords must be in the `.env` file, and this file must be
> ignored in the `.gitignore` file.
> Don't push your passwords to Git, unless you want to throw a thief's party with free drinks and no bouncers on duty! > Don't push your passwords to Git, unless you want to throw a thief's party
> with free drinks and no bouncers on duty!
### Documentation ### Documentation
You must push a `README.md` file containing full documentation of your solution (prerequisites, configuration, setup, usage, etc). You must push a `README.md` file containing full documentation of your solution
(prerequisites, configuration, setup, usage, etc.).
### Bonus ### Bonus
If you complete the mandatory part successfully and you still have free time, you can implement anything that you feel deserves to be a bonus. If you complete the mandatory part successfully, and you still have free time,
you can implement anything that you feel deserves to be a bonus.
Challenge yourself! Challenge yourself!
### Submission and audit ### Submission and audit
You must submit the `README.md` file and all files used to create, delete and manage your infrastructure: docker-compose, Dockerfiles, scripts and so on. You must submit the `README.md` file and all files used to create, delete and
manage your infrastructure: docker-compose, Dockerfiles, scripts and so on.
> The infrastructure must be able to be created, deleted, and managed only by docker-compose. > The infrastructure must be able to be created, deleted, and managed only by
> In the audit you will be asked different questions about the concepts and the practices of this project, prepare yourself! > `docker-compose`. In the audit you will be asked different questions about
> the concepts and the practices of this project, prepare yourself!

18
subjects/devops/play-with-containers/audit/README.md

@ -6,7 +6,7 @@ A `README.md` file and all files used to create, delete and manage the student i
###### Are all the required files present? ###### Are all the required files present?
###### Does the `.env` file not exist in the repo? ###### Was the `.env` file excluded from the git files?
###### Are all pushed files in the repo clean of any credentials or passwords? ###### Are all pushed files in the repo clean of any credentials or passwords?
@ -50,7 +50,7 @@ user:~$
##### Ask the following questions to the group or student ##### Ask the following questions to the group or student
##### What is a microservices architecture? ##### What is a microservices' architecture?
##### Why do we use microservices architecture? ##### Why do we use microservices architecture?
@ -66,7 +66,7 @@ user:~$
###### Are all Dockerfiles based on `Debian` or `Alpine`? ###### Are all Dockerfiles based on `Debian` or `Alpine`?
###### There is no sensitive data in Dockerfiles or other solution files (sensitive data should only exist in `.env` file)? ###### Are Dockerfiles or any other solution files free from sensitive data (sensitive data should only exist in `.env` file)?
##### Ask the following questions to the group or student ##### Ask the following questions to the group or student
@ -90,11 +90,11 @@ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
user:~$ user:~$
``` ```
- `inventory-database container` is a SQL database server that contains your inventory database, it must be accessible via port `5432`. - `inventory-db container` is a SQL database server that contains your inventory database, it must be accessible via port `5432`.
- `billing-database container` is a SQL database server that contains your billing database, it must be accessible via port `5432`. - `billing-db container` is a SQL database server that contains your billing database, it must be accessible via port `5432`.
- `inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`. - `inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`.
- `billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`. - `billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`.
- `RabbitMQ container` is a RabbitMQ server that contains the queue. - `rabbit-queue` is a RabbitMQ server that contains the queue.
- `api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`. - `api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`.
##### Check the Container restart policy: ##### Check the Container restart policy:
@ -122,7 +122,7 @@ user:~$
- `inventory-database volume` contains the inventory database. - `inventory-database volume` contains the inventory database.
- `billing-database volume` contains the billing database. - `billing-database volume` contains the billing database.
- `api-gateway-app volume` contains the Api gateway logs. - `api-gateway-app volume` contains the API gateway logs.
###### Do all volumes have the correct configuration? ###### Do all volumes have the correct configuration?
@ -168,8 +168,6 @@ user:~$
##### Why do we use Docker images? ##### Why do we use Docker images?
##### Where can we find some public Docker images?
###### Did the student reply correctly to the questions? ###### Did the student reply correctly to the questions?
#### Inventory API Endpoints #### Inventory API Endpoints
@ -218,6 +216,8 @@ user:~$
#### Bonus #### Bonus
###### +Did the student use his/her own `crud-master-py` solution?
###### +Did the student add any optional bonus? ###### +Did the student add any optional bonus?
###### +Is this project an outstanding project? ###### +Is this project an outstanding project?

BIN
subjects/devops/play-with-containers/pictures/architecture.png

diff.bin_not_shown

Before

Width:  |  Height:  |  Size: 525 KiB

0
subjects/devops/play-with-containers/pictures/Microservices.png → subjects/devops/play-with-containers/resources/Microservices.png

Before

Width:  |  Height:  |  Size: 396 KiB

After

Width:  |  Height:  |  Size: 396 KiB

BIN
subjects/devops/play-with-containers/resources/play-with-containers-py.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 560 KiB

Loading…
Cancel
Save