Docker知识点

参考博文

知识铺垫

虚拟机

在操作系统中运行其他操作系统,对于底层来说,虚拟机是一个文件

  • 优势在于可通过还原虚拟机镜像/快照的方式还原原始环境
  • 资源占用多、冗余步骤多、启动慢三个劣势

Linux容器

不是模拟完整操作系统,而是对进程进行隔离

  • 优势:启动快(一个容器相当于一个底层的进程)、占用资源少(只占用需要的资源,且可以共享资源)、体积小(只包含有用的组件)

Docker

Linux 容器的封装,提供简单易用的容器使用接口

  • 将应用程序与其依赖打包为一个文件,省去了环境配置带来的问题

Docker

用途

  • 提供一次性的环境
  • 提供弹性的云服务:随开随关,动态扩缩容
  • 组件微服务架构:通过在一台机器上启动多个容器模拟微服务架构

概念

image/镜像

  • 应用及其依赖打包在image文件里
  • 可以看作是容器的模板,只有通过image才能生成容器
  • image是二进制文件,通常一个image是继承另一个image,再加上一些个性化设置而生成

  • 命令

    • docker image ls
    • docker image rm [imageName or imageId] ordocker rmi [imageName or imageId]
    • docker image pull [imageName]
  • image一般不建议重复造轮

Container/容器

  • image 文件生成的容器实例,本身也是一个文件,称为容器文件
  • 命令
    • docker container run [imageName] # 该命令有自动抓取image文件的功能,如果本地没有指定的image文件,就会从仓库自动抓取
    • docker container run -it [imageName] bash # 将运行的容器映射到终端中
      • -p 8000:3000参数:容器的 3000 端口映射到本机的 8000 端口。
      • -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
      • koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
      • /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
    • docker container kill [containerId] # 终止容器运行
    • docker container rmor docker rm

Dockerfile

  • 文本文件,用来配置image

  • .dockerignore # 加入不需要打包入image的文件

    1
    2
    3
    .git
    node_modules
    npm-debug.log
  • Dockerfile

    1
    2
    3
    4
    5
    6
    7
    8
    FROM node:8.4 # 继承自官方node image
    COPY . /app # 将当前目录下所有文件(除了.dockerignore排除的路径)复制到image文件的/app下
    WORKDIR /app # 之后的工作路径为/app
    RUN npm install --registry=https://registry.npm.taobao.org # 安装node依赖
    EXPOSE 3000 # 将容器的3000端口暴露出来,允许外部连接
    CMD node demos/01.js # 容器启动后执行 node demos/01.js这条命令
    # RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
    # 指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。
  • build/打包 image

    • docker image build -t koa-demo . # 使用当前目录下的dockerfile打包image,名称为koa-demo
  • 生成容器

    • docker container run --rm -p 8000:3000 -it [imageName] [someCmd]

一些命令

  • docker container start [containerId or containerName] or docker start [containerId or containerName] # 启动一个已生成的容器
  • docker container stop
  • docker container logs # 查看容器的标准输出
  • docker container exec -it [containerID or containerName] /bin/bash # 将容器的shell映射到本地终端
  • docker container cp [containID]:[/path/to/file] . # 将容器/path/to/file路径对应的文件复制到当前目录
0%