我想在python容器中安装mysql-connector == 2.1.6。一种方法是在DockerFile中编写此命令
RUN pip install mysql-connector==2.1.6
然后制作图像并在kubernetes中使用该图像。但是我想运行python映像,然后安装mysql-connector == 2.1.6。但是在崩溃容器或重新启动它之后,我应该再次安装mysql-connector == 2.1.6。 经过大量搜索后,我看到cloud_provider将软件包安装在运行容器中。但是它没有解释它是如何做到的。现在我有了kubernetes,我想在正在运行的容器上永久安装一些软件包。 我该怎么办?
我知道我可以提交容器,但是我不想要它,因为我不知道用户何时安装软件包。
答案 0 :(得分:0)
对容器进行临时更改是一条硬性规定。如果容器关闭,它们就不见了。您可能会尝试将所有配置文件放入永久存储,但这将是一场噩梦。长话短说,如果要持续下去,则需要使其成为图像的一部分。
答案 1 :(得分:0)
您是否考虑过initContainers
?
Init容器始终在Pod中的App Container之前运行。此外,所有initContainers 必须成功完成(可以有一系列initContainers)
。
根据{{3}}:
属于容器的初始化容器列表。在里面 容器在启动容器之前按顺序执行。如果 任何初始化容器失败,则该Pod被视为已失败,并且 根据其restartPolicy处理。
通过initContainers
,您可以包含一些不应在图像中显示的安全性内容,它可以包含实用程序或脚本(例如mysql-connector的安装)。
有关initContainers
和示例documentation的更多信息。
答案 2 :(得分:0)
听起来您似乎正在尝试使用Kubernetes吊舱代替传统的“虚拟机”或“ VPS”,在这种虚拟机中,用户“登录”吊舱并手动运行命令以安装其应用程序。
Kubernetes并非设计用于这种方式。它被设计为将豆荚视为一次性的。在许多不同的情况下(节点关闭,节点资源用尽等),它会自动重新启动Pod。当pod重新启动时,所有“手动更改”都将丢失。这是设计,您不应该尝试与之抗争。
您需要在Dockerfile中构建包括Python,库和应用程序代码的 final,final 容器映像,然后对其进行构建并将其推送至注册表,然后在Kubernetes中运行它。您永远不需要手动登录到容器。
类似的事情应该起作用
FROM python:3.7
# Install any dependencies you need
RUN pip install mysql-connector==2.1.6
# Copy all the application source to the container.
COPY src/ /app
# Set the entrypoint to your main python file.
ENTRYPOINT ["/app/main.py"]