Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 有没有更好的方法来更改容器的源代码而不是创建新映像?_Docker_Kubernetes - Fatal编程技术网

Docker 有没有更好的方法来更改容器的源代码而不是创建新映像?

Docker 有没有更好的方法来更改容器的源代码而不是创建新映像?,docker,kubernetes,Docker,Kubernetes,如果我的应用程序以Kubernetes pod的形式运行,那么在不创建新版本的映像的情况下更改其源代码的最佳方法是什么,这样我就可以避免从存储库中推拉映像所花费的时间?如果在映像上安装了bash,您可以使用bash来输入容器,并使用- docker exec -it <CONTAINERID> /bin/bash docker exec-it/bin/bash 然而,这不是一个明智的解决方案。如果修改成功,则应相应地更新Dockerfile,否则可能会丢失您的工作以及与他人共享

如果我的应用程序以Kubernetes pod的形式运行,那么在不创建新版本的映像的情况下更改其源代码的最佳方法是什么,这样我就可以避免从存储库中推拉映像所花费的时间?

如果在映像上安装了bash,您可以使用bash来输入容器,并使用-

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
的方式相同,但在执行命令之前 将所有文件同步到容器中


我认为应该将它作为为每个部署创建新映像的过程。 好处不多:

  • 不可变映像:在运行实例时不进行任何干预这将确保映像在任何环境中运行
  • 回滚:如果在新版本中遇到问题,请回滚到以前的版本
  • 依赖项:新版本可能有新的依赖项

好吧,这样做会失去容器带来的许多好处。如果你只专注于开发,你可能会想签出网真,正如Henry提到的那样,你将失去容器带来的好处。目标是打包代码和环境。一本书可以满足您的要求,我不建议使用它,因为它不是它的目的OK。我理解。如果映像中没有源代码,部署或复制控制器中的新POD将无法获取源代码。我说的对吗?这是一个非常糟糕的想法,可能会导致混乱和所谓的配置漂移。您需要将容器视为不可变的东西。仔细阅读牛和宠物这两个术语。我不明白你的问题。但是,映像是从GitHub中可用的源代码构建的。