From 5380e26a334fbdcab0d5be3408b8ef127bbc8528 Mon Sep 17 00:00:00 2001 From: Andriy Date: Sat, 15 Mar 2025 19:45:57 +0100 Subject: [PATCH] created docker application --- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yaml | 32 +++++++++++++++++++++++ prepare-app.sh | 20 ++++++++++++++ remove-app.sh | 10 +++++++ start-app.sh | 9 +++++++ stop-app.sh | 6 +++++ 6 files changed, 141 insertions(+) create mode 100644 README.md create mode 100644 docker-compose.yaml create mode 100755 prepare-app.sh create mode 100755 remove-app.sh create mode 100755 start-app.sh create mode 100755 stop-app.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..26f8774 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# Docker Web Application Deployment + +The application consists of two services: + +1. **Web Service (Nginx):** + - Uses the official Nginx image. + - Listens on port 80 inside the container and is mapped to host port 8080. +2. **Database Service (MySQL 5.7):** + - Uses the official MySQL 5.7 image. + - Configured with a root password and a default database. + - Persists its data using the named volume `mysql-data`. + +## Files Overview + +- **prepare-app.sh:** + - Creates the required Docker network (`myapp-net`) and persistent volume (`mysql-data`). +- **docker-compose.yaml:** + - Defines the two services along with their ports, environment variables, volumes, and restart policies. +- **start-app.sh:** + - Starts the services using Docker Compose in detached mode. + - Displays the URL to access the web service. +- **stop-app.sh:** + - Stops the running containers without deleting the persistent volume. +- **remove-app.sh:** + - Removes all the created resources (containers, network, and volume) from the deployment. + +## Deployment Instructions + +1. **Preparation:** + - Ensure Docker and Docker Compose are installed. + - Make the scripts executable: + ```bash + chmod +x prepare-app.sh start-app.sh stop-app.sh remove-app.sh + ``` + - Run the preparation script: + ```bash + ./prepare-app.sh + ``` + +2. **Starting the Application:** + - Launch the services by running: + ```bash + ./start-app.sh + ``` + - Open your web browser and navigate to [http://localhost:8080](http://localhost:8080) to see the Nginx welcome page. + +3. **Stopping the Application:** + - Stop the services without losing data: + ```bash + ./stop-app.sh + ``` + +4. **Removing the Application:** + - To completely remove all deployed resources, run: + ```bash + ./remove-app.sh + ``` + +## Notes + +- The application uses an external network (`myapp-net`) and a persistent volume (`mysql-data`) that are created in `prepare-app.sh`. +- The Nginx container depends on the MySQL container to demonstrate inter-service communication within the `myapp-net` network. +- Containers are configured to restart on failure. + diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..09426fa --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + web: + image: nginx:latest + ports: + - "8080:80" + networks: + - myapp-net + restart: on-failure + depends_on: + - db + + db: + image: mysql:5.7 + environment: + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: appdb + volumes: + - mysql-data:/var/lib/mysql + networks: + - myapp-net + restart: on-failure + +networks: + myapp-net: + external: true + +volumes: + mysql-data: + external: true + diff --git a/prepare-app.sh b/prepare-app.sh new file mode 100755 index 0000000..753d306 --- /dev/null +++ b/prepare-app.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# prepare-app.sh + +if ! docker network ls | grep -w myapp-net >/dev/null; then + docker network create myapp-net + echo "Created Docker network: myapp-net" +else + echo "Docker network myapp-net already exists." +fi + + +if ! docker volume ls | grep -w mysql-data >/dev/null; then + docker volume create mysql-data + echo "Created Docker volume: mysql-data" +else + echo "Docker volume mysql-data already exists." +fi + +echo "Preparation complete." + diff --git a/remove-app.sh b/remove-app.sh new file mode 100755 index 0000000..3aa3114 --- /dev/null +++ b/remove-app.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# remove-app.sh + +docker-compose down + +docker volume rm mysql-data +docker network rm myapp-net + +echo "All application resources removed." + diff --git a/start-app.sh b/start-app.sh new file mode 100755 index 0000000..5be746e --- /dev/null +++ b/start-app.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# start-app.sh + +docker-compose up -d + +sleep 5 + +echo "Application started. Access the web service at http://localhost:8080" + diff --git a/stop-app.sh b/stop-app.sh new file mode 100755 index 0000000..d4db2c2 --- /dev/null +++ b/stop-app.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# stop-app.sh + +docker-compose stop +echo "Application services stopped. Persistent data remains intact." +