当你试图删除一个你不用的image的时候,有时候会告诉你有个container正在使用这个镜像,可是docker ps 并无发现相关的container,这个是因为对container的exit理解不深形成的。python
这里有两个不一样的单词,images和container。其中images很好理解,跟日常使用的虚拟机的镜像一个意思,至关于一个模版,而container则是images运行时的的状态。docker对于运行过的image都保留一个状态(container),可使用命令docker ps来查看正在运行的container,对于已经退出的container,则可使用docker ps -a来查看。 若是你退出了一个container而忘记保存其中的数据,你可使用docker ps -a来找到对应的运行过的container使用docker commit命令将其保存为image而后运行。linux
事实上你须要rm掉那个container才能够进行rmi的操做git
docker ps -a docker rm ${container_id} docker rmi ${iamge_id}
原理仍是将用户加入docker组 问题解决web
Ctrl+p, Ctrl+qdocker
#不当心exit可是数据没有保存ubuntu
docker ps -a
检查全部的关掉的containerbash
docker restart ${old_container_id}
可是问题是,也许你会以为有些container明明都不用了却还在那里碍眼,能够删掉全部旧的containerapp
docker rm $(docker ps -a -q) #这个更暴力一点 docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm # 我的更喜欢这个
或者是有些时候你想删掉中间层的镜像webapp
有些时候你能够在run里头加这个参数,这样在退出container的时候就会直接删掉那个container了rest
--rm=false Automatically remove the container when it exits
commit是commit一个正在运行的container做为一个新的镜像 push是把整个repo都推上去,包括全部的tag 和git同样的
#指定端口
docker run -ti -p 主机端口:容器端口 镜像 命令 docker ps nostalgic_morse # 用于查看端口映射的状况
#挂载数据卷 挂载数据卷才是Best Practice,Docker的本质不但愿和主机发生太多的关系,不要太期望在主机上放数据文件 这篇文章 讲了这件事情的Best practice,反正就是使用data-only-container就对了
主要是还说了另外的方法的drawback
数据卷说白了就是什么都不作的卷
docker pull maxexcloo/data
这个镜像其实很简单,看一下Dockerfile
FROM busybox:latest MAINTAINER Max Schaefer <max@excloo.com> RUN mkdir /data VOLUME /data
基于buzybox,在我看来buzybox就是linux命令的一个子集
You can also use the VOLUME instruction in a Dockerfile to add one or more new volumes to any container created from that image.
这个 VOLUME关键字和 run后面的参数 -v是一个意思,在我看来这个数据是没有办法持久化的(2014.12.10)
docker run -ti --name web -v /src/webapp:/opt/webapp training/webapp python app.py
--name="" Assign a name to the container
注意这两个的区别
-v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from Docker: -v /container)
这个是指定目录
--volumes-from=[] Mount volumes from the specified container(s)
这个后面跟container_id或者是--name指定的名字
docker exec container_id command
docker inspect ${CONTAINER_ID}