五个小技巧,快速创建 Docker 镜像 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dataman
V2EX    Docker

五个小技巧,快速创建 Docker 镜像

  •  
  •   dataman 2017-01-05 15:32:51 +08:00 2989 次点击
    这是一个创建于 3202 天前的主题,其中的信息可能已经有所发展或是发生改变。

    毫无疑问,容器是 DevOps 世界一个突破性的技术。镜像创建对于部署和发布环节都非常重要。那么如何效率地创建和使用镜像来提升部署速度呢?以下是作者的经验和分享,大家不妨一试

    1. 尽可能多地缓存网络下载

    通常部署需要从 Internet 下载成百上千 MB 的数据。因此部署常受到网速慢或者断网的困扰。

    而缓存得越多,部署得就会越快。最终的目标是实现 Docker 镜像离线一键部署。

    2. 把 Docker 镜像看做 Plain OS Golden Image

    Docker 很强力,但是我们也有很多 VM 或者裸机部署。为了避免供应商锁定,通常需要选择是否用 Docker 支持部署,最好两种场景都实施部署持续集成。

    举例来说,如果使用 kitchen 来做持续集成。默认情况下,使用自定义 Docker 镜像来测试。当 IMAGE_NAME 指定为 ubuntu:14.04 时,可以很肯定 ubuntu:14.04 系统对于部署非常适用。

    3. 审核 Docker 镜像里所有包和服务的安装

    从镜像起一个 Docker 容器,然后列出并检查所有安装的包 /服务。

    为什么要这么做?首先我们希望 Docker 镜像尽可能地小,镜像交付就会很快速。其次,包 /服务越多,问题也会越多,例如包冲突, TCP 端口占有问题。一些服务的安装后脚本甚至会改变关键性的全局配置文件或者留下不可预期的 flagfile 。所以最好让 Docker 镜像保持傻傻的单纯。

    4. Docker 构建的最后清理关闭所有服务

    如果不这么做,服务会在 Docker 镜像的最后阶段被杀掉。在 /var/lock/*下的服务的 lockfile 如果没有被正确使用,当测试新建镜像的部署时,服务可能会启动失败,导致测试无效。

    5. 添加验证步骤,确保镜像正常

    当有改变发生时,我们时不时需要重构 Docker 镜像。为了确保一切正常,我们可以在 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 <[email protected]> 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} \ [email protected]: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"] ################################################## 

    作者: Denny Zhang 文章来源: https://dennyzhang.github.io/docker_deployment.html

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2747 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 08:32 PVG 16:32 LAX 01:32 JFK 04:32
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86