我写了一个自定义的MySQL Dockerfile,对于这个问题,Dockerfile中唯一相关的代码行是:
#VOLUME ["/var/lib/mysql"]
( 我故意留下上面的注释,因为这是现在的样子,并且这样适合我的问题的上下文 )
我使用这个MySQL映像作为基础映像( FROM ),每个微型服务都有自己的持久性/数据库。 我的MySQL基础映像的标签是tsl.devops.mysql.image 。
现在我们来看一个用于微服务的docker-compose.yml:
version: '3' volumes: db-data: services: api: build: context: ./ dockerfile: docker/Dockerfile image: tsl.api.bom.image container_name: tsl.api.bom.container ports: - "5001:5001" links: - db:bom_db db: image: tsl.devops.mysql.image container_name: tsl.api.bom.db.container expose: - "3306" ports: - "3306:3306" volumes: - db-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: pass
我的问题是,如果我可以在我的MySQL镜像( tsl.devops.mysql.image )的Dockerfile中声明我的卷,而不会成为一个tsl.devops.mysql.image的卷,而且即使微服务映像被删除( rmi )?
现在,如果我在我的MySQL基本镜像( tsl.devops.mysql.image )中取消注释行,并且不在我的docker-compose.yml中为微服务声明一个卷( db-data ),那么数据量如果我删除微服务的图像( docker-compose down --rmi local ),将不会持续,并且在再次启动微服务时也会有一个悬挂的卷。 我想这样做的原因很简单,就是我不希望我的微服务必须知道MySQL的详细信息,在这种情况下path: /var/lib/mysql