本文主要研究Docker,进一步学习在Docker上的项目开发。参考文章 Docker Developer Docker教程。
Docker command
详细信息参见CommandLine
docker login
该命令用于登录docker registry.
docker login [OPTIONS] [SERVER]
- -u 指定username
- -p 指定password
docker logout
该命令用于logout docker registry.
docker logout [SERVER]
docker build
该命令使用Dockerfile和context来构建docker image,其中context位于PATH或URL中的一系列文件。
docker build [OPTIONS] PATH | URL | -
- -f 用来指定Dockerfile的全路径,默认为PATH/Dockerfile
- --pull 总是试图获取image的最新版本
- --tag, -t 以'name:tag' format来为image生成tag,可以为image创建多个tag
URL可以是Git repository, pre-packaged tarball contexts and plain text files.
//branch container中的docker目录下
$ docker build https://github.com/docker/rootfs.git#container:docker
$ docker build http://server/context.tar.gz
$ docker build -f PATH/Dockerfile
docker tag
该命令为指定image创建image tag。
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Image tag通常为registry_host:registry_host/service:version。
//image id为0e5574283393,registry为fedora,版本为version1.0
$ docker tag 0e5574283393 fedora/httpd:version1.0
//使用image name来生成image tag
$ docker tag httpd fedora/httpd:version1.0
//使用旧的image tag来指定image
$ docker tag httpd:test fedora/httpd:version1.0.test
docker push
该命令将image或repo推送到registry.
docker push [OPTIONS] NAME[:TAG]
执行docker push时,中断进程,如使用Ctrl+C, 将会中止docker push。默认情况下,docker daemon会一次推送five layers image,带宽不好时,可使用--max-concurrent-uploads来限制。
docker pull
该命令从registry中pull image或repo。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
大多数的image使用docker hub中的base image来创建。默认情况下,docker daemon将一次性pull three layers of image,若带宽有限,使用--max-concurrent-downloads来限制。Layers可以被其他image重用。
使用image name或image tag来pull image将会得到最新的版本。但若只想获得指定版本,可以使用digest来pull image。
$ docker pull ubuntu:14.04
$ docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
中止docker pull过程,只需要ctrl+C.
docker image
该命令用来管理image,具有一系列的子命令。
docker image COMMAND
![a5313625bd0a727f7bff28767eec9d14.png](https://img-blog.csdnimg.cn/img_convert/a5313625bd0a727f7bff28767eec9d14.png)
docker images
该命令用来列出image的信息,默认会展示all top level images, their repository and tags, and their size.
docker images [OPTIONS] [REPOSITORY[:TAG]]
Docker image有中间layer来提高可重用性,减少磁盘使用,并通过缓存步骤来加速docker build。
![1fcbac005c084dfb54b51ea0770cf70b.png](https://img-blog.csdnimg.cn/img_convert/1fcbac005c084dfb54b51ea0770cf70b.png)
docker container
该命令用来管理docker container,包含一系列子命令。
docker container COMMAND
![39baa6f0f4f739c3bc83b3bf2d141266.png](https://img-blog.csdnimg.cn/img_convert/39baa6f0f4f739c3bc83b3bf2d141266.png)
![357f2062956ab6b8beed3f3c0dff7eff.png](https://img-blog.csdnimg.cn/img_convert/357f2062956ab6b8beed3f3c0dff7eff.png)
docker node
该命令用于管理集群的node,包含一系列子命令。
docker node COMMAND
![b56307faba26b9449c272301fddaa71b.png](https://img-blog.csdnimg.cn/img_convert/b56307faba26b9449c272301fddaa71b.png)
docker service
该命令用于管理service,包含一系列命令。
docker service COMMAND
![0090f156bf7cf7984dee6c2ce23f6ecd.png](https://img-blog.csdnimg.cn/img_convert/0090f156bf7cf7984dee6c2ce23f6ecd.png)
docker stack
该命令用来管理docker stack,具有一系列子命令。
docker stack [OPTIONS] COMMAND
![a6b985a3fb4aaecc43c10a2a79435016.png](https://img-blog.csdnimg.cn/img_convert/a6b985a3fb4aaecc43c10a2a79435016.png)
docker run
Docker在isolated containers中运行processes。 Container就是一个运行在主机上的process, 并在文件系统、网路以及process tree与主机隔离。
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
默认情况下,container运行在foreground,可以指定option -d来使其运行在background。运行在background模型的container,当其中的root process exit时,该container exit。当指定--rm时,container自己exit或daemon exit时,container被移除。
运行在foreground,使用-a=[]将console绑定到container中的process的STDIN, STDOUT, STDERR。option -it使用tty来与container process交互。
--restart用来指定restart policy,分为no/on-failure[:max-retries]/always
由Dockerfile构建image后,除了FROM/MAUNRAINER/RUN/ADD等Dockerfile命令不能重写,其他都能重写。通过在Dockerfile中指定CMD,也可以使用COMMAND来覆盖原有的CMD。若指定了ENTRYPOINT,CMD或COMMAND将作为ENTRYPOINT的参数。ENTRYPOINT和COMMAND类似,用来指定container启动时执行的命令。
docker exec
在运行的container中执行命令。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker start/stop
启动或停止一个或多个container.
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker pause
暂停一个或多个container中所有processes
docker pause CONTAINER [CONTAINER...]
docker ps
用来列出container
docker ps [OPTIONS]
docker kill
kill一个或多个running container
docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker attach
绑定local standard input, output, and error streams到运行的docker container。
docker attach [OPTIONS] CONTAINER
使用示例:
$ docker run -d --name topdemo ubuntu /usr/bin/top -b
$ docker attach topdemo
docker commit
根据container的修改来生成新的image。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
支持的Dockerfile指令有CMD
|ENTRYPOINT
| ENV
|EXPOSE
|LABEL
| ONBUILD
| USER
| VOLUME
|WORKDIR
。
使用示例:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours desperate_dubinsky
197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours focused_hamilton
$ docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a svendowideit/testimage:version4
f5283438590d
$ docker run -d svendowideit/testimage:version4
89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89373736e2e7 testimage:version4 "apachectl -DFOREGROU" 3 seconds ago Up 2 seconds 80/tcp distracted_fermat
c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours desperate_dubinsky
197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours
docker cp
用于在container filesystem和local filesystem之间相互拷贝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
docker create
创建一个新的container
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create -t -i fedora bash
docker diff
用来查看container形成之后file system中文件和directory的变化。主要包括3种变化: A表示增加,D表示删除,C表示变化。
docker diff CONTAINER
docker events
从server中获得实时的events。
docker events [OPTIONS]
docker history
查看image的历史
docker history [OPTIONS] IMAGE
docker save
将一个或多个image进行打包
docker save [OPTIONS] IMAGE [IMAGE...]
$ docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy
docker load
从压缩包中导入image
docker load [OPTIONS]
docker load --input fedora.tar
docker rm/rmi
删除container/image
docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rmi [OPTIONS] IMAGE [IMAGE...]
其中,rmi从host node上删除image,并不删除docker registry中的image。不能删除具有running container的image,除非使用-f option。
docker top
显示container中运行的processes
docker top CONTAINER [ps OPTIONS]