我使用Kubernetes来部署它:
apiVersion: apps/v1
kind: Deployment
metadata:
name: voting-app-deploy
labels:
name: voting-app-deploy
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: voting-app-pod
app: demo-voting-app
template:
metadata:
name: voting-app-pod
labels:
name: voting-app-pod
app: demo-voting-app
spec:
containers:
- name: voting-app
image: kodekloud/examplevotingapp_vote:v1
ports:
- containerPort: 80有了这个事务处:
apiVersion: v1
kind: Service
metadata:
name: voting-service
labels:
name: voting-service
app: demo-voting-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30004
selector:
name: voting-app-pod
app: demo-voting-app在检查Pods是否正在运行之后,我得到一个shell到正在运行的容器,在那里我可以看到源代码并使用vi进行更改:
kubectl exec -it podsname -- sh问题是,每当我销毁部署并将其带回来时,我就会丢失源代码中的所有更改。
这是应用程序的Dockerfile,我是从运行的容器中获得的:
# Using official python runtime base image
FROM python:2.7-alpine
# Set the application directory
WORKDIR /app
# Install our requirements.txt
ADD requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
# Copy our code from the current folder to /app inside the container
ADD . /app
# Make port 80 available for links and/or publish
EXPOSE 80
# Define our command to be run when launching the container
CMD ["gunicorn", "app:app", "-b", "0.0.0.0:80", "--log-file", "-", "--access-logfile", "-", "--workers", "4", "--keep-alive", "0"]那么,我如何获得这个源代码并生成一个新的映像呢?
发布于 2021-10-01 14:59:06
我想,我已经找到了解决我的问题的办法,这并不常见。我必须澄清,我不是在从事生产环境的工作。我只想从图像中“窃取”源代码,因为我没有访问存储库的权限。
以下是我所做的:
1.创建了一个文件夹和一个子文件夹来组织代码。2.舱内容器内有一个壳:
docker exec -it containername sh或
kubectl exec -it podsname -- shcp -R /app /dados/FROM kodekloud/examplevotingapp_vote:v1
RUN rm -rf /app/*.*
COPY ./dados/app /appdocker build -t myusername/my-voting-app .docker tag kaiohenricunha/my-voting-app kaiohenricunha/my-voting-app发送到码头枢纽的
docker push kaiohenricunha/my-voting-app发布于 2021-09-29 21:18:16
快速脏
如果您经常更改代码,并且这不是一个生产环境,您可以使用根据this线程提供的this,因为gunicorn19.0。此选项使服务器将代码更改重新加载到新工作人员中。
然后,当您想保存新映像时,可以使用docker commit“提交”或将更改保存到如下所示的新映像:
docker commit running_container_name_or_id imagerepo/image-name:tag不过,从长远来看,这并不是推荐的,只是用于小的修复和检查。
如果您想要一个长期方法方法(如果您希望使用挂载的绑定挂载(将文件夹从主机映射到码头容器)在本地开发,并为kubernetes构建最终映像,那么长期首选用法),或者您可以使用配置映射(如本例中所示)挂载源代码:
apiVersion: v1
kind: ConfigMap
metadata:
name: file-configmap
namespace: default
data:
config.conf: |
[mysqld]
binlog-format=mixedPod (部署中的使用情况相同):
apiVersion: v1
kind: Pod
metadata:
name:
spec:
containers:
- name: container-name
image: image-name
volumeMounts:
- name: my-file-volume
mountPath: /path/in/container/config.conf
subPath: config.conf
volumes:
- name: my-file-volume
configMap:
name: file-configmap发布于 2021-09-29 20:32:16
你应该用卷。
卷将允许您将容器中的src代码文件夹映射到容器外部的路径,并且它不会在重新启动期间被销毁,因为它将存储在容器之外。
您可以在这里看到一个包含解释的工作示例:https://github.com/nirgeier/KubernetesLabs/tree/master/Labs/09-StatefulSet

emptyDir
emptyDir是默认卷,当pod被删除时它将被删除,但我在这里使用它向您展示如何使用卷的示例。
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}https://stackoverflow.com/questions/69382873
复制相似问题