摘要:介绍Docker容器相关的操作命令。
知识点:
run ps start attach exec top stop kill
inspect rm logs images rmi pull push
commit build
注:可以使用docker COMMAND --help
来查看COMMAND的详细用法,本文只介绍常用的子集。
一.启动容器
启动之前未启动过的容器:
docker run [-d] [-i] [-t] IMAGE [Command] [Arguments]
· -d:daemon,启动守护式容器
· -i:interactive,启动交互式容器
· -t:tty,允许标准输入输出
还有一些其他的选项
· --name=NAME:给容器指定一个别名。否则寻找容器要用ID或系统自带名字,很不友好。
启动执行一次命令的容器
docker run ubuntu echo "hello world"
这样的容器执行一次命令就停止了。
启动交互式容器
docker run -i -t ubuntu /bin/bash
接下来就进入了容器的bash中,可以执行各种命令,好像虚拟机一样。
此时想要退出容器,可以使用exit退出并停止容器,或【Ctrl+P】+【Ctrl+Q】的escape组合,退出而不停止容器。
启动守护式容器
这样的容器能够长期运行,没有会话,适合运行各种服务。下面是启动守护式容器的几种方法:
- 在交互式容器中使用【Ctrl+P】+【Ctrl+Q】的命令返回,容器因为没有停止,变为守护式容器。
如果使用ps命令来查看,会发现这个容器直接被列出。
此时若想返回这个容器,要使用docker attach 容器名
命令,附加到运行的容器中。 - 使用run命令来建立:
docker run -d 镜像名 [command] [args]
-d的意思是,使用后台的方式启动守护式的容器,执行命令。但是命令运行结束后,容器依然会停止。
举例:docker run --name=test -d ubuntu "while true ;do echo hello world; sleep 1; done"
如果想要了解守护式容器中的运行情况,需要使用log命令,后文介绍。
重新启动已经停止的容器:
docker start [-i] 容器名
· -i:以交互的方式重新启动。
docker start -i NAME
二.操作容器
列出容器
docker ps [-a] [-l]
· -a:列出所有的容器(包括停止的)
· -l:列出新创建的容器
· 默认:只列出未停止的容器
执行此命令后,docker将列出容器列表的信息。其中那一串很长的无规律串就是容器的ID,而name一列就是你指定或系统指定的容器别名。
查看某个容器的配置docker inspect ID或者别名
执行此命令后,docker以json格式列出指定容器很多信息。包括操作系统版本,名称,命令,网络配置等。
删除容器docker rm 容器名
只能删除已经停止的容器,不能删除运行中的容器。
删除后,ps命令会找不到那个容器。
查看容器的运行情况
docker logs [-f] [-t] [--tail]
- -f:--follows=true|false,告诉日志,一直跟踪容器的变化。
- -t:--timestamps=true|false,为返回的结果时间戳。
- --tail:选择返回结尾处多少数量的日志。不指定的话,返回所有日志。
举例:docker logs --tail=5 -tf test
查看test容器最后五条命令,带时间戳并且随时更新。
查看容器中的进程情况
docker top 容器名
在运行的程序中启动新的进程
docker exec [-d] [-i] [-t] 容器名 [command] [args]
举例:docker exec -i -t test /bin/bash
启动一个新的bash进程
停止容器
- stop命令:给容器发送一个信号,等待容器的停止。
docker stop 容器名
- kill命令:直接停止一个容器
docker kill 容器名
三.操作镜像
镜像存放在仓库(repository)中,而这个仓库存放在仓库(registory)中。
镜像由Repository和Tag唯一指定,比如ubuntu:14.04,ubuntu:latest,这里14.04和latest就是Tag,ubuntu就是Repository。如果没有指定Tag,则会使用默认的latest。
查看本地镜像列表
docker images [-a] [-f] [-q] [--no-trunc]
- -a:--all,列出所有
- -f:--filter,指定过滤器
- -q:--quiet,只列出ID
- --no-trunc:不截断ID
- 可以使用Repository的名字作为参数,它会返回对应名字的所有镜像。
查看特定镜像信息
docker inspect 镜像仓库名+Tag名,或者镜像ID
删除镜像
docker rmi [-f] [--no-prune=false] 镜像仓库名+Tag名,或者镜像ID
- -f:--force,强制删除。如果有容器在镜像基础上生成,必须用这个选项。
- --no-prune:不要删除未打标签的父镜像。
如果一个镜像ID对应了多个镜像标签,那么使用Image ID才可以删除镜像,如果使用仓库名+标签,只能删除对应的标签。
如果想要删除镜像仓库下的多个镜像,可以用如下语法:
docker rmi $(docker images -q ubuntu)
在远程镜像仓库搜索镜像
docker search [options] 镜像仓库名
- --automated=false:只显示自动构建的镜像
- -s:--stars X:只显示不小于X星级的镜像
注意:search命令最多只能显示25个结果。搜索结果后,将返回镜像的信息(星级,是否官方,ID,标签...)
把镜像下载到本地
docker pull [options] NAME [:TAG]
- -a:--all-tags=false|true,把所有打了标签的镜像都下载到本地。
把镜像推送到远程
docker push NAME
需要提供用户名,密码和邮箱。
Docker不会上传整个镜像,而只会上传修改的部分。
镜像默认是公共的,可以在Docker Hub转为私有。
构建镜像
镜像的构建非常重要。我们可以自定义一个容器,安装好自己需要的一些文件,然后构建成镜像以方便复用。
1.通过容器构建
docker commit [options] 容器名 [Repository[:TAG]]
- -a:指定镜像的作者,一般是作者名和联系方式
- -m:记录镜像构建的信息
- -p:正常在构建镜像时会使容器暂停,使用-p告诉容器不要暂停
2.通过dockerfile文件来构建
首先要创建dockerfile文件,它是一种包含一系列命令的文本文件。
举例:
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER RaidriarB "[email protected]"
RUN apt-get update
RUN apt-get install nginx
EXPOSE 80
然后执行build的命令来构建镜像。
docker build [options] path|url
- -t:指定镜像的标签
- 还有一些选项:--force-rm --no-cache --pull --quiet --rm
- path要指定dockerfile的文件目录。
docker会在build的过程中,每一步都生成一个ID,这就是构建时的中间层镜像。如果使用ps命令查看,会发现他们的标签和仓库名都是none。如果想要取消构建中间层镜像,只需要使用--quiet或者-q选项。
dockerfile类似批处理文件,是一种非常强大的构建镜像方式。后面会详细介绍dockerfile的功能。