adding exercise for docker compose
This commit is contained in:
parent
46192ddcc9
commit
ab4179c785
14
Teil1/app/Dockerfile
Normal file
14
Teil1/app/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
||||
# Example of Dockerfile
|
||||
|
||||
FROM python:3.8.5-alpine3.12
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
EXPOSE 5000
|
||||
ENV FLASK_APP=app.py
|
||||
|
||||
COPY . /app
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
ENTRYPOINT [ "flask"]
|
||||
CMD [ "run", "--host=0.0.0.0" ]
|
100
Teil1/app/app.py
Normal file
100
Teil1/app/app.py
Normal file
@ -0,0 +1,100 @@
|
||||
from flask import Flask, request, jsonify, render_template
|
||||
import mysql.connector
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
def employee_data():
|
||||
# Connect to MySQL database
|
||||
conn = mysql.connector.connect(
|
||||
host='db', # Use the IP address or hostname of the MySQL container
|
||||
port='3306', # MySQL port
|
||||
user='root', # MySQL username
|
||||
password='root_password', # MySQL password
|
||||
database='employees' # Name of the database
|
||||
)
|
||||
|
||||
# Create a cursor object to execute SQL commands
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT Employee_Name, Title FROM employee_data')
|
||||
results = cursor.fetchall()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return results
|
||||
|
||||
# Endpoint to add a new entry to the database
|
||||
@app.route('/add', methods=['POST'])
|
||||
def add_entry():
|
||||
# Connect to MySQL database
|
||||
conn = mysql.connector.connect(
|
||||
host='db', # Use the IP address or hostname of the MySQL container
|
||||
port='3306', # MySQL port
|
||||
user='root', # MySQL username
|
||||
password='root_password', # MySQL password
|
||||
database='employees' # Name of the database
|
||||
)
|
||||
|
||||
# Create a cursor object to execute SQL commands
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Get data from request
|
||||
data = request.get_json()
|
||||
employee_name = data.get('employee_name')
|
||||
title = data.get('title')
|
||||
|
||||
# SQL query to insert data into the employee_data table
|
||||
sql_query = "INSERT INTO employee_data (Employee_Name, Title) VALUES (%s, %s)"
|
||||
|
||||
try:
|
||||
# Execute the SQL query
|
||||
cursor.execute(sql_query, (employee_name, title))
|
||||
# Commit the transaction
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return jsonify({'message': 'Entry added successfully'}), 200
|
||||
except Exception as e:
|
||||
# Rollback in case of any error
|
||||
conn.rollback()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
# Endpoint to list all entries in the database
|
||||
@app.route('/entries', methods=['GET'])
|
||||
def get_entries():
|
||||
# Connect to MySQL database
|
||||
conn = mysql.connector.connect(
|
||||
host='db', # Use the IP address or hostname of the MySQL container
|
||||
port='3306', # MySQL port
|
||||
user='root', # MySQL username
|
||||
password='root_password', # MySQL password
|
||||
database='employees' # Name of the database
|
||||
)
|
||||
|
||||
# Create a cursor object to execute SQL commands
|
||||
cursor = conn.cursor()
|
||||
# SQL query to select all entries from the employee_data table
|
||||
sql_query = "SELECT * FROM employee_data"
|
||||
|
||||
# Execute the SQL query
|
||||
cursor.execute(sql_query)
|
||||
# Fetch all entries
|
||||
entries = cursor.fetchall()
|
||||
|
||||
# Convert entries to JSON format
|
||||
entries_json = [{'Employee_Name': entry[0], 'Title': entry[1]} for entry in entries]
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return jsonify(entries_json), 200
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
#return jsonify({'Employee Data': employee_data()})
|
||||
entries = employee_data()
|
||||
return render_template('index.html', entries=entries)
|
||||
#return "Hello world"
|
||||
|
||||
if __name__ == '__main__':
|
||||
#app.run(debug = True, host='0.0.0.0')
|
||||
app.run()
|
2
Teil1/app/requirements.txt
Normal file
2
Teil1/app/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Flask
|
||||
mysql-connector
|
37
Teil1/app/templates/index.html
Normal file
37
Teil1/app/templates/index.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>MySQL Database Entries</title>
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #dddddd;
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>SQLite Database Entries</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<!-- Add more table headers if needed -->
|
||||
</tr>
|
||||
{% for entry in entries %}
|
||||
<tr>
|
||||
<td>{{ entry[0] }}</td>
|
||||
<td>{{ entry[1] }}</td>
|
||||
<!-- Access more columns if needed -->
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
12
Teil1/db/Dockerfile
Normal file
12
Teil1/db/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
||||
# Use the official MySQL image from Docker Hub
|
||||
FROM mysql:latest
|
||||
|
||||
# Set environment variables
|
||||
ENV MYSQL_ROOT_PASSWORD=root_password
|
||||
ENV MYSQL_DATABASE=employees
|
||||
|
||||
# Copy the SQL initialization script into the container
|
||||
COPY init.sql /docker-entrypoint-initdb.d/
|
||||
|
||||
# Expose port 3306 to allow external connections to the database
|
||||
EXPOSE 3306
|
15
Teil1/db/init.sql
Executable file
15
Teil1/db/init.sql
Executable file
@ -0,0 +1,15 @@
|
||||
CREATE DATABASE employees;
|
||||
USE employees;
|
||||
|
||||
|
||||
CREATE TABLE employee_data (
|
||||
Employee_Name VARCHAR(50),
|
||||
Title VARCHAR(50)
|
||||
);
|
||||
|
||||
|
||||
INSERT INTO employee_data
|
||||
(Employee_Name, Title)
|
||||
VALUES
|
||||
('Amit Khanna', 'Manager'),
|
||||
('Anjali Gupta', 'Engineer');
|
14
Teil2/app/Dockerfile
Normal file
14
Teil2/app/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
||||
# Example of Dockerfile
|
||||
|
||||
FROM python:3.8.5-alpine3.12
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
EXPOSE 5000
|
||||
ENV FLASK_APP=app.py
|
||||
|
||||
COPY . /app
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
ENTRYPOINT [ "flask"]
|
||||
CMD [ "run", "--host=0.0.0.0" ]
|
100
Teil2/app/app.py
Normal file
100
Teil2/app/app.py
Normal file
@ -0,0 +1,100 @@
|
||||
from flask import Flask, request, jsonify, render_template
|
||||
import mysql.connector
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
def employee_data():
|
||||
# Connect to MySQL database
|
||||
conn = mysql.connector.connect(
|
||||
host='db', # Use the IP address or hostname of the MySQL container
|
||||
port='3306', # MySQL port
|
||||
user='root', # MySQL username
|
||||
password='root_password', # MySQL password
|
||||
database='employees' # Name of the database
|
||||
)
|
||||
|
||||
# Create a cursor object to execute SQL commands
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT Employee_Name, Title FROM employee_data')
|
||||
results = cursor.fetchall()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return results
|
||||
|
||||
# Endpoint to add a new entry to the database
|
||||
@app.route('/add', methods=['POST'])
|
||||
def add_entry():
|
||||
# Connect to MySQL database
|
||||
conn = mysql.connector.connect(
|
||||
host='db', # Use the IP address or hostname of the MySQL container
|
||||
port='3306', # MySQL port
|
||||
user='root', # MySQL username
|
||||
password='root_password', # MySQL password
|
||||
database='employees' # Name of the database
|
||||
)
|
||||
|
||||
# Create a cursor object to execute SQL commands
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Get data from request
|
||||
data = request.get_json()
|
||||
employee_name = data.get('employee_name')
|
||||
title = data.get('title')
|
||||
|
||||
# SQL query to insert data into the employee_data table
|
||||
sql_query = "INSERT INTO employee_data (Employee_Name, Title) VALUES (%s, %s)"
|
||||
|
||||
try:
|
||||
# Execute the SQL query
|
||||
cursor.execute(sql_query, (employee_name, title))
|
||||
# Commit the transaction
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return jsonify({'message': 'Entry added successfully'}), 200
|
||||
except Exception as e:
|
||||
# Rollback in case of any error
|
||||
conn.rollback()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
# Endpoint to list all entries in the database
|
||||
@app.route('/entries', methods=['GET'])
|
||||
def get_entries():
|
||||
# Connect to MySQL database
|
||||
conn = mysql.connector.connect(
|
||||
host='db', # Use the IP address or hostname of the MySQL container
|
||||
port='3306', # MySQL port
|
||||
user='root', # MySQL username
|
||||
password='root_password', # MySQL password
|
||||
database='employees' # Name of the database
|
||||
)
|
||||
|
||||
# Create a cursor object to execute SQL commands
|
||||
cursor = conn.cursor()
|
||||
# SQL query to select all entries from the employee_data table
|
||||
sql_query = "SELECT * FROM employee_data"
|
||||
|
||||
# Execute the SQL query
|
||||
cursor.execute(sql_query)
|
||||
# Fetch all entries
|
||||
entries = cursor.fetchall()
|
||||
|
||||
# Convert entries to JSON format
|
||||
entries_json = [{'Employee_Name': entry[0], 'Title': entry[1]} for entry in entries]
|
||||
cursor.close()
|
||||
conn.close()
|
||||
return jsonify(entries_json), 200
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
#return jsonify({'Employee Data': employee_data()})
|
||||
entries = employee_data()
|
||||
return render_template('index.html', entries=entries)
|
||||
#return "Hello world"
|
||||
|
||||
if __name__ == '__main__':
|
||||
#app.run(debug = True, host='0.0.0.0')
|
||||
app.run()
|
2
Teil2/app/requirements.txt
Normal file
2
Teil2/app/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Flask
|
||||
mysql-connector
|
37
Teil2/app/templates/index.html
Normal file
37
Teil2/app/templates/index.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>MySQL Database Entries</title>
|
||||
<style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #dddddd;
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>SQLite Database Entries</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<!-- Add more table headers if needed -->
|
||||
</tr>
|
||||
{% for entry in entries %}
|
||||
<tr>
|
||||
<td>{{ entry[0] }}</td>
|
||||
<td>{{ entry[1] }}</td>
|
||||
<!-- Access more columns if needed -->
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
21
Teil2/compose.yml
Normal file
21
Teil2/compose.yml
Normal file
@ -0,0 +1,21 @@
|
||||
services:
|
||||
app:
|
||||
build: ./app
|
||||
links:
|
||||
- db
|
||||
ports:
|
||||
- "5000:5000"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: mysql:5.7
|
||||
ports:
|
||||
- "3306:3306"
|
||||
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root_password
|
||||
volumes:
|
||||
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
- ./data:/var/lib/mysql
|
||||
|
15
Teil2/db/init.sql
Executable file
15
Teil2/db/init.sql
Executable file
@ -0,0 +1,15 @@
|
||||
CREATE DATABASE employees;
|
||||
USE employees;
|
||||
|
||||
|
||||
CREATE TABLE employee_data (
|
||||
Employee_Name VARCHAR(50),
|
||||
Title VARCHAR(50)
|
||||
);
|
||||
|
||||
|
||||
INSERT INTO employee_data
|
||||
(Employee_Name, Title)
|
||||
VALUES
|
||||
('Amit Khanna', 'Manager'),
|
||||
('Anjali Gupta', 'Engineer');
|
71
Teil2/main.c
Normal file
71
Teil2/main.c
Normal file
@ -0,0 +1,71 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#define PORT 5000
|
||||
#define BUFFER_SIZE 1024
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
char *endpoint = "";
|
||||
char *data = ""; // Data to be sent in the POST request
|
||||
if (argc > 1) {
|
||||
endpoint = argv[1];
|
||||
}
|
||||
if (argc > 2) {
|
||||
data = argv[2];
|
||||
}
|
||||
|
||||
char request[BUFFER_SIZE];
|
||||
snprintf(request, BUFFER_SIZE, "POST /%s HTTP/1.1\r\nHost: localhost:5000\r\nContent-Type: application/json\r\nContent-Length: %ld\r\n\r\n%s", endpoint, strlen(data), data);
|
||||
|
||||
int sockfd;
|
||||
struct sockaddr_in server_addr;
|
||||
char buffer[BUFFER_SIZE];
|
||||
|
||||
// Create socket
|
||||
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sockfd < 0) {
|
||||
perror("Error in socket creation");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Set up server address
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
|
||||
server_addr.sin_port = htons(PORT);
|
||||
|
||||
// Connect to server
|
||||
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
|
||||
perror("Error in connection");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Send HTTP request
|
||||
if (send(sockfd, request, strlen(request), 0) != strlen(request)) {
|
||||
perror("Error in sending request");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Receive data from server
|
||||
ssize_t total_bytes_received = 0;
|
||||
ssize_t bytes_received;
|
||||
while ((bytes_received = recv(sockfd, buffer, BUFFER_SIZE, 0)) > 0) {
|
||||
// Display received data
|
||||
fwrite(buffer, 1, bytes_received, stdout);
|
||||
total_bytes_received += bytes_received;
|
||||
}
|
||||
|
||||
if (bytes_received < 0) {
|
||||
perror("Error in receiving data");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Close socket
|
||||
close(sockfd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user