Docker 有没有更好的方法来更改容器的源代码而不是创建新映像?
如果我的应用程序以Kubernetes pod的形式运行,那么在不创建新版本的映像的情况下更改其源代码的最佳方法是什么,这样我就可以避免从存储库中推拉映像所花费的时间?如果在映像上安装了bash,您可以使用bash来输入容器,并使用-Docker 有没有更好的方法来更改容器的源代码而不是创建新映像?,docker,kubernetes,Docker,Kubernetes,如果我的应用程序以Kubernetes pod的形式运行,那么在不创建新版本的映像的情况下更改其源代码的最佳方法是什么,这样我就可以避免从存储库中推拉映像所花费的时间?如果在映像上安装了bash,您可以使用bash来输入容器,并使用- docker exec -it <CONTAINERID> /bin/bash docker exec-it/bin/bash 然而,这不是一个明智的解决方案。如果修改成功,则应相应地更新Dockerfile,否则可能会丢失您的工作以及与他人共享
docker exec -it <CONTAINERID> /bin/bash
docker exec-it/bin/bash
然而,这不是一个明智的解决方案。如果修改成功,则应相应地更新Dockerfile,否则可能会丢失您的工作以及与他人共享的能力 容器在创建时是否从git中提取
设置CI/CD?实现类似结果的另一种方法是将应用程序源留在容器外部,并在容器中装入应用程序源文件夹 在PHP等环境中开发web应用程序时,这尤其有用:您的容器是使用Apache/PHP堆栈设置的,并且/var/www/html被配置为装载本地文件系统 如果您使用的是minikube,它已经在minikube VM中挂载了一个主机文件夹。根据您的设置,您可以在以下位置找到安装的确切路径: 综上所述,这就是在kubernetes上部署nginx的样子,装载一个本地文件夹,其中包含正在显示的网站:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www/html/
name: sources
readOnly: true
volumes:
- name: sources
hostPath:
path: /Users/<username>/<source_folder>
type: Directory
---
apiVersion:apps/v1
种类:部署
元数据:
名称:nginx部署
规格:
选择器:
火柴标签:
app:nginx
副本:1份
模板:
元数据:
标签:
app:nginx
规格:
容器:
-姓名:nginx
图片:nginx:1.7.9
端口:
-集装箱港口:80
体积数量:
-mountPath:/var/www/html/
名称:来源
只读:正确
卷数:
-名称:来源
主机路径:
路径:/Users//
类型:目录
我们终于解决了这个问题。在这里,我们在运行kubernetes集群的同一地区将图像存储库从docker hub更改为aws ecr。现在,推/拉图像的时间非常短 这绝对不建议用于生产
但如果您的目的是与kubernetes进行本地开发,请查看以下工具:
Telepresence是一个开源工具,允许您运行单个服务
本地,同时将该服务连接到远程Kubernetes群集
Warp是一个kubectl插件,允许您执行本地代码
直接在Kubernetes中进行,无需缓慢的映像构建过程
kubectl warp
命令在容器内运行您的命令,与此相同
与kubectl run
的方式相同,但在执行命令之前
将所有文件同步到容器中
我认为应该将它作为为每个部署创建新映像的过程。 好处不多:
- 不可变映像:在运行实例时不进行任何干预这将确保映像在任何环境中运行
- 回滚:如果在新版本中遇到问题,请回滚到以前的版本
- 依赖项:新版本可能有新的依赖项