经验分享|使用code-server为Docker容器搭建在线开发环境
来源: 黄翰/
华南理工大学
3096
0
0
2021-11-02

Code-server是一个基于服务端的开源VSCode。只要服务器端配置好code-server,就可以在任何浏览器上使用VScode访问服务器的代码进行编程。

(GitHub地址:https://github.com/cdr/code-server

Docker是一个开源的Linux容器引擎。我们在日常的开发任务中可以利用Docker容器快速地搭建实验环境或对项目进行迁移部署。下面先简单介绍一些Docker的常用指令:

  • 与镜像相关的常用指令
docker run:根据镜像创建容器
docker images:查看本地镜像列表
docker build:根据Dockerfile文件创建镜像
docker rmi:删除镜像
docker load:导入镜像
docker save:导出镜像
  • 与容器相关的常用指令
docker start/stop/restart:启动/停止/重启容器
docker exec:让正在运行的容器执行命令
docker attach:连接正在运行的容器
docker ps:查看容器列表,默认显示正在运行的容器,-a显示所有容器
docker top:查看容器中运行的进程信息
docker rm:删除容器

更多更详细的指令可以查阅:

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日


登录用户可以查看和发表评论, 请前往  登录 或  注册
SCHOLAT.com 学者网
免责声明 | 关于我们 | 联系我们
联系我们: