• 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之道。

  • 相关阅读:
    .net core读取appsettings.config中文乱码问题
    vs2017错误:当前页面的脚本发生错误
    VS Code中无法识别npm命令
    Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字
    记录一次在生成数据库服务器上出现The timeout period elapsed prior to completion of the operation or the server is not responding.和Exception has been thrown by the target of an invocation的解决办法
    Java集合框架
    java hash表
    Java Dictionary 类存储键值
    java数据结构 栈stack
    java封装
  • 原文地址:https://www.cnblogs.com/narcissu5/p/4224819.html
Copyright © 2020-2023  润新知