开始不是很理解
docker-compose up
这个命令在干嘛,以为每次运行这条命令的额时候,都会生成新的container,如果启动多次,岂不是有很多镜像的全新实例跑在宿主机中?
其实不是这样的
docker-compose官方文档中有这么一段话
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 lost
这段文字的大概意思是,compose会保留所有服务的volume data,这个volume data,我理解的是对容器做的所有修改。当再次运行docker-compose run
这条命令的时候,compose会找到之前运行过的所有容器,然后把它们的volumes,也就是修改后的容器状态,从老的容器中,拷贝到新的容器中,在这个过程中新老容器的CONTAINER ID不会变化。
也就是说,compose对每个镜像维护的容器,永远只有一个。
除非用docker rm
删除这些容器,否则对容器所做的修改都会被保留。
其实,当用
docker-compose stop
暂停服务的时候,可以用
docker ps -a
查看所有容器的CONTAINER ID, -a
就是 --all
。
然后,用
docker-compose run
重新启动服务,用
docker ps
查看运行的容器的CONTAINER ID,(docker ps
默认列出运行的容器),你会发现它们的id并没有发生改变。
而
docker run [image name]
命令不一样,每次对镜像运行这条命令的时候,实际上都重新生成了一个容器,即新生成了一个镜像的实例,它们对应的CONTAINER ID也是不一样的。