Linux 容器,方便隔离cpu、内存、文件系统等
LXC
- Official site:linuxcontainers.org
- Linux 容器的建立和简单管理
Lmctfy
- Code: gitbub.com/google/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.
- 在ubuntu主机执行
- 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
- 创建:在run时指定”-v”
-
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对应的为
explore
、import
,image 对应的为save
、load
。