docker ps 列出正在运行的所有容器
docker ps -a 列出历史上所有容器
docker images 列出所有镜像
docker stop wizardly_chandrasekhar 停止容器
docker start 重启容器
docker rm 移除容器
docker logs 查看容器内输出
docker search python 在https://hub.docker.com/查找相关镜像。
容器是镜像的实例。
交互方式运行容器(直接进入该容器内,退出用exit)
docker run -t -i XXX 运行某容器,若该镜像不存在,则会从Docker hub下拉取。
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
例如,
docker run -i -t tomcat /bin/bash
中的/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
进程方式运行容器
docker run -d -p 5000:5000 training/webapp python app.py
如果没有启动成功,则通过交互的方式进入我们新创建的镜像中,尝试执行命令,通过分析错误日志查出不能正常启动的原因,
更新镜像(可以理解为用容器创建镜像)
首先用老镜像创建一个容器,然后运行,在容器内apt-get更新该镜像,然后exit退出,最后docker commit提交。
# -m描述 -a 作者 容器id 镜像名
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
删除镜像
首先应停止该镜像下所有容器(docker stop id),然后删除该镜像下所有容器(docker rm id),最后删除该镜像(docker rmi id).
构建镜像
dockerfile每条指令都会创建一个新的镜像层并对镜像进行提交。Docker大体上按照如下流程执行Dockerfile中的指令。
每条命令的执行过程:
Docker从基础镜像运行一个容器。
执行第一条指令,对容器进行修改。
执行类似docker commit的操作,提交一个新的镜像层。
Docker再基于刚提交的镜像运行一个新的容器。
执行Dockerfile中的下一条命令,直到所有指令都执行完毕。
如果Dockerfile由于某些原因(如某条指令失败了)没有正常结束,那你也可以得到一个可以使用的镜像(事实上,Dockerfile每一步都会产生一个中间层镜像它们的name和tag均为<‘none’>)。这对调试非常有帮助:可以基于该镜像运行一个具备交互功能的容器,使用最后创建的镜像对为什么你的指令会失败进行调试。
调试完毕后,例如修改了Dockerfile,然后重新build,成功生成镜像后会覆盖之前的失败镜像。
事实上,每次build的中间镜像层都会保存在本地,而在打新镜像的时候会直接复用之前的镜像。如果想要删除某一个中间层镜像,会报错
image has dependent child images
因为最终结果镜像依赖于它。除非删除最终结果镜像,那样的话,所有中间层会被一起删除。
删除所有含有none的镜像
docker rmi -f $(docker images -a | grep none | awk '{print $3}')