Skip to content
Snippets Groups Projects
Commit f5da3fc1 authored by Thomas Staub's avatar Thomas Staub
Browse files

init

parent 3e1edfe5
No related branches found
No related tags found
No related merge requests found
Showing
with 438 additions and 0 deletions
# syntax=docker/dockerfile:1
FROM ubuntu:22.04
# install app dependencies
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip install flask==2.1.*
# install app
COPY hello.py /
# final configuration
ENV FLASK_APP=hello
EXPOSE 8000
CMD flask run --host 0.0.0.0 --port 8000
\ No newline at end of file
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
\ No newline at end of file
Einfaches Hello World Programm für Docker
# portainer_docker_compose
`git clone https://gitlab.com/thomas-staub/cloudmodules/m169/demobeispiele/portainer_docker_compose.git`
`cd portainer_docker_compose`
`docker-compose -f docker-compose.yaml up -d`
version: '3'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./portainer-data:/data
ports:
- 9000:9000
# to-do-app-k8s
Installieren Sie microk8s auf Ihrem Rechner
`microk8s enable dashboard ingress metallb`
Die Anwendung kann mit folgendem Befehl installiert werden.
`microk8s kubectl create -f https://gitlab.com/thomas-staub/cloudmodules/m169/demobeispiele/to-do-app-k8s/-/raw/main/my-app.yaml`
apiVersion: v1
kind: Service
metadata:
namespace: my-app
name: todo-app-service
labels:
name: todo-app
spec:
selector:
app: todo-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3000
- port: 443
protocol: TCP
name: https
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: my-app
name: http-ingress
spec:
rules:
- host: my-app.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: todo-app-service
port:
number: 80
port:
number: 443
#in der Hostdatei braucht es noch einen Eintrag 172.23.6.165 (IP der VM) my-app.com
apiVersion: v1
kind: Namespace
metadata:
name: my-app ## name of the namespace
---
kind: ReplicationController
apiVersion: v1
metadata:
name: redis-master
namespace: my-app
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: redis-master
image: staubth/redis-master:v1
ports:
- containerPort: 6379
protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
namespace: my-app
name: redis-master
labels:
name: redis-master
spec:
ports:
- port: 6379
targetPort: 6379
protocol: TCP
selector:
name: redis-master
---
kind: ReplicationController
apiVersion: v1
metadata:
namespace: my-app
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: staubth/redis-slave:v1
ports:
- containerPort: 6379
protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
namespace: my-app
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port: 6379
targetPort: 6379
protocol: TCP
selector:
name: redis-slave
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: my-app
name: todo-app-deployment
labels:
name: todo-app
app: todo-app
spec:
replicas: 3
selector:
matchLabels:
app: todo-app
template:
metadata:
labels:
app: todo-app
spec:
containers:
- name: todo-app
image: staubth/todo-app:v1
ports:
- containerPort: 3000
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
namespace: my-app
name: todo-app-service
labels:
name: todo-app
spec:
selector:
app: todo-app
type: LoadBalancer
# loadBalancerIP is optional. MetalLB will automatically allocate an IP
# from its pool if not specified. You can also specify one manually.
# loadBalancerIP: x.y.z.a
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3000
- name: https
protocol: TCP
port: 443
targetPort: 3000
apiVersion: v1
kind: Namespace
metadata:
name: to-do-app
kind: ReplicationController
apiVersion: v1
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: redis-master
image: staubth/redis-master:v1
ports:
- containerPort: 6379
protocol: TCP
kind: Service
apiVersion: v1
metadata:
name: redis-master
labels:
name: redis-master
spec:
ports:
- port: 6379
targetPort: 6379
protocol: TCP
selector:
name: redis-master
kind: ReplicationController
apiVersion: v1
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: staubth/redis-slave:v1
ports:
- containerPort: 6379
protocol: TCP
kind: Service
apiVersion: v1
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port: 6379
targetPort: 6379
protocol: TCP
selector:
name: redis-slave
apiVersion: apps/v1
kind: Deployment
metadata:
name: todo-app-deployment
labels:
app: todo-app
spec:
replicas: 5
selector:
matchLabels:
app: todo-app
minReadySeconds: 20
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: todo-app
spec:
containers:
- name: todo-app
image: staubth/todo-app:v2
ports:
- containerPort: 3000
protocol: TCP
apiVersion: apps/v1
kind: Deployment
metadata:
name: todo-app-deployment
labels:
name: todo-app
app: todo-app
spec:
replicas: 3
selector:
matchLabels:
app: todo-app
template:
metadata:
labels:
app: todo-app
spec:
containers:
- name: todo-app
image: staubth/todo-app:v1
ports:
- containerPort: 3000
protocol: TCP
apiVersion: v1
kind: Service
metadata:
name: todo-app-service
labels:
name: todo-app
spec:
selector:
app: todo-app
type: LoadBalancer
# loadBalancerIP is optional. MetalLB will automatically allocate an IP
# from its pool if not specified. You can also specify one manually.
# loadBalancerIP: x.y.z.a
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3000
- name: https
protocol: TCP
port: 443
targetPort: 3000
Demo Programm für Docker
kann mit `git clone git@gitlab.com:thomas-staub/cloudmodules/m169/demobeispiele/to-do-appv1.git` in Play with Doker geclont werden
Run `docker-compose -f https://gitlab.com/thomas-staub/cloudmodules/m169/demobeispiele/to-do-appv1/-/raw/main/docker-compose-git.yaml up -d`
version: "3"
services:
todoapp:
image: staubth/todo-app:v1
ports:
- "3000"
depends_on:
- redis-master
- redis-slave
redis-slave:
image: staubth/redis-slave:v1
depends_on:
- redis-master
redis-master:
image: staubth/redis-master:v1
version: "3"
services:
todoapp:
image: registry.gitlab.com/thomas-staub/cloudmodules/m169/demobeispiele/to-do-appv1/todo-app:v1
ports:
- "3000"
depends_on:
- redis-master
- redis-slave
redis-slave:
image: registry.gitlab.com/thomas-staub/cloudmodules/m169/demobeispiele/to-do-appv1/redis-slave:v1
depends_on:
- redis-master
redis-master:
image: registry.gitlab.com/thomas-staub/cloudmodules/m169/demobeispiele/to-do-appv1/redis-master:v1
version: "3"
services:
todoapp:
build: ./web-frontend
ports:
- "3000"
depends_on:
- redis-master
- redis-slave
redis-slave:
build: ./redis-slave
depends_on:
- redis-master
redis-master:
build: ./redis-master
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment