Docker In Action 小记1

命令相关

  1. detach 使用了-t选项打开的交互式容器 的方法:长安ctrl,然后分别按下P键和Q键,则当前容器会被detach,并退回宿主机的shell。
  2. docker logs命令可用来显示容器日志。容器输入到标准输出及标准错误输出的内容都会被docker logs日志记录下来。但是docker logs日志不会自动截断,因此对于长期运行的程序可能会带来性能问题。
docker logs container_name 
  1. 创建没有独立PID命名空间的容器的方法:在docker execdocker run命令中加上 --pid 参数,并将其值设置为 host

  2. docker create命令:创建一个容器,并使之停留在stop状态。使用该命令可以获取以交互模式运行的docker容器的ID

  3. docker rundocker create命令可以带上一个--cidfile参数,并赋予其一个不存在的文件名,以将新建的容器的ID输入到指定文件中。如果指定的文件已经存在,则docker不会创建新容器。

  4. 在创建容器时,可以加上--read-only选项,创建一个带有只读文件系统的容器。该参数可确保容器中的文件不会被改变。由于镜像启动时可能需要写入一些文件。若设置了该参数可能会导致容器启动失败,对此,需要利用-v参数设置一些可写的volumes以供程序正常运行。

  5. 创建容器时,--env-e)参数能指定容器的环境变量,格式为

--env VIRABLE_NAME = VIRABLE_VALUE
  1. 创建容器时指定 --restart参数可以设定容器在失败时的重启策略。多次重试之间,等待时间采用指数回退发计算。重启策略及容器失败时退出码详解可见这篇文章。设置了次参数后,若容器运行终止,则容器会进入restarting状态。

  2. 容器创建时,可使用--entrypoint参数覆盖dockerfile中的ENTRYPOINT指令。此时命令行参数会成为entrypoint指令的参数。

  3. 容器创建时,指定--rm参数,可在容器进入exited状态后释放容器占用的资源。

原理相关

  1. docker容器在八个方面进行了隔离:
  • PID namespace : 进程标识及能力
  • UTS namespace : 主机及域名
  • MNT namespace : 文件系统访问及结构结构
  • IPC namespace : 通过共享内存进行的进程间通信
  • NET namespace : 网络访问及结构
  • USR namespace : 用户名及标识
  • chroot() : 控制文件系统根路径
  • cgroups : 资源的保护
  1. PID namespace : 一个可以用来标识进程的数字的集合

  2. 常见的资源冲突问题:

  • 两个进程绑定了同一个网络端口
  • 两个进程使用了相同的临时文件名,该文件名受文件锁保护无法被共享。
  • 两个进程需使用不同版本的全局共享软件库
  • 两个相同的程序需要使用相同的PID文件
  • 新的程序修改了已存在的程序使用着的一个全局变量,导致老程序崩溃
  1. docker容器状态转换机:


    容器状态转换
  2. docker容器的启动顺序需要与docker容器间的依赖顺序相反(例如,容器A 有一个link参数将容器B link到A之上,则容器B需要在容器A之前启动,否则docker会报错。)。因此docker不可能构建一个有循环依赖关系的容器拓扑。

你可能感兴趣的:(Docker In Action 小记1)