考慮到最後生成的映象體積一定要小,所以不選用ubuntu或是centos系統,而是使用輕量級linux作業系統alpine,只有幾兆 大小。實際上docker hub上有基於alpine的vim映象,jare/vim-bundle ,本文很多地方也參考了其dockerfile的寫法。這個映象整合了很多vim外掛程式,但是唯獨youcompleteme會報錯,而我之前已經習慣了ycm這個神器,所以重新做了乙個。
.com/alpine/v3.6/community於是在dockerfile中這麼寫就可以安裝支援python的vim了。
from alpine:latest
add repositories /etc/apk/repositories
run apk update
run apk add build-base \
ctags \
git \
libx11-dev \
libxpm-dev \
libxt-dev \
make \
ncurses-dev \
python \
python-dev
#build vim
run cd /tmp \
&& git clone \
&& cd /tmp/vim \
&& ./configure \
--disable-gui \
--disable-netbeans \
--enable-multibyte \
--enable-pythoninterp \
--prefix /usr \
--with-features=big \
--with-python-config-dir=/usr/lib/python2.7/config \
&& make install \
&& cp /usr/share/vim/vim80/vimrc_example.vim ~/.vimrc
最後一步我們將vimrc_example.vim拷貝到根目錄下的.vimrc檔案,作為我們vim的配置檔案。之後對vim的一些配置都寫到/root/.vimrc檔案中。
你可以在vim中輸入ycmdebuginfo
來檢查ycm是否有錯誤,以及輸入ycmtogglelogs **stderror**.log
來檢視錯誤日誌。很可能出現的報錯是:
full error: libtinfo.so.5: cannot open shared object file: no such file or directory
這種報錯就說明libclang沒有安裝好。
然而不知為何,如果不執行install.py,即便自己安裝了libclang,在進行編譯ycm_core時依舊提示找不到libclang.so。於是我採用了乙個折衷的辦法,就是執行install.py之後用/usr/lib/libclang.so
代替../third_party/ycmd/libclang.so
,終於執行ycm不再報錯。
於是可以在dockerfile中這麼寫
#build ycm
run apk add clang cmake
run git clone --depth 1 /root/.vim/bundle/youcompleteme \
&& cd /root/.vim/bundle/youcompleteme \
&& git submodule update --init --recursive \
&& ./install.py --clang-completer
run cp ~/.vim/bundle/youcompleteme/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/ \
&& cd ~/.vim/bundle/youcompleteme && cp -r autoload plugin third_party python /root/.vim \
&& cp /usr/lib/libclang.so
.4.0 ~/.vim/third_party/ycmd/
配置vimrc如下:
#config .vimrc
run echo
"let g:ycm_server_python_interpreter='/usr/bin/python2.7'" >> /root/.vimrc \
&& echo
"let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'" >> /root/.vimrc \
&& echo
"let g:ycm_seed_identifiers_with_syntax=1" >> /root/.vimrc \
&& echo
"set completeopt-=preview" >> /root/.vimrc
還要刪除多餘的檔案以減小映象體積。然而最後建立的映象仍然有1個多g,顯然太大了,不知道還有沒有好的辦法進一步減小映象體積。
#clear
run rm -r /root/
.vim/bundle/youcompleteme
run rm -r /tmp/vim
設定entrypoint如下:
#entrypoint
#run cd /usr/local/bin && touch run && echo "cd /home"
>>run && echo "vim $@"
>>run && chmod +x run
於是就使用指令docker run -ti --rm -v $(pwd):/home your_image_name
建立乙個臨時的ycm容器了。 用 Docker 建立 serverless 應用
當今世界會時不時地出現一波波科技浪潮,將以前的技術拍死在海灘上。針對 serverless 應用的概念我們已經談了很多,它是指將你的應用程式按功能來部署,這些功能在被用到時才會啟動。你不用費心去管理伺服器和程式規模,因為它們會在需要的時候在乙個集群中啟動並執行。但是 serverless 並不意味著...
用 Docker 建立 serverless 應用
當今世界會時不時地出現一波波科技浪潮,將以前的技術拍死在海灘上。針對 serverless 應用的概念我們已經談了很多,它是指將你的應用程式按功能來部署,這些功能在被用到時才會啟動。你不用費心去管理伺服器和程式規模,因為它們會在需要的時候在乙個集群中啟動並執行。但是 serverless 並不意味著...
安裝docker,建立容器
linux最小化安裝時沒有netstat命令 可以使用yum y install net tools安裝 刪除舊版本,如果沒有可以不執行 yum remove docker docker client docker client latest docker common docker latest ...