IT笔记 · 2014年2月28日

Linux application containers related

Linux 容器,方便隔离cpu、内存、文件系统等

LXC

Lmctfy

Docker

  • 注意, docker官网已更新至docker.com, 推出正式版1.0, 以下链接可能失效,具体去docker.com了解
  • Official site:docker.io
  • 利用Linux容器实现可移植的应用部署
  • Docker 介绍: 相关技术
  • Docker的安装
  • Docker的Dockerfile
  • Docker的端口重定向
  • 容器里的应用连接主机的方法
    • 在ubuntu主机执行ip addr,结果里有个docker0的,包含IP信息
    • 容器应用连接主机采用此IP地址
    • 主机如果有防火墙策略或只允许本机访问,可以把该IP地址纳入允许范围
    • 如果需要自己设定docker0的ip,详见此教程
    • 如果需要获取容器的IP:容器本身的环境变量HOSTNAME指向的哈希值在容器的/etc/hosts对应的IP.
  • Docker 可用docker cp CONTAINER:PATH HOSTPATH命令直接从container拷贝出相应文件/文件夹;
  • Docker 的文件夹共享
    • 创建:在run时指定”-v” docker run -v /var/volume1 -v /var/volume2 -name DATA busybox true
    • 使用:在run时指定参数”-volume-from” docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash
    • 删除:使用其的container全删除之后才删掉
    • 在主机空间创建:-v [host-dir]:[container-dir]:[rw|ro] host-dir需使用绝对路径
    • 创建于container内的共享文件夹不能使用export,save等命令来导出,因为它是独立于image的,所以只能用间接的办法导出,比如$ sudo docker run -rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data 执行后便在当前路径有了个压缩包,这个压缩包再用于创建共享文件夹的container:

      # create a new data container
      $ sudo docker run -v /data -name DATA2 busybox true
      # untar the backup files into the new container’s data volume
      $ sudo docker run -rm –volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

  • Docker本身可在虚拟机上运行,可以搭配vagrant使用

  • 搭建自己的Docker私有仓库服务
  • Docker:优雅的部署
  • Docker制作安装ia32-libs的image时,会遇到一个关于fuse的安装错误,解决办法为fake a fuse install,参考这里: 注意,这会造成/tmp文件夹权限失常!
 #Fake a fuse install (to prevent ia32-libs-multiarch package from producing errors)    
  RUN apt-get install libfuse2    
  RUN cd /tmp ; apt-get download fuse    
  RUN cd /tmp ; dpkg-deb -x fuse_* .    
  RUN cd /tmp ; dpkg-deb -e fuse_*    
  RUN cd /tmp ; rm fuse_*.deb    
  RUN cd /tmp ; echo -en '#!/bin/bash\nexit 0\n' > DEBIAN/postinst    
  RUN cd /tmp ; dpkg-deb -b . /fuse.deb    
  RUN cd /tmp ; dpkg -i /fuse.deb
  • Docker的image与container: 第一次run image之后,默认会有相应的container生成,用docker ps -a查看, 下次启动直接用start命令,加参数-i可交互;
  • 删除container使用 rm; 删除image使用rmi,如果删除image时出错但未提示信息,原因基本是还有container用到它,先删除相应container即可;
  • 删除所有未在运行的container:docker rm `docker ps -a -q`
  • container 可以使用commit生成image;
  • 导入导出:container对应的为exploreimport ,image 对应的为saveload