折騰一個(gè)自己的“云編輯器”(1)

因?yàn)榻?jīng)常在一堆服務(wù)器里面周轉(zhuǎn)罚斗,在編輯文件的時(shí)候就會(huì)出現(xiàn)每個(gè)終端的編輯器配置不統(tǒng)一,比如服務(wù)器A的vim是有行號(hào)、帶語(yǔ)法高亮,而到了服務(wù)器B編輯卻是連vim都沒(méi)裝蛆封,到了服務(wù)器C又發(fā)現(xiàn)縮進(jìn)是八個(gè)空格而不是4個(gè)空格∏箍瘢總之每換一臺(tái)服務(wù)器就像來(lái)到一個(gè)不同的世界桂躏。

更不用說(shuō)有時(shí)候會(huì)遇到重裝碳想,原有的編輯器配置又得一一恢復(fù),好麻煩啊毁靶。
(╯‵□′)╯︵┻━┻

所以就有了此文胧奔,統(tǒng)一所有服務(wù)器的編輯器。做到每一臺(tái)服務(wù)器使用 vim 命令編輯文件都是一樣的編輯器環(huán)境预吆。

先上效果圖

“效果圖”什么的都是騙人的啊龙填。

思路

為了讓全部服務(wù)器的vim編輯器界面一樣(包括插件),所以我們得打包起來(lái)存到一個(gè)地方拐叉,可以讓所有服務(wù)器獲取這個(gè)編輯器的最新版本岩遗。

所以最簡(jiǎn)單的就是丟進(jìn)一個(gè)Docker鏡像里面了。

  • 把vim放進(jìn)一個(gè)Alpine鏡像中巷嚣,使用類似下面的命令即可編輯一個(gè)本地當(dāng)前目錄下的文件了喘先。
alias editor='docker run -ti --rm -v $(pwd):/workspace zuolan/vim'
  • 配置修改可以通過(guò)環(huán)境變量或者掛載數(shù)據(jù)卷來(lái)實(shí)現(xiàn)。
  • 添加插件可以重新構(gòu)建鏡像廷粒,也同樣可以掛載數(shù)據(jù)卷添加插件窘拯。

整體不復(fù)雜,只需要把整個(gè)配置丟進(jìn)去就好了坝茎。

Dockerfile

首先寫 Dockerfile 吧涤姊。

FROM alpine:latest
MAINTAINER zuolan <i@zuolan.me>
ENV HOME /home/user

RUN mkdir -p /home/user/workspace

一步步解釋,上面是新建一個(gè)HOME目錄嗤放,作為容器內(nèi)部的“接口”思喊,以后數(shù)據(jù)卷都會(huì)掛載到這里,然后交給容器內(nèi)部的vim編輯次酌。

繼續(xù)恨课,

RUN apk add --update --no-cache vim && \
    rm -rf /var/cache/* /var/log/* /var/tmp/*
ENTRYPOINT ["vim"]

這樣我就有了一個(gè)vim鏡像,當(dāng)然岳服,這是非常簡(jiǎn)陋的剂公,所以接下來(lái)要為它添加一些配置和插件。

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
zuolan/vim                      latest              3c4a2c3e0aac        45 seconds ago      29.63 MB

修改配置文件與添加 Pathogen

因?yàn)槭侵苯觓pk add安裝吊宋,所以配置文件不出意外就是/etc/vim/vimrc這個(gè)文件了纲辽。

現(xiàn)在補(bǔ)充一下Dockerfile,添加語(yǔ)法高亮以及插件璃搜、縮進(jìn)等等:

RUN ... ... ...
    echo "syntax on" >> /etc/vim/vimrc && \
    echo "filetype plugin indent on" >> /etc/vim/vimrc

好了拖吼,接下來(lái)安裝 Pathogen,用來(lái)管理vim插件这吻。

RUN apk add --update --virtual curl && \
    mkdir -p ~/.vim/bundle ~/.vim/autoload ~/.vim_runtime/temp_dirs && \
    curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim && \
    echo "execute pathogen#infect()" >> /etc/vim/vimrc && \
    echo "syntax on" >> /etc/vim/vimrc && \
    echo "filetype plugin indent on" >> /etc/vim/vimrc && \
    apk del curl && rm -rf /var/cache/* /var/log/* /var/tmp/*

敲黑板吊档!劃重點(diǎn)!這里面有個(gè) --virtual 參數(shù)唾糯,很有意思籍铁,參考資料:
https://github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md#virtual-packages

擴(kuò)展

現(xiàn)在我們繼續(xù)完善涡上,雖然還沒(méi)有插件趾断,但是基本都有了拒名。要實(shí)現(xiàn)上面說(shuō)的讓用戶自定義配置,可以通過(guò)掛載 /etc/vim/vimrc 這個(gè)文件芋酌,以及 ~/.vim/bundle 這個(gè)文件夾增显。

以下純屬個(gè)人自定義了。

# 插件依賴
RUN apk --update add curl ctags git python bash ncurses-terminfo                                                && \
# 安裝 YouCompleteMe
    apk add --virtual build-deps go llvm perl cmake python-dev build-base                                       && \
    git clone --depth 1  https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe/    && \
    cd ~/.vim/bundle/YouCompleteMe                                                                     && \
    git submodule update --init --recursive                                                                     && \
    ~/.vim/bundle/YouCompleteMe/install.py --gocode-completer                                          && \
# 安裝 procvim.vim                                                                               
    git clone --depth 1 https://github.com/Shougo/vimproc.vim.git ~/.vim/bundle/vimproc.vim            && \
    cd ~/.vim/bundle/vimproc.vim                                                                       && \
    make                                                                                                        && \
# 清理
    rm -rf ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp /usr/lib/go                                   \
      ~/.vim/bundle/YouCompleteMe/third_party/ycmd/clang_includes                                      && \
    apk del build-deps                                                                                          && \
    apk add libxt libx11 libstdc++
    
RUN cd ~/.vim/bundle/                                                                                  && \
    git clone --depth 1 https://github.com/pangloss/vim-javascript.git && \
    ... ... ... ...
    ... ... ... ...
    ... ... ... ...
    ... ... ... ...
# 自定義配置
    curl -s https://raw.githubusercontent.com/amix/vimrc/master/vimrcs/basic.vim >> /etc/vim/vimrc && \
    curl -s https://raw.githubusercontent.com/amix/vimrc/master/vimrcs/extended.vim >> /etc/vim/vimrc && \
    sed -i '/colorscheme peaksea/d' /etc/vim/vimrc && \
    vim -E -c 'execute pathogen#helptags()' -c q ; return 0
    ... ... ... ...
    ... ... ... ...

還有一些地方?jīng)]完成脐帝,明天接著吧同云,果然一個(gè)晚上是搞不定。
(╯‵□′)╯︵┻━┻


ENV TERM=xterm-256color

為啟動(dòng)容器時(shí)的 --tty 這個(gè)啟動(dòng)參數(shù)指定環(huán)境變量堵腹,這個(gè)問(wèn)題在Docker 1.13修復(fù)了炸站,但是這個(gè)變量還是保留一下吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疚顷,一起剝皮案震驚了整個(gè)濱河市旱易,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腿堤,老刑警劉巖阀坏,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笆檀,居然都是意外死亡忌堂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門酗洒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)士修,“玉大人,你說(shuō)我怎么就攤上這事樱衷∑宄埃” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵箫老,是天一觀的道長(zhǎng)封字。 經(jīng)常有香客問(wèn)我,道長(zhǎng)耍鬓,這世上最難降的妖魔是什么阔籽? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮牲蜀,結(jié)果婚禮上笆制,老公的妹妹穿的比我還像新娘。我一直安慰自己涣达,他們只是感情好在辆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布证薇。 她就那樣靜靜地躺著,像睡著了一般匆篓。 火紅的嫁衣襯著肌膚如雪浑度。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天鸦概,我揣著相機(jī)與錄音箩张,去河邊找鬼。 笑死窗市,一個(gè)胖子當(dāng)著我的面吹牛先慷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咨察,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼论熙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了摄狱?” 一聲冷哼從身側(cè)響起脓诡,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎二蓝,沒(méi)想到半個(gè)月后誉券,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刊愚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年踊跟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸥诽。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡商玫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牡借,到底是詐尸還是另有隱情拳昌,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布钠龙,位于F島的核電站炬藤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碴里。R本人自食惡果不足惜沈矿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咬腋。 院中可真熱鬧羹膳,春花似錦、人聲如沸根竿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至醒颖,卻和暖如春妻怎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背图贸。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工蹂季, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疏日。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撒汉,于是被迫代替她去往敵國(guó)和親沟优。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件睬辐?Google Compute Engi...
    ahohoho閱讀 15,514評(píng)論 15 147
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理挠阁,服務(wù)發(fā)現(xiàn),斷路器溯饵,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一侵俗、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,477評(píng)論 0 120
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,728評(píng)論 1 21
  • 剛剛空間看到一條說(shuō)說(shuō)隘谣,真自信。 如果我的室友這么自信: 如果雙十一我室友能夠全部都脫單 如果雙十一我室友能夠全部都...
    風(fēng)精靈閱讀 148評(píng)論 1 1