0

I am just wondering to know how should I create a docker file for a Flutter app then deploy it on a Kubernetes cluster?

I found the following Dockerfile and server.sh script from this website but I am not sure if this a correct way of doing it?

# Install Operating system and dependencies
FROM ubuntu:22.04

RUN apt-get update 
RUN apt-get install -y curl git wget unzip libgconf-2-4 gdb libstdc++6 libglu1-mesa fonts-droid-fallback lib32stdc++6 python3
RUN apt-get clean

# download Flutter SDK from Flutter Github repo
RUN git clone https://github.com/flutter/flutter.git /usr/local/flutter

# Set flutter environment path
ENV PATH="/usr/local/flutter/bin:/usr/local/flutter/bin/cache/dart-sdk/bin:${PATH}"

# Run flutter doctor
RUN flutter doctor

# Enable flutter web
RUN flutter channel master
RUN flutter upgrade
RUN flutter config --enable-web

# Copy files to container and build
RUN mkdir /app/
COPY . /app/
WORKDIR /app/
RUN flutter build web

# Record the exposed port
EXPOSE 5000

# make server startup script executable and start the web server
RUN ["chmod", "+x", "/app/server/server.sh"]

ENTRYPOINT [ "/app/server/server.sh"]

And:

#!/bin/bash

# Set the port
PORT=5000

# Stop any program currently running on the set port
echo 'preparing port' $PORT '...'
fuser -k 5000/tcp

# switch directories
cd build/web/

# Start the server
echo 'Server starting on port' $PORT '...'
python3 -m http.server $PORT

I did all the steps and it seems it works fine but as long as I use skaffold I don't know how/where to put the following command to automate this step as well (I have already ran this command manually):

docker run -i -p 8080:5000 -td flutter_docker

I still like to know was the above files, proper/official way to doing that or there is a better way of it?

EDIT: I created the following deployment & service file to put the deploy the created image on Kubernetes local Kind cluster but when I run kubectl get pods I can not find this image but I find it by doing docker images. Why this happens and how can I put in on a Kubernetes pod instead of docker images?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
        - name: client
          image: front
---
apiVersion: v1
kind: Service
metadata:
  name: client-srv
spec:
  selector:
    app: client
  ports:
    - name: client
      protocol: TCP
      port: 3000
      targetPort: 3000
best_of_man
  • 367
  • 1
  • 3
  • 12

1 Answers1

1
  • The website you linked only talks about building flutter app docker image and running it using docker run.

  • To deploy the image to Kubernetes cluster you should first push the image to publicly available image registry (e.g. dockerhub).

  • Next, to run the image as a pod on a Kubernetes cluster, there are many options. The most simple one and equivalent to docker run is kubectl run --image [path_to_your_pushed_image]. I described this at Kubernetes Pods Introduction for Docker Users article.

  • Afterwards, you should be able to see the pod using kubectl get pods if it didn't crash or finished running gracefully.

rok
  • 159
  • 8