Coder 添加自定义镜像


发布于

|

分类

在K8S里面部署了个Coder,这样就能比较方便地切换开发环境了。

但是Coder默认值给了一个裸Ubuntu镜像。对于一个Ubuntu黑来说,Debian才是正道。那么如何才能用自己想用的镜像呢?

我自己试了一下,这个Ubuntu镜像的例子没啥问题。有几个小点注意一下就好了:

  1. 有几个基础包是一定不能缺的,必须要安:bash、ca-certificates、curl、jq、openssh-server、sudo。这几个少了的话,在体验上会有问题,例如少了openssh-server,那么不能用vscode远程连接环境——那还咋玩啊!
  2. 一定要添加一个叫coder的user
  3. 国内神奇的环境,加上我是原版控/官方控,所以每次需要设置一下代理,安装完东西后再取消代理,避免污染环境。

所以Dockerfile就长这样:

FROM debian

USER root
ENV DEBIAN_FRONTEND=noninteractive

ENV http_proxy=http://192.168.12.34:5678
ENV https_proxy=http://192.168.12.34:5678
ENV no_proxy=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    bash \
    ca-certificates \
    curl \
    jq \
    openssh-server \
    sudo \
    git \
    htop \
    && rm -rf /var/lib/apt/lists/*

ENV http_proxy=
ENV https_proxy=
ENV no_proxy=

RUN useradd coder \
    --create-home \
    --shell=/bin/bash \
    --uid=1000 \
    --user-group && \
    echo "coder ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers.d/nopasswd

ENV LANG=en_US.UTF-8
USER coder

用上面这个dockerfile,我尝试了debian、golang和python,都没啥问题。alpine的话需要照猫画虎改改,不过我才不会去「把alpine当成开发环境」来虐自己呢。


如果你在Docker上用,那么大概率不会用到上面这些东西。

如果你在K8s里用,由于K8s自身不能编译镜像……所以自身不能编译镜像😭所以你需要:

  1. 去找个Docker环境,搞一下镜像的编译
  2. 推到仓库里,可以是dockerhub,也可以像我一样自建

这里比较推荐自建仓库。原因是「创建工作环境」这事儿对我来说还是蛮频繁的,每次都去公网上下载,太慢了,不如内网嗖嗖嗖搞定。

我自己是用的registry,好像harbor啥的似乎体验会更好一些。


所以我的工作流是:

  1. 去portainer里,下载镜像
  2. 继续在portainer里,应用上面的模板,做自定义镜像
  3. 给镜像打Tag,推送到私有registry里
  4. 去Coder里创建workspace:简单改了下官方的K8s模板,创建时填一下镜像完整名字就好了。

还是略麻烦。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注