首页 > 代码库 > Docker生存要点
Docker生存要点
之所以叫这个名字,因为Docker确实是个能把人搞死的东西。
使用最新版的Docker
通过包管理器安装的Docker通常不是最新版——起码ubuntu就不是。而Docker一个丧心病狂的地方就在于其文档没有划分版本,在网上看到的经验,在老版本中未必适用。1.0.1所支持的命令明显比1.4.1少了一大截。因此使用Docker的第一件事就是安装最新版本,哪怕新版本是在PPA中。
一次性操作系统Docker
理解的Docker的第一个难点,就是理解Docker是如何保存状态的,为什么export出去的变量在下一条命令中无法使用?最简单的方法就是认为Docker每次启动只执行一条命令,每条命令之间Docker都经历了一次重启。export的命令在重启之后当然就没有了,新建的文件当然都还在。另外我们的主进程必须保持阻塞,否则Docker执行完命令立刻就会退出。也是“一次性”的表现——即使是主进程,干完活儿照样退出。
未登录的运行环境
Docker的运行时使用未登录的Root账户——即使linux老手可能也会不习惯。未登录会带来一些问题,比如说.bashrc就没有了,比如说不能直接执行一个sh文件。同时一个成熟的Docker image在执行任务时使用的应该是新建的有权限的账户——毕竟Root还是太奔放了。
使用 exec -it <container> /bin/bash登录正在运行的Container
很多时候我们希望登录到正在运行的Docker中去进行一些查看或者修改的工作。我们可以使用attach,但这种方法对CMD有要求,又或者我们可以在image中装入ssh servser。但管理多个container的端口很快会成为另一项噩梦,最好的方法还是 docker exec -it <container> /bin/bash ——谁用谁知道。
较早版本的Docker没有exec命令,所以就像开头说的——装最新的版本。
只读操作系统
既然说道登入container,就必须提到登录后的所有操作的修改都是不被保存的(除非使用EXPOSE命令作了映射)。再小的改动要想持久化都必须重新build,是的,这就是Docker之道。
Docker生存要点