定制code-server docker镜像,并GitHub自动构建

编写Dockerfile

对于镜像的需求主要是集成C++和Java环境。

需要安装两个语言的编译器,和相应的vscode插件。

由于code-server属于第三方编译的vscode版本,然而vscode的插件商店是没有开源的,所以对于cpptools这个插件只能从GitHub仓库下载后离线安装。

FROM codercom/code-server:latest

# 安装编译器
RUN sudo apt-get update \
    && sudo apt-get install -y \
    gcc \
    gdb \
    g++ \
    python3 \
    openjdk-17-jdk \
    wget

#安装插件
RUN code-server --install-extension redhat.java \
    && code-server --install-extension vscjava.vscode-maven \
    && code-server --install-extension vscjava.vscode-java-dependency \
    && code-server --install-extension vscjava.vscode-java-debug \
    && code-server --install-extension vscjava.vscode-java-test \
    && code-server --install-extension formulahendry.code-runner 

RUN wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.9.7/cpptools-linux.vsix \
    && code-server --install-extension cpptools-linux.vsix && rm cpptools-linux.vsix

在保证良好的网络条件下,构建镜像

sudo docker build -t hanplus/candjava-code-server:2.0 .

测试镜像

使用docker run来运行生成的镜像

解释

--name 设置容器的名字

-p 端口映射,外部端口:内部端口

-v 挂载目录 冒号”:”前面的目录是宿主机目录,后面的目录是容器内目录。目的是把code-server的配置文件放到容器外面防止容器进一步变大

-w 设置运行的默认目录

sudo docker run -it \
--name code-server \
-p 666:8080 \
-v ~/.config/code-server:/home/coder/.config/code-server  \
-v ~/.local/share/code-server:/home/coder/.local/share/code-server \
-v ~/Personal:/home/coder/Personal \
-w /home/coder/Personal \
hanplus/candjava-code-server:3.0

启动容器

会产生权限问题,挂载目录后的所有者为root,把这三个个文件夹的所有者修改为ubuntu

运行成功

使用GitHub Action自动构建镜像

创建一个工作流程.github/workflows/docker-image.yml

name: Docker Image CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Build the Docker image
      run: docker build -t hanplus/candjava-code-server:2.0 .
      
    - name: Login to Docker Hub
      uses: docker/login-action@v1
      with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
    - name: Build and push
      uses: docker/build-push-action@v2
      with:
          push: true
          tags: hanplus/candjava-code-server:2.0

开始构建

目前还没有找到方法,在coder/code-server镜像推送后自动构建本镜像,敬请期待。

服务器自动更新

仅仅需要一个简单的shell脚本,配合宝塔面板的计划任务,每晚自动检查更新。


#pull镜像,如果是最新镜像,输出中会包含"Image is up to date",并将输出赋值到变量
isUpdate=$(docker pull hanplus/candjava-code-server:latest)

#作为日志输出
echo $isUpdate
strB="Image is up to date"

#检查字串,判断是否是最新镜像
if [[ $isUpdate =~ $strB ]]
then
  echo "无需更新"
  exit
else
  echo "准备更新"
fi


docker rm -f  666baby_code-server #删除旧的容器



#开始运行新的容器
docker run -d \
--name 666baby_code-server   \
-p 666:8080 \
-p 676:22 \
-v /www/wwwroot/code.onbed.cn/code-server.config:/home/coder/.config/code-server  \
-v /www/wwwroot/code.onbed.cn/data:/home/coder/.local/share/code-server \
-v /www/wwwroot/code.onbed.cn/Personal:/home/coder/Personal \
-w /home/coder/Personal \
--restart=always \
hanplus/candjava-code-server

目前还没实现自动启动构建镜像在官方发布镜像的时候。

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
上一篇
下一篇