dockerfile构建前端vim环境

开篇

开篇呢我想贴下上一篇的发布代码。

1
docker push que01/vim

如果,我是说如果你自己也曾经这样push一个容器过,那么就会知道在国内这环境通过跨洋电缆把这容器传到dockerHub是多么艰辛。

而且一旦使用的baseBox更新了,如果你也打算跟着更新时候,如果使用这种方式会让人彻底崩溃。

所幸,我们有自动构建这个工具。linux的自动构建工具其实有很多,好几年前毕业前个人曾经仰望过,似乎需要进行shell编程,所以望而却步了。不过Docker的dockerfile却如此简单。

本文算是对上一篇进行了自动化构建。

不过考虑到官方的centos(70M+)比ubuntu(120M+)要小一些。所以我干脆换了centos做baseBox。如果有可能再尝试下更小的alpine Linux,这才是真正的小到极致吧。不过本文构建的镜像应当还是有用的。毕竟centos是非常常用的一个发行版。
体积这事,这算是用屌丝版mbpr的怨念吧。。。

7.15更新
今天用alpine做baseBox完成了同样的工作,体积来说实在是小了太多了。压缩后为64M,一旦解压也只有220M不到。算是小到极致了。que01/docker-vim-tiny 大家可以去看看Dockerfile怎么写的。这里不再赘述。alpine的包管理实在不太熟,错误太多次才搞好。。。

Dockerfile

创建相关的自动化配置文件:

1
2
touch Dockerfile
atom Dockerfile

把下面代码贴进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
FROM centos

MAINTAINER que01 <que01@foxmail.com>

RUN yum install -y --nogpgcheck vim git zsh python-devel cmake && yum groupinstall --nogpgcheck -y "Development tools" && \
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" && \
echo "export TERM='xterm-256color'" >> ~/.zshrc && \
git clone https://github.com/que01/vimrc ~/.vim_runtime && cd ~/.vim_runtime && \
sh install_awesome_vimrc.sh && git submodule init && git submodule update && \
cd ~/.vim_runtime/sources_non_forked/YouCompleteMe && git submodule update --init --recursive && \
curl --silent --location https://rpm.nodesource.com/setup_4.x | bash - && yum -y --nogpgcheck install nodejs && \
./install.py --tern-completer && \
yum remove -y cmake libarchive lzo gcc cpp glibc-devel glibc-headers kernel-headers libgomp libmpc mpfr \
autoconf automake bison byacc cscope ctags diffstat doxygen elfutils flex gcc-c++ gcc-gfortran gettext \
indent intltool libtool make patch patchutils rcs redhat-rpm-config rpm-build rpm-sign subversion swig \
systemtap apr apr-util avahi-libs boost-system boost-thread bzip2 dwz dyninst emacs-filesystem file gdb \
gettext-common-devel gettext-devel gettext-libs gnutls kernel-devel libcroco libdwarf libgfortran libmodman \
libproxy libquadmath libunistring m4 mokutil neon nettle pakchois trousers unzip zip libquadmath-devel \
libstdc++-devel perl-Test-Harness perl-Data-Dumper perl-Thread-Queue perl-XML-Parser perl-srpm-macros \
subversion-libs systemd-sysv systemtap-client systemtap-devel systemtap-runtime && \
yum clean all && cd ~/.vim_runtime && find . -name ".git" | xargs rm -Rf

下面简单讲讲为什么要这么写,也不枉当初大学时候那么喜欢linux,装遍各大发行版。。。

Dockerfile相关

这里个人也是新手,仅仅用了三个相关的命令:

  • FROM 设置基础的镜像baseBox
  • MAINTAINER 设置维护者信息
  • RUN 编写要在容器内部运行的脚本。

另外说一下要将所有命令用&&写一行的原因:因为之前看过一篇文章,其介绍说每个RUN会创建一层容器导致打包体积变大,所以直接这样写了。

Linux相关的东西

这里也就讲讲RUN里面的命令。

yum是centos的包管理工具,这个和ubuntu的apt-get是一类的东西。我们在centos里面使用yum install xxx来安装一个包。

  • -y 选项用来静默安装,对各种需要交互的环节帮你自动按y
  • –nogpgcheck 这个嘛,因为我当时install时候会提示gpg不对,这个用来取消签名或者证书检查

相关安装的软件包:

  • vim git zsh 这几个不用提
  • python-devel cmake “Development tools” 编译YouCompleteMe要用
1
2
3
git clone https://github.com/que01/vimrc ~/.vim_runtime && cd ~/.vim_runtime && \
sh install_awesome_vimrc.sh && git submodule init && git submodule update && \
cd ~/.vim_runtime/sources_non_forked/YouCompleteMe && git submodule update --init --recursive && \

这排代码是我个人的vimrc的git repo,里面使用submodule加入了youcompelteMe,相关代码都是获取必要的文件用的。上篇文章介绍过,可以放心用。

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

这行是oh-my-zsh,centos里面自带了curl,那么就不用ubuntu里面那样安装一个了。

1
curl --silent --location https://rpm.nodesource.com/setup_4.x | bash - && yum -y --nogpgcheck install nodejs

这行呢,是nodejs官网的,安装node用的,ternJs需要这个。

1
./install.py --tern-completer

这行是编译youcompelteMe用的,官方Readme可查。–tern-completer用来自动安好ternjs,不过需要node支持。

1
yum remove -y xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

这个超级长的一排是安装编译环境yum groupinstall –nogpgcheck -y “Development tools”时候自动安装的依赖啊什么,编译完了就卸载掉。

1
yum clean all && cd ~/.vim_runtime && find . -name ".git" | xargs rm -Rf

清除yum包的各种缓存,然后进入vimrc配置文件夹,删除下该文件夹下所有的.git文件夹以求减少体积(YouCompleteMe的git库还是非常大的!)。

收尾

其实这篇就是对上一篇的自动化构建,没有太多值得一提的地方,主要是对yum比较熟悉就行了。
另,编译好的镜像已经发布了。大家需要可以使用下面命令pull回来:

1
docker pull que01/vim

下载体积也就138M,不过解压完毕有420M,感觉dockerHub真是黑科技!