Docker命令行帮助(2)
build
Usage: docker build [OPTIONS] PATH | URL | -通过指定文件代码来创建一个新的容器-t="": 库的名称和可选标记容器创建成功时候产生例如(ubuntu:widuu)-q=false: 抑制生成过程中的输出-no-cache: 构建镜像时不适用缓存-rm: 成功构建后去除中间容器
这个文件路径或者url被称为构建的环境,在生成过程中可以参考这些文件的环境,举个例子,使用ADD命令!当一个Dockerfile被给定位URL,则没有环境被设定,当一个git仓库被设置为URL时,这个仓库就被做为环境!
参见 Build Images (Dockerfile Reference)[###]
Examples:
非官方备注,前提是你的目录下有Dockerfile文件,我提供一下我写的测试文件
# VERSION 0.0.1# 默认ubuntu server长期支持版本,当前是12.10FROM ubuntu# 签名啦MAINTAINER widuu "admin@widuu.com"# 更新源,安装ssh serverRUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.listRUN apt-get updateRUN apt-get install -y openssh-serverRUN mkdir -p /var/run/sshd# 设置root ssh远程登录密码为123456RUN echo "root:dgj99349" | chpasswd# 容器需要开放SSH 22端口EXPOSE 22# SSH终端服务器作为后台运行ENTRYPOINT /usr/sbin/sshd -D
开始官方列子
sudo docker build .

这个例子指定的Dockerfile文件路径在.所以本地目录中所有文件信息被推送到docker进程中去,docker进程会找到指定路径中的文件中的环境信息来构建,请记住后台程序会执行在远程机器上,不需要解析Dockerfile在客户端发生什么(你在哪里运行docker build).这就意味着文件中的所有信息都会被发送,不仅仅是前边Dockerfile列出的ADD
环境从本地机器中传输到Docker进程中,这就是你从客户端看到“Uploading context”的信息。
sudo docker build -t vieux/apache:2.0 .
这个构建像以前的例子,但是他给镜像添加了tag,这个仓库的名字将会是vieux/apache,tag名称是2.0
sudo docker build - < Dockerfile
这个从输入段读取Dockerfile没有环境,由于缺少环境,本地的所有环境不会发送到docker进程中去,由于没有本地的环境,Dockerfile 中的ADD只能从远程URl中获取
sudo docker build github.com/creack/docker-firefox
这个将会从你的github的仓库中获取,并且使用获取的仓库作为环境,Dockerfile在存储在跟作用Dockerfile,请注意,您可以指定一个任意的git存储库使用 git:// 模式
commit
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]通过容器的改变来创建一个新的镜像-m="": 提交信息-author="": 提交作者信息 (eg. "John Hannibal Smith <hannibal@a-team.com>"-run="": 配置应用镜像是执行 `docker run`.(ex: -run='{"Cmd": ["cat", "/world"], "PortSpecs": ["22"]}')
提交一个中断的容器
$ sudo docker psID IMAGE COMMAND CREATED STATUS PORTSc3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours$ docker commit c3f279d17e0a SvenDowideit/testimage:version3f5283438590d$ docker images | headREPOSITORY TAG ID CREATED VIRTUAL SIZESvenDowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB
改变容器运行的命令
有时你运行一个应用容器服务,你需要迅速改变它,然后变回来
做为一个雷子,我们使用ls运行一个容器,然后我们改变镜像运行ls /etc
$ docker run -t -name test ubuntu lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var$ docker commit -run='{"Cmd": ["ls","/etc"]}' test test2933d16de9e70005304c1717b5c6f2f39d6fd50752834c6f34a155c70790011eb$ docker run -t test2adduser.conf gshadow login.defs rc0.dalternatives gshadow- logrotate.d rc1.dapt host.conf lsb-base rc2.d...

完整的 -run 例子
-run json hash 改变配置部分当运行的docker检查容器或者配置当容器运行检索的ImageId
$ sudo docker commit -run='{"Entrypoint" : null,"Privileged" : false,"User" : "","VolumesFrom" : "","Cmd" : ["cat", "-e", "/etc/resolv.conf"],"Dns" : ["8.8.8.8", "8.8.4.4"],"MemorySwap" : 0,"AttachStdin" : false,"AttachStderr" : false,"CpuShares" : 0,"OpenStdin" : false,"Volumes" : null,"Hostname" : "122612f45831","PortSpecs" : ["22", "80", "443"],"Image" : "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc","Tty" : false,"Env" : ["HOME=/","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"StdinOnce" : false,"Domainname" : "","WorkingDir" : "/","NetworkDisabled" : false,"Memory" : 0,"AttachStdout" : false}' $CONTAINER_ID
CP
Usage :docker cp CONTAINER:PATH HOSTPATH将容器的文件和文件夹复制到主机中path. 路径相对于文件系统的跟$ sudo docker cp 7bb0e258aefe:/etc/debian_version .$ sudo docker cp blue_frog:/etc/hosts .
diff
Usage:docker diff CONTAINER更改的文件和目录列表容器的文件系统
有3中列出不同的diff事件
A- AddD- DeleteC- Change
例子
$ sudo docker diff 7bb0e258aefeC /devA /dev/kmsgC /etcA /etc/mtabA /goA /go/srcA /go/src/github.comA /go/src/github.com/dotcloudA /go/src/github.com/dotcloud/dockerA /go/src/github.com/dotcloud/docker/.git....
本文由widuu贡献翻译,转载请注明来自http://www.widuu.com~
