docker拾遗

业余用了好久docker,最近打算再好好学习下。

《第一本docker书》

  • docker默认用户组是docker,可以不用输入sudo。
  • sudo docker attach ,附着到交互式docker的会话。
  • 有交互式运行容器(interactive container),也有守护式容器(daemonized container)。
  • docker exec命令在容器内部额外启动新进程,可以在正在运行的容器中进行维护、监控及管理任务。
  • docker stop命令会向Docker容器进程发送SIGTERM信号,– - docker kill发送SIGKILL信号。
  • docker inspect获得详细容器信息。
  • 本地镜像都保存在Docker宿主机的/var/lib/docker目录下。docker联合文件系统,docker文件系统分析,容器保存在/var/lib/docker/containers。
  • Docker Hub有两种类型仓库:用户仓库(user repository)和顶层仓库(top-level repository)。用户仓库的命名为”用户名/仓库名”。顶层仓库由Docker公司和由选定的能提供优质基础镜像的厂商管理。个人认证信息将保存在$HOME/.dockercfg文件中。
  • Dockerfile执行流程:
    1. 从基础镜像运行一个容器;
    2. 执行一条指令,对容器进行修改;
    3. 执行类似docker commit的操作,提交一个新的镜像层;
    4. Docker再基于刚提交的镜像运行一个新容器;
    5. 执行Dockerfile中的下一条指令,直到所有指令都执行完毕。
      (所以最好多条指令合并到一个RUN中)
  • 可以在docker build中指定Dockerfile所在git仓库地址。构建上下文根目录如果有.dockerignore,可以设置不被上传到构建上下文中的文件。docker build过程默认有缓存,–no-cache可以忽略。
  • docker history查看镜像如何被构建的。
  • docker run-p参数可以对外公开Dockerfile中EXPOSE参数指定的端口,随机绑定到宿主机的49000~49999端口。
  • docker file 指令:
    1. CMD。用于指定一个容器启动时要运行的命令。docker run中指定的命令,会覆盖Dockerfile中的CMD命令。如果指定多个CMD指令,只有最后一条会执行。
    2. ENTRYPOINT。docker run命令行指定的任何参数都会被当作参数再次传递给ENTRYPOINT指令中指定的命令。CMD和ENTRYPOINT组合妙用:ENTRYPOINT指定运行的命令,CMD指定命令参数。如果确实需要可以在docker run中加--entrypoint参数。
    3. WORKDIR。容器内部的工作目录。
    4. ENV。新的环境变量可以在后续的命令中使用。-e参数运行时指定。
    5. USER。运行的用户身份,-u参数运行时覆盖。
    6. VOLUME。卷功能让我们可以将数据(如源代码)、数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中,并且允许我们在多个容期间共享这些内容。
    7. ADD。文件源也可以使用URL格式。如果是归档文件,会自动解压缩,已经存在的解压缩目录不会被覆盖。ADD命令会使构建缓存变得无效。
    8. COPY。不会提取和解压。源路径要相对于当前构建路径,目的路径需要绝对路径。目标位置不存在会自动创建。
    9. ONBUILD。当一个镜像被用做其他镜像的基础镜像时,该镜像中的触发器将会被执行。按照父镜像中指定的顺序执行,并且只能被继承一次(防止Dockerfile构建过程的递归调用问题)。
  • 部署自己的docker registry
  • 安装docker时会创建一个名为docker0的网络接口,每个docker容器都会在这个接口上分配一个IP地址。docker默认使用172.17.x.x作为子网网络,如果这个子网被占用,会尝试在172.16~172.30创建子网。接口docker0是连接宿主机和docker的虚拟网桥,每创建一个容器就会创建一组互联的网络接口,其中一端作为容器里的eth0接口,另一端命名类似vethec6a作为宿主机的一个端口。Docker创建的虚拟子网由宿主机和所有docker容器共享。
  • 配置防火墙规则和NAT规则,允许容器和宿主机路由。高级网络配置
  • 为了避免容器内应用ip的硬编码,可以使用--link参数创建两个容器间的父子连接。通过把容器连接在一起,可以让父容器使用别名访问子容器。
  • 对于只用一次的容器,可以指定--rm参数。

你可能感兴趣的:(笔记,docker,docker,读书笔记)