开发环境代码化: VSCode远程Docker容器作为开发环境

快速设置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加油啊。

强迫症,只喜欢简单优雅的东西

15 声望
1 粉丝
0 条评论
推荐阅读
花了半个小时基于 ChatGPT 搭建了一个微信机器人
相信大家最近被 ChatGPT 刷屏了,其实在差不多一个月前就火过一次,不会那会好像只在程序员的圈子里面火起来了,并没有被大众认知到,不知道最近是因为什么又火起来了,而且这次搞的人尽皆知。

Java极客技术12阅读 3.1k评论 3

封面图
张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 1k评论 2

封面图
利用Docker部署管理LDAP及其初次使用
前言:本周主要写了gitlabWebhook转github的项目,总体上没有遇到什么大问题,这周接触到了LDAP,于是就花时间实际操作了解了一下。

李明5阅读 1.2k

Docker学习:Image的本地存储结构
在使用Docker时候,针对镜像的操作一般就是docker pull,docker build,docker commit(刚开始接触Docker的时候,还不会Dockerfile,经常使用这个命令,但是经历了一次血的教训,已经放弃这个命令很久)这些操作...

backbp4阅读 10k评论 3

使用docker快速搭建xssPlatform测试平台实践
笔者之前给一些开发团队多次做Web安全开发培训,为了让培训的学员能够理解XSS原理和XSS的危害,将xssPlatform进行了更新,之前一直放在GitHub中;发现关注的人越来越多,很多人在安装的过程中遇到问题不知道怎么...

汤青松1阅读 26.2k

将node.js 应用构建成docker镜像
本文内容:将node.js 应用构建成dokcer镜像, 并上传到阿里云创建 Node.js 应用1.首先,创建一个 package.json 文件,描述你应用程序以及需要的依赖: {代码...} 2.运行 npm install这会自动生成一个 package-lock...

weiweiyi3阅读 706

VSCode 格式化哲学
当我们说「团队需要统一的代码样式」,大家都没有什么反对意见;但当问题变为「统一成什么样式?」时,大家的声音就嘈杂了起来。人们对于特定的编码方式很抵触,没有人喜欢花时间这样写代码,没人愿意接受别人的...

Cheri2阅读 799

强迫症,只喜欢简单优雅的东西

15 声望
1 粉丝
宣传栏