# 1-Tier-App-Deployment

Intro:

vim [`app.py`](http://app.py):

```plaintext
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)  # Runs on port 5000
```

Escape:wq

---

vim `requirements.txt`:

```plaintext
flask==2.3.2
```

Escape:wq

---

vim `Dockerfile`:

```plaintext
# Base image
FROM python:3.9-slim

# Set working directory
WORKDIR /app

# Copy requirements and install
COPY requirements.txt .
RUN pip install -r requirements.txt

# Copy the app file
COPY app.py .

# Document that the app uses port 5000
EXPOSE 5000

# Run the app
CMD ["python", "app.py"]
```

Escape:wq

---

```plaintext
docker build -t 1-tier-app-deployment:v1 .
docker run -it -p 5000:5000 1-tier-app-deployment:v1
```

Open 5000

Copy public-ip:5000

Now, you can see our docker container is running

Ctrl + C

---

Docker PUsh:

```plaintext
docker login

Username: YOUR-DOCKERHUB-USERNAME

Password: YOUR-DOCKERHUB-PASSWORD

Login succeeded

docker tag 1-tier-app-deployment:v1 YOUR-DOCKERHUB-USERNAME/1-tier-app-deployment:v1

docker push YOUR-DOCKERHUB-USERNAME/1-tier-app-deployment:v1
```

You can see ss our image has has in dockerhub account

Create a new folder:

```plaintext
mkdir k8s-manifests
cd k8s-manifests
```

vim `deployment.yaml`:

```plaintext
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: YOUR-DOCKERHUB-USERNAME/1-tier-app-deployment:v1 # 👈 Your Docker Hub username
        ports:
        - containerPort: 80
```

Escape:wq

---

vim `service.yaml`:

```plaintext
apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 32402  # Assign the desired NodePort here
  type: NodePort  # Change type to NodePort
```

Escape:wq

---

vim [`app.py`](http://app.py): → H[ello W](http://app.py)orld! -&gt; Well done!

### Docker Build & Push:

```plaintext
docker build -t 1-tier-app-deployment:v2 .
docker run -it -p 5000:5000 1-tier-app-deployment:v2
```

Now you can see well done has written show ss

Ctrl + C

### Psh to dockerhub

```plaintext
docker tag 1-tier-app-deployment:v2 YOUR-DOCKERHUB-USERNAME/1-tier-app-deployment:v2
docker push YOUR-DOCKERHUB-USERNAME/1-tier-app-deployment:v2
```

Thanks

Thanks
