照总结文档原样发出来,等基本定型后再改格式吧
起步 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