需求要点
- 在本地环境中使用
VSCode文本编辑器 , 基于VSCode REMOTE-Containers插件, 实现在容器里开发。 - 自己的电脑只需要装好IDE,连接到
容器里就可以立刻开发编译 不喜在本地电脑里安装java sdk, nodejs等,一是污染本地环境,二是在本地安装/运行成功了,因为环境不一致,在其他电脑不一定安装成功。喜爱在容器中统一开发环境,安装一次,运行任意。喜爱在容器中为不同的平台编译(若源码支持不同的平台运行;经济有限)。- 平时需要使用到 windwos 系统 ,
不喜在同一台电脑上多硬盘安装系统进行切换。
使用场景
- 为不同的环境对源码进行测试。比如测试对某个插件的版本支持情况等。
- 因没有统一开发环境,用户/产品/测试/或不同的开发人员埋怨在其电脑环境中安装不成功。
- 需要为不同的平台/环境进行编译,但手里没有那么多环境的实机。
容器化安装方便,切换版本方便,也不污染本地环境,也能统一开发环境。
工作原理
Remote-Containers 这一套插件现在的功能很多都是基于电脑本机安装的 docker 容器环境,虽然它支持连接到远端的 docker 容器,接到远端之后会有很多额外的设置。
问题解决
当前问题: 在[本地] 还是 [远端] 安装 docker 服务端 ?
解决方案:
因为只有一台电脑,所以[远端] 其实就在[本地]电脑上。+ 因为平时使用的是window系统,且不喜欢多硬盘多系统之间的切换,而docker的容器化技术原生不支持windows系统(需要开启虚拟化支持),所以需要在window上搭建一个Linux系统出来。故有:
[远端]为 windows 环境时,vmware + linux + docker[远端]为 windows 环境时,virtualbox + linux + docker[远端]为 windows 环境时,wsl + docker[远端]为 windows 环境时,wsl + docker desktop for window[远端]为 windows 环境时,hyper-v + docker desktop for window
当前环境下,在[远端]安装 docker 服务端 其实就是在[Linux系统]系统里,也就是在 ["虚拟机"]里。也就是在 wsl/hyper-v/virtualbox/vmware 里
了解更多: 容器化技术 docker vs podman
end
当前问题: 想在[本地]使用 docker 命令。 需要在[本地] 安装 docker 客户端 。
解决方案:
[本地]为 windows 环境时,可以使用 scoop 安装。 (ps:scoop install docker)[本地]为 macos 环境时,可以使用 brew 安装。[本地]为 linux 环境时,可以使用 yum/apt/snap 等安装。
当前环境下,[本地] 为 windows 环境。
end
当前问题: 让 [远端] 的 docker 服务端 (docker daemon) 支持远程调用功能。
解决方案:
- 在
[远端]设置 docker 服务端配置,设置监听地址和端口,开启 docker 远程调用 api 功能。比如-H tcp://0.0.0.0:2375或-H tcp://127.0.0.1:2375或 回环地址-H tcp://127.0.0.1:2375等。可以使用下列操作:(实施方式不唯一)
sudo mkdir /etc/systemd/system/docker.service.d/
sudo cat > /etc/systemd/system/docker.service.d/override.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
EOF
end
当前问题: 让 [本地] 的 window 连接 [远端] 的 docker 服务端 (docker daemon)。
解决方案:
- 在
[本地]的 powershell 中 使用 docker 命令 , 基于[远端]docker服务端的地址和端口创建上下文,切换上下文。
# scoop install docker
docker context create wsl --docker "host=tcp://127.0.0.1:2375"
docker context use wsl
# after that you can run it in window:
# docker run --rm -it ubuntu:20.04 bash
当前环境下,[本地] 为 windows 环境。如果是基于 wsl,windows 可以使用127.0.0.1 访问 wsl。如果是基于 hyper-v/virtualbox/vmware 等, 需填写与[本地]处于同一网络下的虚拟机的地址。
end
当前问题: 让 [本地] 的 vscode 连接 [远端] 的 docker 服务端 (docker daemon)。
解决方案:
- 在
[本地]vscode 里打开 设置 docker host 地址和端口。(记得安装 vscode 的docker插件)
当前问题: 想使用 k8s 。 在[远端] 部署 k8s 。部署k8s的方案有多种,kubeadm/minikube/kind/k3s/k3d/mircok8s 等,根据需要选择
解决方案:
[远端]为 windows 环境时,vmware + linux + docker/containred + k8s[远端]为 windows 环境时,virtualbox + linux + docker/containred + k8s[远端]为 windows 环境时,wsl + docker/containred + k8s[远端]为 windows 环境时,wsl + docker desktop for window + k8s[远端]为 windows 环境时,hyper-v + docker desktop for window + k8s
了解更多: 容器化技术 docker + k8s vs containred + k8s
end
当前问题: 让[本地] 的 windows 可以访问 [远端] 的k8s
解决方案:
- 设置 kubeconfig。(todo)
windows 上安装 k8s 管理的开发环境的步骤 - 知乎 (zhihu.com)
# set ~/.kube/config
end
当前问题: 让[本地] 的 vscode 可以访问 [远端] 的k8s
解决方案:
- 安装 vscode 的kubernetes 插件 , 指定 kubeconfig。 (todo)
参考文献
windows 上安装 k8s 管理的开发环境的步骤 (zhihu.com)
Develop a container on a remote Docker host (visualstudio.com)
Alternate ways to install Docker (visualstudio.com)
Sharing git credentials (visualstudio.com)
Use Docker or Kubernetes from a container (visualstudio.com)
Add non-root user to a container (visualstudio.com)
Remote Kubernetes Development in Visual Studio Code with Okteto | Okteto