Docker命令行帮助(2)


build

  1. Usage: docker build [OPTIONS] PATH | URL | -
  2. 通过指定文件代码来创建一个新的容器
  3. -t="": 库的名称和可选标记容器创建成功时候产生例如(ubuntu:widuu)
  4. -q=false: 抑制生成过程中的输出
  5. -no-cache: 构建镜像时不适用缓存
  6. -rm: 成功构建后去除中间容器

这个文件路径或者url被称为构建的环境,在生成过程中可以参考这些文件的环境,举个例子,使用ADD命令!当一个Dockerfile被给定位URL,则没有环境被设定,当一个git仓库被设置为URL时,这个仓库就被做为环境!

参见
Build Images (Dockerfile Reference)[###]

Examples:

非官方备注,前提是你的目录下有Dockerfile文件,我提供一下我写的测试文件

  1. # VERSION 0.0.1
  2. # 默认ubuntu server长期支持版本,当前是12.10
  3. FROM ubuntu
  4. # 签名啦
  5. MAINTAINER widuu "admin@widuu.com"
  6. # 更新源,安装ssh server
  7. RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
  8. RUN apt-get update
  9. RUN apt-get install -y openssh-server
  10. RUN mkdir -p /var/run/sshd
  11. # 设置root ssh远程登录密码为123456
  12. RUN echo "root:dgj99349" | chpasswd
  13. # 容器需要开放SSH 22端口
  14. EXPOSE 22
  15. # SSH终端服务器作为后台运行
  16. ENTRYPOINT /usr/sbin/sshd -D

开始官方列子

  1. sudo docker build .

docker build

这个例子指定的Dockerfile文件路径在.所以本地目录中所有文件信息被推送到docker进程中去,docker进程会找到指定路径中的文件中的环境信息来构建,请记住后台程序会执行在远程机器上,不需要解析Dockerfile在客户端发生什么(你在哪里运行docker build).这就意味着文件中的所有信息都会被发送,不仅仅是前边Dockerfile列出的ADD

环境从本地机器中传输到Docker进程中,这就是你从客户端看到“Uploading context”的信息。

  1. sudo docker build -t vieux/apache:2.0 .

这个构建像以前的例子,但是他给镜像添加了tag,这个仓库的名字将会是vieux/apache,tag名称是2.0

  1. sudo docker build - < Dockerfile

这个从输入段读取Dockerfile没有环境,由于缺少环境,本地的所有环境不会发送到docker进程中去,由于没有本地的环境,Dockerfile 中的ADD只能从远程URl中获取

  1. sudo docker build github.com/creack/docker-firefox

这个将会从你的github的仓库中获取,并且使用获取的仓库作为环境,Dockerfile在存储在跟作用Dockerfile,请注意,您可以指定一个任意的git存储库使用 git:// 模式

commit

  1. Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  2. 通过容器的改变来创建一个新的镜像
  3. -m="": 提交信息
  4. -author="": 提交作者信息 (eg. "John Hannibal Smith <hannibal@a-team.com>"
  5. -run="": 配置应用镜像是执行 `docker run`.
  6. (ex: -run='{"Cmd": ["cat", "/world"], "PortSpecs": ["22"]}')

提交一个中断的容器

  1. $ sudo docker ps
  2. ID IMAGE COMMAND CREATED STATUS PORTS
  3. c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours
  4. 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours
  5. $ docker commit c3f279d17e0a SvenDowideit/testimage:version3
  6. f5283438590d
  7. $ docker images | head
  8. REPOSITORY TAG ID CREATED VIRTUAL SIZE
  9. SvenDowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB

改变容器运行的命令

有时你运行一个应用容器服务,你需要迅速改变它,然后变回来

做为一个雷子,我们使用ls运行一个容器,然后我们改变镜像运行ls /etc

  1. $ docker run -t -name test ubuntu ls
  2. bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var
  3. $ docker commit -run='{"Cmd": ["ls","/etc"]}' test test2
  4. 933d16de9e70005304c1717b5c6f2f39d6fd50752834c6f34a155c70790011eb
  5. $ docker run -t test2
  6. adduser.conf gshadow login.defs rc0.d
  7. alternatives gshadow- logrotate.d rc1.d
  8. apt host.conf lsb-base rc2.d
  9. ...

run example

完整的 -run 例子

-run json hash 改变配置部分当运行的docker检查容器或者配置当容器运行检索的ImageId

  1. $ sudo docker commit -run='
  2. {
  3. "Entrypoint" : null,
  4. "Privileged" : false,
  5. "User" : "",
  6. "VolumesFrom" : "",
  7. "Cmd" : ["cat", "-e", "/etc/resolv.conf"],
  8. "Dns" : ["8.8.8.8", "8.8.4.4"],
  9. "MemorySwap" : 0,
  10. "AttachStdin" : false,
  11. "AttachStderr" : false,
  12. "CpuShares" : 0,
  13. "OpenStdin" : false,
  14. "Volumes" : null,
  15. "Hostname" : "122612f45831",
  16. "PortSpecs" : ["22", "80", "443"],
  17. "Image" : "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  18. "Tty" : false,
  19. "Env" : [
  20. "HOME=/",
  21. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  22. ],
  23. "StdinOnce" : false,
  24. "Domainname" : "",
  25. "WorkingDir" : "/",
  26. "NetworkDisabled" : false,
  27. "Memory" : 0,
  28. "AttachStdout" : false
  29. }' $CONTAINER_ID

CP

  1. Usage :docker cp CONTAINER:PATH HOSTPATH
  2. 将容器的文件和文件夹复制到主机中
  3. path. 路径相对于文件系统的跟
  4. $ sudo docker cp 7bb0e258aefe:/etc/debian_version .
  5. $ sudo docker cp blue_frog:/etc/hosts .

diff

  1. Usage:docker diff CONTAINER
  2. 更改的文件和目录列表容器的文件系统

有3中列出不同的diff事件

  1. A - Add
  2. D - Delete
  3. C - Change

例子

  1. $ sudo docker diff 7bb0e258aefe
  2. C /dev
  3. A /dev/kmsg
  4. C /etc
  5. A /etc/mtab
  6. A /go
  7. A /go/src
  8. A /go/src/github.com
  9. A /go/src/github.com/dotcloud
  10. A /go/src/github.com/dotcloud/docker
  11. A /go/src/github.com/dotcloud/docker/.git
  12. ....

docker diff

本文由widuu贡献翻译,转载请注明来自http://www.widuu.com~