我只是想知道我应该如何为Flutter应用程序创建一个docker
文件,然后将其部署在Kubernetes
集群上?
我从this网站找到了以下Dockerfile
和server.sh
脚本,但我不确定这是否是正确的方法?
# 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"]
以及:
#!/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
我做了所有的步骤,它似乎工作正常,但只要我使用skaffold
,我不知道如何/在哪里把下面的命令自动化这一步(我已经手动运行这个命令):
docker run -i -p 8080:5000 -td flutter_docker
我仍然想知道是上述文件,正确/官方的方式来做,还是有一个更好的方式?
EDIT
:我创建了以下deployment & service
文件,以将创建的映像部署到Kubernetes
本地Kind
群集上,但在运行kubectl get pods
时找不到此映像,但我通过执行docker images
找到了它。为什么会发生这种情况,以及如何放置到Kubernetes
pod上,而不是docker
映像上?
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
1条答案
按热度按时间blmhpbnm1#
这个问题(标题)有误导性。有两个部分。
1.如何容器化应用程序(在本例中为flutter应用程序)。
1.如何在k8s集群上部署应用程序。
要处理第一部分,您有Dockerfile。有改进的空间,但我认为这个Dockerfile应该工作。然后您需要构建一个容器映像。请参考official documentation。最后,您需要将创建的容器映像推送到某个存储库。(我们可以跳过此推送阶段,但为了简化操作,我建议推送映像)
对于第二部分,您应该熟悉Kubernetes的基本概念。您可以在k8s Pod object的帮助下从以前构建的容器映像运行容器。要访问应用程序,您还需要一个k8s对象,即Service(负载平衡器或节点端口类型)。
我知道事情有点复杂(在最初的水平),但请遵循一个很好的课程/书籍我已经看过了你分享的博客文章,这只谈了第一部分,而不是第二部分。你会在这篇博客文章的结尾有一个容器的形象。
我建议你去看看killer shell提供的免费的Playground,如果你不想自己建立一个k8s集群,那又是另一个学习曲线。跳过这个页面的第一个磁贴这只是一个Playground,但从第二个磁贴开始,他们有足够的材料。
已编辑问题的改进:
kubectl get pods
不会显示图像,但会显示集群中正在运行的pod(在默认名称空间中)。不确定您是如何运行和连接到集群的。但请尝试添加命令的输出。RUN git clone
。这样,你就可以控制需要添加到映像中的文件,也不需要在容器映像中安装git工具。RUN ["chmod", "+x", "/app/server/server.sh"]
和RUN mkdir
这两条语句。PS:抱歉,但这不是课堂部分。我知道这对初学者来说有点复杂。但请尝试从一些好的来源/书籍中学习。