经验分享|使用code-server为Docker容器搭建在线开发环境
发布时间: 2021-10-21 浏览次数: 690


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版本选择

通过wgetcurl进行下载,然后使用tar -xvzf指令解压这个文件,进入文件夹后运行./code-server,默认映射端口为8080,运行结果如图2所示。

2 命令./code-server运行结果

用浏览器访问服务器的8095端口,界面如图3所示。

3 用浏览器访问服务器的8095端口界面

我们可以在运行命令中加入“--port”参数指定端口,通过export PASSWORD="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-serverubuntu镜像,其他已有镜像也参考该做法。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也是用于指定运行程序,但RUNdocker 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一样安装插件,更高端的用法就需要大家自己进一步去挖掘啦!


总编:黄翰

责任编辑:袁中锦

文字:林国盛

图片:林国盛

校稿:何莉怡

时间:202183