I am fairly new to the Google Cloud platform and Docker and set-up a cluster of nodes, made a Dockerfile that copies a repo and runs a Clojure REPL on a public port. I can connect to it from my IDE and play around with my code, awesome!
That REPL should however probably tunneled through SSH, but here is where my problem starts. I can't find a suitable place to SSH into for making changes to the repo that Docker runs the REPL on:
Adding or removing SSH keys for all of the instances in your project
part here.I would like to edit the source files via SSH but I would need to access the docker code repo. I don't know how to proceed.
I understand this isn't exactly a typical way to deploy applications so I am not even sure it's possible to have multiple nodes work with a modified docker codebase (do the nodes share the JVM somehow?).
Concretely my question is how do I SSH into the docker container to access the codebase?
The command format for Kubernetes 1.5.0:
kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash
List instances:
gcloud compute instances list
SSH into instance:
gcloud compute ssh <instance_name> --zone=<instance_zone>
In the instance, list the running processes and their container IDs:
sudo docker ps -a
Attach to a container:
sudo docker exec -it <container_id> bash
The best way to attach to the container through exec command.
Attach to docker running container
docker exec -it YOUR_CONTAINER_ID bash
Attach to Kubernetes running container.
kubectl exec -it YOUR_CONTAINER/POD_NAME bash
Attach to Kubernetes running container in a given namespace.
kubectl exec -it YOUR_CONTAINER/POD_NAME -n YOUR_NAMESPACE bash
If the pod is in your current namespace, get the list of pods:
kubectl get pods
Pick a pod. Execute a bash session on it:
kubectl exec -it [POD_NAME] -- /bin/bash
Alternatively, find the pod you want in a different namespace:
kubectl get pods --all-namespaces
Pick a pod and execute a bash session on it:
kubectl exec -it [POD_NAME] --namespace [NAMESPACE] -- /bin/bash
I can't find a suitable place to SSH into for making changes to the repo that Docker runs the REPL on
When you create a cluster, you provision a number of node VMs in your google cloud project. If you look at https://console.cloud.google.com/compute/instances you should see them and each one will have a External IP address which you will be able to ssh into. Then create an ssh tunnel to a node VM that forwards a local port to the pod IP address.
Note that if you are running multiple replicas of your clojure app, you must connect to each replica separately to update the app.