docker 基本使用总结

照总结文档原样发出来,等基本定型后再改格式吧

起步 docker run 
    示例 docker run -i -t ubuntu /bin/bash
    会自动创建一个容器(Run a command in a new container)
命令格式
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数
    -i -t   一般联用,分别为保持 STDIN、分配伪tty,效果为:运行后直接进入交互式环境
    --rm    容器运行结束后自动删除
    --name  指定一个名称,不指定会自动命名;
            多数命令中要指定具体的容器,可用容器ID或名称 (docker ps 输出的 CONTAINER ID, NAMES两栏)


运行容器/运行着的容器
    1. docker run       新建容器并在其中执行命令,有非常非常多参数
    2. docker ps        列出容器,默认列出运行中的;参数: -a 所有(--all); -l 最近运行的一个(--latest)
    3. docker start     运行一个或多个已经存在的容器;默认在后台执行,不附着(可 docker attach 之)
    4. docker attach    附着一个在后台运行的容器;不过不能优雅的断开,而且并不很推荐交互使用
    5. docker logs      查看容器内部的输出,默认所有行,最好用 --tail 指定行数; -t 为每行带时间戳
                        还可 -f 参数类似 tail -f, Ctrl+c 退出;
    6. docker top       查看容器内进程,与 top 类似,只是一刻静态;动态的话 docker stats
    7. docker exec      在运行中的容器中,运行一条命令;参数 -d 为后台模式 daemon;
                        参数 -t -i 交互模式(退出后不会造成容器停止); -u 指定以某用户身份运行

几个运行参数:
    --log-driver=x      启动时(run/start)指定该参数,用于将输出重定向到指定文件x; docker logs 将失效
    --restart=always, --restart=on-failure:5   容器(异常退出时)自动重启(:5次)
    --publish list, -p  如 -p 127.0.0.1:8080:80  宿主机 lo:8080 ~ 容器的 80 端口,ip: 可省略
    --publish-all, -P   暴露所有端口,Publish all exposed ports to random ports

管理容器
    1. docker start/restart/stop   启动/重启/停止
    2. docker rm        删除容器
    3. docker inspect   容器的深入信息(low-level information)
    4. docker create    非常非常多参数,跟 run 类似
    5. docker port      查看端口映射情况
    6. docker cp        在容器与本地环境间复制文件




镜像相关 images

镜像从仓库下载,本地存储在 /var/lib/docker/ 下,具体目录要要视采用的存储驱动而定。
仓库存在于 Registry 中,默认为 Docker 公司的公共 Registry 服务(即 DockerHub https://hub.docker.com)
线上镜像分公共

镜像相关操作命令
    1. docker images            列出本地镜像
    2. docker rmi               删除镜像
    3. docker search KEYWORD    搜索线上镜像
    4. docker pull IMAGE-NAME[:TAG|@DIGEST]     拉取指定镜像
    5. docker commit CONTAINER  从容器打包构建镜像,事实上是增量式, 并不常用
    6. docker build             构建镜像,要编写文件 Dockerfile, 这是常用的方式
    7. docker history IMAGE     镜像的历史,包含其每一层的构建历史及其 Dockerfile 指令
    8. docker push              推送到


构建镜像:通过 docker commit <不推荐>
    命令 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    方法相当于把容器 CONTAINER 打包成镜像,应该指定 名称:标签 以便后面引用


构建镜像:通过 Dockerfile 步骤及要点
    1. 在一个目录(构建环境, build environment)里,放置 Dockerfile 文件
    2. 命令 docker build [OPTIONS] PATH | URL | -
    3. Dockerfile 文件默认在 PATH/Dockerfile,  也可用 -f 指定文件名, 文件必须在构建环境中
    4. PATH 还可以是一个 git 仓库地址
    5. 最好指定 -t=IMAGE_NAME 为镜像命名,名称中可以为带前缀目录与标签 prefix/websvr:v1 
    6. 如果执行失败,将得一个可以使用的镜像,可调试之(以之创建一个交互式的容器)
    7. 构建环境根目录中支持 .dockerignore
    8. 默认缓存,从开头起未修改的部分,结果将直接复用;可 --no-cache 关闭这一特性

Dockerfile 示例
    ---------------------------
    # sample Dockerfile
    FROM ubuntu:15.04
    MAINTAINER Someone Name "sn@example.com"
    ENV REFERSHED_AT 2014-07-10
    RUN apt-get -qq update
    RUN apt-get install -y nginx
    # RUN apt-get -qq update && apt-get install -y nginx
    # RUN [ "apt-get", " install", "-y", "nginx"]
    EXPOSE 80
    ---------------------------

Dockerfile 格式(上示例说明)
    0. # 开头的注释行(可选)
    1. 第一条指令行必须是 FROM, 指定一个已存在的镜像(称为 基础镜像, base image)
    2. MAINTAINER 声明维护人信息
    3. ENV 设置环境变量,这里的 REFRESHED_AT ,模板最后更新时间,用于刷 apt 缓存; 对 yum 也有效
    4. RUN 指令在 shell 里执行时,默认由 /bin/sh -c 来执行;
    5. 接上,如不希望由 shell 包装(出于避免 shell 字符转义麻烦等考虑),可用 exec 格式写法(数组式)
    6. 每行指令都会创建镜像层,所以可以将多条指令合并在同一行一次性 RUN ,以简化层级
    7. EXPOSE 指令用于向外公开端口; docker 默认不开端口

Dockerfile 指令
    1.  CMD     容器启动时运行的命令,在 docker run 时可以被参数覆盖; 只允许一条/仅最后一条有效
                最好只使用数组式写法,如 CMD ["/bin/bash", "-l"]
    2.  ENTRYPOINT   与 CMD 类似,但不被 docker run 覆盖;二者组合可以实现一些特别功能
    3.  WORKDIR     容器内的工作目录,RUN, ENTRYPOINT, CMD 等的程序在此执行
    4.  ENV     设置环境变量,可一行设置多个;使用时 $ENVNAME 引用类似 BASH 里的
    5.  USER    指定(切换)执行用户,如 USER nginx, 可 user:group 组合,支持 uid,gid
    6.  VOLUME  一个或多个卷,如 VOLUME ["/opt/proj"] 将为基于此镜像的任何容器创建一个挂载点
                启动容器时以 -v 参数设定挂载点: -v /path/to/develop:/opt/proj , 可再加 rw 或 ro
    7.  ADD     将构建目录下的文件复制到镜像中指定位置(文件或目录皆可)如 ADD file.ext /opt/app/
                源文件支持 URL;源文件名如是 gzip, bzip2, xz,将自动解压缩到目标处
    8.  COPY    与 ADD 类似,但并不自动解压缩
    9.  LABEL   为镜像添加(键值对形式的)元数据,如有多个推荐一次性指定; 在 docker inspect 查看
    10. STOPSIGNAL  指定停止容器时发送给容器的系统信号,如果 9, SIGKILL
    11. ARG     定义变量,仅在 docker build 中可用;还可通过 --build-arg 传递给构建运行时
                如,定义了 ARG build 及 ARG app_user=user, 且 docker build --build-arg build=1404 
                则构建时, build 为 1404,, app_user 为默认值 user
    12. ONBUILD 触发器,好像挺复杂的,先忽略


私有 Registry 服务
    Docker 官方提供私服镜像,可容器化运行:
    docker run -d -p 5000:5000 --restart always --name registry registry:2
    使用上,先给本地镜像打 tag ,然后 push 上去
    docker tag my_image localhost:5000/my_image
    docker push localhost:5000/my_image


发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据