Code-server是一个基于服务端的开源VSCode。只要服务器端配置好code-server,就可以在任何浏览器上使用VScode访问服务器的代码进行编程。
(GitHub地址:https://github.com/cdr/code-server)
Docker是一个开源的Linux容器引擎。我们在日常的开发任务中可以利用Docker容器快速地搭建实验环境或对项目进行迁移部署。下面先简单介绍一些Docker的常用指令:
更多更详细的指令可以查阅:
www.runoob.com/docker/docker-command-manual.html。
但是在使用Docker容器进行编程的时候,因为Docker是不带图形界面的,在不安装其他工具的情况下,我们只能使用vim等命令行文本编辑器。如何能像平常编程一样舒适地使用VSCode之类好用的编辑器呢?Code-server腾空出世解君愁,让你在Docker容器中拥有使用VSCode编程的愉快体验。
我们先总结一下在Docker中使用code-server需要的操作:一是执行docker run命令时使用-p参数进行端口映射,二是在Docker容器中安装code-server并运行起来。接下来,我们通过一个示例来介绍一下整个流程。
首先,我们运行一个镜像ubuntu:latest的容器,指令如下所示。
docker run -it –name code-server-test -p 8095:8080 ubuntu:latest bin/bash |
其中,“-p 8095:8080”参数表示将容器中的8080端口与宿主机的8095端口进行端口映射。
示例使用的是ubuntu镜像,故选择Linux64位的amd64版本下载,而对于arm架构的环境要选择arm64版本下载,下载地址为:
https://github.com/cdr/code-server/releases。
由于国内访问github速度可能较慢,因此国内可以使用备用的下载地址:
https://gitee.com/ncr/code-server/releases。
示例选择使用如图1所示版本的code-server。
图1 code-server版本选择
通过wget或curl进行下载,然后使用tar -xvzf指令解压这个文件,进入文件夹后运行./code-server,默认映射端口为8080,运行结果如图2所示。
图2 命令./code-server运行结果
用浏览器访问服务器的8095端口,界面如图3所示。
图3 用浏览器访问服务器的8095端口界面
我们可以在运行命令中加入“--port”参数指定端口,通过exportPASSWORD="pwd"来指定登录密码。如以下指令所示:
export PASSWORD="mima" && ./code-server --port 8090 |
其中,我们设置环境变量PASSWORD,即指定了登录密码为“mima”,而参数“--port 8090”指定了访问端口为8090。运行结果如图4所示。
图4 指定登录密码操作
以上是对如何在一个运行中的容器中下载和运行code-server的介绍。如果能够正常访问Github,推荐使用官方仓库提供的install.sh安装脚本进行操作。
然而,很多时候我们希望从镜像运行开始,进入容器时就能自动完成这些操作,所以下面我们将介绍如何通过Dockerfile文件构建自动运行code-server的镜像。
Dockerfile是用于构建镜像的文本文件,包含指令和说明,详细用法可查看:
https://docs.docker.com/engine/reference/builder。
这里我们直接通过Dockerfile文件来定制一个可以直接使用code-server的ubuntu镜像,其他已有镜像也参考该做法。Dockerfile文件的内容如下:
FROM ubuntu:latest RUN apt update \ apt install -y curl RUN curl -fsSL https://code-server.dev/install.sh | sh CMD export PASSWORD="mima" && code-server --host 0.0.0.0 EXPOSE 8080 |
其中,FROM指定新镜像构建时所基于的基础镜像,RUN指定执行相关命令行命令,CMD也是用于指定运行程序,但RUN在docker build时运行,CMD作为启动的容器默认运行的程序,在docker run时运行。EXPOSE声明端口,主要是帮助镜像使用者了解该镜像需要进行映射的端口。
将Dockerfile文件放到一个空的目录下,然后运行下面的命令:
docker build -t ubuntu:code-server . |
这样我们就得到了一个ubuntu:code-server镜像,在使用时只需运行:
docker run -p 8099:8080 ubuntu:code-server |
这时,用浏览器访问服务器的8095端口即可使用VScode访问服务器的代码进行编程,同时还可以访问服务器上的图片,如图4所示。在使用code-server之前,我就是笨笨地通过文件传输先将图片传到本地再打开,搞过图像的小伙伴应该懂我的痛苦(T ^ T)。
图5 用浏览器访问服务器上的图片
在图5中的Dockerfile文件中,我们选择直接使用官方仓库提供的install.sh安装脚本,避免由于国内访问Github的速度可能不理想而导致安装失败。
所以Dockerfile文件中的“RUN curl -fsSL https://code-server.dev/install.sh | sh”这一步操作可以改为先预先下载好安装包并放到Dockerfile文件的同一个目录下,然后使用COPY指令复制该安装包来完成镜像构建。
希望大家可以使用code-server更好地完成在服务器上的编码工作,而不再需要对着一个粗糙的黑框框进行编码了(当然,熟悉使用vim的大佬可以忽略~)。此外,code-server还支持像VSCode一样安装插件,更高端的用法就需要大家自己进一步去挖掘啦!
总编:黄翰
责任编辑:袁中锦
文字:林国盛
图片:林国盛
校稿:何莉怡
时间:2021年08月03日