手把手提高开发体验:dev-container

简介: 手把手提高开发体验:dev-container

之前看过方应杭的一期工作流视频,讲他是如何配置开发环境的。讲真,这期视频给我一丝震撼,原来不用虚拟机也能在 linux 上开发,但是它的配置过于复杂,我想配置一套自己的一套开发环境

视频中的 remote-container 已经更名为 dev-container,而 0.245.2 以上版本的 dev-container 有问题,会报"An error occured setting up the container - Remote Docker",在 Issues 中有人给出了方法是降级到 0.245.2

当降级到 0.245.2,就可以愉快地使用 dev-container 了

现在我们已经成功了 dev-container 插件

现在我们要做的是,通过 dockerfile 生成一个 linux 容器,并在这个容器中开发

小试牛刀

FROM centos:8
RUN uname -a
RUN cat /etc/os-release

我们基于 centos:8 来构建一个镜像,其中,打印系统名和查看系统

基于centos的镜像

点击添加终端,就进入容器中了,这个容器就是我们基于 vscode 的 dev-container 插件

vscode中的linux

如果只是个裸机,是万万不行的,我们需要安装一些开发环境和应用,提高我们的开发效率

更新所有包

在更新包之前,我们要先修改 centos 的镜像源

RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

修改成国内的镜像,再更新包

RUN yum update -y

下载 vim

先下载 vim

RUN yum install vim -y

如何配置,怎么配置 vim,介于还处于新手阶段,就常规操作即可,不用配置什么

下载 oh-my-zsh

如果冒冒失用它官网的下载链接,会报错

RUN sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

意思是说 Github 的 raw.githubusercontent.com域名解析污染,访问不了

解决方法有不少,如通过修改hosts解决此问题,先在 ipaddress查询raw.githubusercontent.com的真实IP,再修改 hosts

vim /etc/hosts

添加199.232.68.133 raw.githubusercontent.com

hosts

重新下载 zsh

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

zsh安装成功

这方法只能在 linux 中使用,如果你要用 dockerfile 中修改 /etc/hosts,就行不通,因为 /etc/hosts 文件是只读的,笔者在这里花了不少时间想解决,但还是没找到解决方法

还有一种方法是修改下载源,换成国内地址

sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"

并将默认命令行修改成 on-my-zsh

RUN chsh -s /bin/zsh

但这个方法需要两个前提,一是需要下载 git

RUN yum install git -y

二是因为 centos 8 系统中并未带 chsh 命令工具,会提示 chsh: command not found,原因是系统没有自带的 util-linux-user 工具包导致,所以在执行 chsh 命令前,先安装它

RUN yum install util-linux-user -y

如此,我们就配置好了一个基于 centos 的有 vim、on-my-zsh 的 linux 环境

完整的 dockerfile 如下所示:

FROM centos:8
RUN uname -a
RUN cat /etc/os-release
# 修改镜像源
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# 更新系统
RUN yum update -y
# vim
RUN yum install vim -y
# chsh
RUN yum install util-linux-user -y
# git
RUN yum install git -y
# oh-my-zsh
RUN yum install zsh -y
RUN sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
RUN chsh -s /bin/zsh

光有这些不够,还要下载前端环境、如 node 、pnpm,还有后端环境,笔者最近也对 ruby 很感兴趣,也会在这里安装 ruby 环境

前端环境

我们采用 nvm 来控制 node 版本

安装 nvm 的方式有很多种,像方应杭是下载源码,再拷贝到容器中,如果没有网络限制,也可以用 curl 下载等等,我采用的是 git install

ENV NVM_DIR /root/.nvm
RUN git clone https://github.com/nvm-sh/nvm.git /root/.nvm/
# RUN git checkout v0.39.3
RUN sh ${NVM_DIR}/nvm.sh &&\
 echo '' >> /root/.zshrc &&\
 echo 'export NVM_DIR="$HOME/.nvm"' >> /root/.zshrc &&\
 echo '[ -s "${NVM_DIR}/nvm.sh" ] && { source "${NVM_DIR}/nvm.sh" }' >> /root/.zshrc &&\
 echo '[ -s "${NVM_DIR}/bash_completion" ] && { source "${NVM_DIR}/bash_completion" } ' >> /root/.zshrc

再通过 nvm 下载最新版本的 node

RUN nvm install stable

但是这样会报错,说 nvm: command not found,为什么这样,不求甚解,去找另一种解决方法

笔者选择先安装个默认版本的 node 和 npm,按照这里的包管理安装

RUN dnf module install nodejs:16

默认dnf module install nodejs 会安装 v10版本,太低了,最高16,选新不选久

再下载 pnpm ,将其设为包管理器

RUN curl -fsSL https://get.pnpm.io/install.sh | sh -

如此一来,前端的开发环境以及 node 环境就在这个 dockerfile 中了

ruby 环境

我找的教程是这个,日本人做的,内容很齐全,按照步骤,能运行好环境

RUN dnf module install ruby:3.0 -y
RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
RUN curl https://dl.yarnpkg.com/rpm/yarn.repo > /etc/yum.repos.d/yarn.repo
RUN dnf -y install ruby-devel rpm-build make gcc gcc-c++ gcc-gdb-plugin libxml2 libxml2-devel mariadb-devel zlib-devel libxslt-devel
RUN gem install nokogiri -- --use-system-libraries
RUN gem install rails --version="~>7.0"

如此一来,我们的开发环境就初步弄好了,我将它发布到 dockerhub 上,如果有需要,可以以此改造

总结

这篇文章花了我不少时间,主要很多 linux 知识点为涉猎过,之前也没在虚拟机上配置 linux 的经验。不过还好,算完成了,如此一来,开发时就可以用 vscode + linux 开发应用了,剩下的就是熟悉它

参考资料

  • 山竹记账:开发环境
  • 方应杭Oh My Docker
  • oh-my-zsh,最好用的 shell,没有之一
  • Dockerfile实现修改容器hosts文件内容
  • Starting ssh-agent on Windows 10 fails: "unable to start ssh-agent service, error :1058"
  • VS Code: Remote Container: Using SSH


相关文章
|
12月前
|
存储 数据库
掌握GitLab数据备份与恢复:全面操作指南
【10月更文挑战第11天】 GitLab作为一个流行的开源代码仓库管理系统,其数据的安全性和完整性至关重要。本文将详细介绍GitLab数据的备份与恢复流程,帮助用户掌握如何保护和管理他们的GitLab实例。
1128 0
|
消息中间件 安全 Kafka
一文搞懂Kafka中的listeners配置策略
1. listeners中的plaintext controller external是什么意思? 2. Kraft模式下controller和broker有何区别? 3. 集群节点之间同步什么数据,通过哪个端口,是否可以自定义端口? 4. 客户端通过哪个端口连接到kafka,通过9092连接的是什么,broker还是controller? 5. 为controller配置了单独的端口有什么用? 6. control.plane.listener.name与controller.listener.names有何区别?
2604 2
|
存储 传感器 自动驾驶
几种常见的点云格式数据解析与在线预览
3D模型在线转换网站支持pcd、pts、xyz、las、laz、asc、ply等点云格式文件在线预览,同时支持将点云格式在线转换为ply、xyz等模型格式。
5806 1
|
JSON 负载均衡 前端开发
一文带你详细了解Open API设计规范
一文带你详细了解Open API设计规范
8287 1
|
JSON Kubernetes Unix
Kubernetes crictl管理命令详解
Kubernetes crictl管理命令详解
|
消息中间件 分布式计算 Hadoop
|
7月前
|
开发工具 Docker 容器
MCR 微软 docker dotnet 镜像加速
docker-mcr 是一个 dotnet core global tool,作用是加速下载 mcr 提供的 dotnet 镜像。简单几步,便可以进行安装和使用。
558 82
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
5890 24
|
缓存 自然语言处理 Docker
[Docker] DevContainer高效开发(第一篇):基于remote container开发
VS Code的Dev Containers简化了Python的容器化开发,将开发环境与应用一同打包在Docker中,消除环境配置问题。这种方式使得多语言、多版本开发变得整洁高效。
1400 0