开始不是很理解docker
docker-compose up
这个命令在干吗,觉得每次运行这条命令的额时候,都会生成新的container,若是启动屡次,岂不是有不少镜像的全新实例跑在宿主机中?
其实不是这样的
docker-compose官方文档中有这么一段话code
Preserve volume data when containers are created
Compose preserves all volumes used by your services. When
docker-compose up runs, if it finds any containers from previous runs,
it copies the volumes from the old container to the new container.
This process ensures that any data you’ve created in volumes isn’t lostip
这段文字的大概意思是,compose会保留全部服务的volume data,这个volume data,我理解的是对容器作的全部修改。当再次运行docker-compose run
这条命令的时候,compose会找到以前运行过的全部容器,而后把它们的volumes,也就是修改后的容器状态,从老的容器中,拷贝到新的容器中,在这个过程当中新老容器的CONTAINER ID不会变化。文档
也就是说,compose对每一个镜像维护的容器,永远只有一个。
除非用docker rm
删除这些容器,不然对容器所作的修改都会被保留。
其实,当用get
docker-compose stop
暂停服务的时候,能够用it
docker ps -a
查看全部容器的CONTAINER ID, -a
就是 --all
。
而后,用io
docker-compose run
从新启动服务,用docker-compose
docker ps
查看运行的容器的CONTAINER ID,(docker ps
默认列出运行的容器),你会发现它们的id并无发生改变。容器
而sed
docker run [image name]
命令不同,每次对镜像运行这条命令的时候,实际上都从新生成了一个容器,即新生成了一个镜像的实例,它们对应的CONTAINER ID也是不同的。