配置 VSCode 远程容器开发环境

快速设置VSCode使用远程服务器(通常是Linux)上的Docker容器来作为开发环境

优点

  • 本地桌面干净: 只有docker客户端
  • 开发环境代码化:Dockerfile
  • 切换环境只需切换容器

远程主机配置

安装 Docker Engine

参考这里官方文档

Docker开启远程端口

在远程主机上:

  1. 创建文件 daemon.json 到目录 /etc/docker:

     {"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}
    
  2. 创建文件 /etc/systemd/system/docker.service.d/override.conf:

     [Service]
     ExecStart=
     ExecStart=/usr/bin/dockerd
    
  3. 重启docker:

     systemctl daemon-reload
     systemctl restart docker.service 
    

本地桌面配置

安装 Open SSH 客户端

Linux/Mac

直接用包管理器安装open-ssh

Win7

  1. 下载编译好的open ssh二进制包:这里
  2. 解压到 C:\OpenSSH
  3. 把 C:\OpenSSH 加到系统环境变量Path上(需要注销再登录才能生效)
  4. 打开cmd,运行
    C:> ssh-agent 
    

确保能找到

Win10

巨硬厂从Win10开始终于向社区靠拢,系统自带open ssh了,参考这个 教程

启用ssh-agent

Linux/Mac

安装了open-ssh以后默认自动运行,如果没有:

 eval "$(ssh-agent -s)"

Win7

PowerShell 窗口里面运行 (administrator 模式):

Set-Service ssh-agent -StartupType Automatic

然后 [Windows Task Manger] --> [Services] 找到ssh-agent,启动它

Win10

添加了openssh以后,应该也是自动运行的

生成 ssh 秘钥对

运行 ssh-keygen

ssh-keygen

一路回车,默认生成两个文件:

  • id_rsa
  • id_rsa.pub

把这个id_rsa.pub 传送到远程主机,复制成文件: ~/.ssh/authorized_keys
如果远程主机上这个authorized_keys已经存在,就添加到后面

cat id_rsa.pub >> ~/.ssh/authorized_keys

本地运行如下命令加上私钥

ssh-add id_rsa

测试一下,无需密码直接ssh连接到远程主机:

ssh <user>@<host>

本地配置 Docker 客户端

安装Docker

Linux/Mac

直接包管理器安装,就这么简单。。。

Windows

下面二选一

  • 方法一:安装docker desktop, -- 其实不需要这么大而全
  • 方法二:下载 docker.exe 放到Path包含的路径下就行了, 比如c:\windows

配置本地使用远程 Docker 服务

创建一个context:

docker context create <context name> --docker "host=ssh://<user>@<host>"

切换到上面这个context:

docker context use <context name>

测试一下:

docker info

这里会输出和在远程主机上运行 docker info 一样的结果, 实际上这里docker本地只是一个客户端,连接到远程主机上的docker服务。

Visual Studio Code

安装 VSCode

这里 VSCode
打开 VSCode, 安装插件:

  • Extensions -> Search Remote -> Remote Development
  • Extensions -> Search Docker -> Docker

开始一个项目!

这里有两个方式,个人觉得第一个更(省)好(事)

方式一: Attach Remote Host Container

远程主机上创建项目

新建一个目录,例如 ~/newproj, 然后加一个Dockerfile,例如:

FROM python                                                                
ENV DEBIAN_FRONTEND=noninteractive 
apt-get update                

然后创建镜像,再启动容器:

docker build . -t <image tag>
docker run -d --name <container name> -v ~/newproj:/workspaces/newproj <image tag> tail -f /dev/null

注意: 这里要挂载项目目录到容器中方便保存文件。tail -f 这个命令是为了让容器保持运行。

本地 VSCode 访问远程容器

切换 Docker context

打开VSCode,按下 ctrl+shift+p 运行 docker contexts use , 选择上面创建的docker context.

连接容器

按下 ctrl+shift+p 运行 Remote-Containers:Attach to Running Container..., 选择上面创建的容器名字。

连接成功后,按下 ctrl+k, ctr+o, 你会发现VSCode弹出的不是本地目录,而是容器内部的目录!现在VSCode只是一个客户端,一切操作都在容器中了!

尝试一下。选择上面创建的 /workspaces/newproj,新建一个main.py,保存。再去主机上看,~/newproj/main.py就躺在那。

现在,可以愉快地在容(工)器(地)里面编(搬)码(砖)了。

方式二 - 微软官方推荐的办(麻)法(烦),略。

总结

VSCode这个Remote Development功能很惊艳,除了使用容器,也可以直接SSH到远程机器,大大减少了远程开发不便使用图形化IDE的痛苦。这个Remote功能也让VSCode直接秒杀了Atom和Sublime等一众搬砖利器,再酱紫下去,JetBrains社区版系列也很危险了。。。

人家不要(脸)钱!不要(脸)钱!不要(脸)钱!JetBrains加油啊。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342