docker 常用命令

  1. docker build # 根据dockerfile 构建docker 镜像
  2. docker exec # 连接进入现有运行的容器
  3. docker info # 查看docker 的基础信息
  4. docker inspect # 查看某个docker 容器的详细信息
  5. docker save # 将docker 镜像打成一个tar 包
  6. docker load # 将一个tar 包镜像加载到本地镜像池
  7. docker login # 登录一个docker 镜像源仓库
  8. docker logout # 退出一个docker 镜像源仓库
  9. docker logs # 查看某一个容器的当前日志
  10. docker ps # 列出运行的容器列表
  11. docker pull # 拉取(下载)镜像
  12. docker push # 上传镜像
  13. docker restart # 重启容器
  14. docker start # 启动容器
  15. docker stop # 停止容器
  16. docker rm # 删除一个或多个容器
  17. docker rmi # 删除一个或多个镜像
  18. docker run # 创建并运行一个容器
  19. docker tag # 给镜像打tag(标签)

dockerfile 指令

FROM

FROM <image>
  • FROM 指定以哪个基础镜像构建新镜像
  • FROM 必须是dockerfile 中的第一个指令
  • FROM 如果没有指定镜像标签,默认使用最新的 latest
  • 如果不需要基础镜像,可以使用FROM scratch,方便减少镜像的体积

    MAINTAINER

    MAINTAINER <name>
    
  • 指定制作镜像的作者名字

    RUN

    RUN (shell)
    # 或者
    RUN [“executable”, “param1”, “param2”](exec形式)
    
  • RUN 后边可以跟shell 命令 或者使用 exec 形式

    CMD

    CMD有三种使用方式:

  • CMD “executable”,”param1”,”param2”

  • CMD “param1”,”param2”
  • CMD command param1 param2 (shell form)

CMD 指定在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
CMD 只会在容器启动时生效,而RUN 只会在dockerfile 构建时生效。

EXPOSE

EXPOSE <port>
  • 声明容器运行时容器提供服务的端口。可以使用docker run -P 使其生效,但是会随机映射一个端口。
  • 了解即可,实际只是一个声明

    ENV

    ENV <key> <value>        # 只能设置一个
    ENV <key>=<value> ...    # 可以设置多个
    
  • 指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留

    ADD

    ADD <src> ... <dest>
    
  • 复制宿主机本地文件、目录 或者 远程url 文件,并且添加到容器中

    COPY

    COPY <src> ... <dest>
    
  • 复制宿主机本地文件、目录 ,并且添加到容器中 。相对于ADD, 他不能复制远程URL文件

    ENTRYPOINT

    ENTRYPOINT "executable","param1","param2"
    
  • 和CMD 类似,配置容器启动后执行的命令,并且不能被docker run 提供的参数覆盖,而CMD 是可以覆盖的

  • 每个dockerfile 中只允许有一个 ENTRYPOINT,当指定多个时,只有最后一个生效

    VOLUME

    VOLUME ["/data"]
    
  • 创建一个容器运行时数据存储的地点,可以将数据存储在docker 创建的临时目录,容器删除时数据删除

  • 或者在docker run 时使用 -v 挂载本地目录到容器内目录,持久化数据

    USER

    USER <user>[:<group>]
    
  • 指定容器运行时的用户名或UID

  • USER 后面的命令也会使用这个用户来执行(RUN, CMD ….)

    WORKDIR

    WORKDIR /data
    
  • 为后续命令指定工作目录(RUN、CMD。。。)

    ONBUILD

    ONBUILD <其它命令>
    
  • ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。