Code-server是一個基於服務端的開源VSCode。只要伺服器端配置好code-server,就可以在任何瀏覽器上使用VScode訪問伺服器的代碼進行編程。
(GitHub地址:https://github.com/cdr/code-server)
Docker是一個開源的Linux容器引擎。我們在日常的開發任務中可以利用Docker容器快速地搭建實驗環境或對項目進行遷移部署。下面先簡單介紹一些Docker的常用指令:
docker build:根據Dockerfile文件創建鏡像docker start/stop/restart:啟動/停止/重啟容器docker ps:查看容器列表,默認顯示正在運行的容器,-a顯示所有容器更多更詳細的指令可以查閱:
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日
想了解更多智能算法最新研究進展、學術活動與經驗交流等
實驗室負責人:黃翰教授
聯繫郵箱:hhan@scut.edu.cn