如何有效快速构建和使用Docker的image以便能加速部署?这对于开发和发布循环是非常重要,下面是一些经验分享:
1.尽可能缓存需要互联网下载的内容,部署需要从互联网下载几百兆数据,非常频繁,因此遭遇缓慢互联网连接是经常有的事情,因此,越多使用缓存,就能越快提高部署速度。总体目标是离线,以所有都打包在一起方式部署。
2.将Docker Image看成普通操作系统Image,虽然Docker很强的,但是同时也会有其他类似Docker的选择,为了支持部署环境需要或不需要Docker,我们应该对CI部署配置面对这两种场景。
3.对Docker Image中所有包和安装服务进行审计。我们是从Image启动Docker 容器,Docker会列表和检查所有包和安装服务,为什么?首先需要保持Docker image尽可能小,image传输会更快,其次,个更多包和服务激活,我们会了解到更多情况,比如包冲突或争夺TCP端口等情况会发生,最好保持Docker image简单而stupid。
4.在每次Docker构建完成后,清除关闭所有服务,如果你不这么做,服务会在Docker image生命周期结束后才会被杀死,服务的锁文件/var/lock/*会出现不正常情况,当我们在每次新构建image后测试部署时,便会出现服务无法启动的情况,从而导致无法启动有效测试工作。
5.增加验证步骤,当情况变化,我们需要重新构建Docker image,为了确认每件事都完美,我们可以增加自动验证逻辑到Docker的构建过程中。
下面是作者以上五个建议的实践构建样本:
########## How To Use Docker Image ############### ## docker run -t -d --privileged -p 8022:22 \ ## denny/mydockertest:v1 /usr/sbin/sshd -D ## ################################################## FROM denny/sshd:v1 MAINTAINER Deny <denny@dennyzhang.com> ARG devops_branch=master ARG working_dir=/root/chef ################################################## # Install basic packages RUN apt-get -yqq update && \ apt-get -yqq install curl && \ apt-get -yqq install openssh-server && \ apt-get install -y sudo lsb-release && \ # Install chef curl -L https://www.opscode.com/chef/install.sh | bash && \ # clean up files to make this docker layer smaller rm -rf /var/chef/cache/*.plugin && \ rm -rf /usr/share/doc && \ apt-get clean && apt-get autoclean ################################################## # checkout code RUN bash /root/git_update.sh ${working_dir} \ git@github.com:DennyZhang/chef_community_cookbooks.git \ ${devops_branch} && \ echo "cookbook_path [\"${working_dir}/${devops_branch}/mdmdevops/community_cookbooks\", \ \"${working_dir}/${devops_branch}/mdmdevops/cookbooks\"]" \ > /root/client.rb # Chef all-in-one deployment. This step takes minutes RUN echo "{\"run_list\": [\"recipe[all-in-one::predownload]\"]}" \ > /root/client.json && \ chef-solo --config /root/client.rb -j /root/client.json && \ # Clean up to make docker image smaller rm -rf /tmp/* /var/tmp/* && \ rm -rf /var/chef/cache/jdk-*.tar.gz && \ rm -rf /var/chef/cache/*.plugin && \ rm -rf /usr/share/doc && \ apt-get clean && apt-get autoclean ################################################## # Shutdown services RUN service couchbase-server stop || true && \ service elasticsearch stop || true && \ service nagios3 stop || true && \ service apache2 stop || true && \ service haproxy stop || true && \ service nagios-nrpe-server stop || true && \ rm -rf /run/apache2/apache2.pid && \ rm -rf /var/log/apache2/* && \ rm -rf /usr/local/var/run/vagrant_ubuntu_trusty_64.pid && \ rm -rf /root/docker.rb /root/docker.json # Verify docker image RUN test -f /var/chef/cache/couchbase-server-enterprise_4.1.0-ubuntu14.04_amd64.deb && \ test -f /var/chef/cache/elasticsearch-2.3.3.deb && \ test -f /etc/apt/sources.list.d/ruby2.1-repo.list && \ test -f /etc/apt/sources.list.d/haproxy-repo.list && \ dpkg -s haproxy | grep "1.6.5" # Clean up to make docker image smaller RUN rm -rf /tmp/* /var/tmp/* /var/chef/cache/jdk-*.tar.gz && \ rm -rf /var/chef/cache/*.plugin && \ rm -rf /usr/share/doc && \ apt-get clean && apt-get autoclean EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] ##################################################
|
Five Tips for Building Docker Images - DZone DevOp