使用 docker-compose 创建和挂载纯数据容器

Create and mount data-only containers with docker-compose

ocker 1.9 引入了一个新卷 API 用于创建仅数据容器(通过 docker volume create)。 是否可以通过 docker-compose 创建并安装它们?

我想创建一个纯数据容器来存储来自我的 MySQL 数据库 (https://hub.docker.com/_/mysql/) 的数据。可悲的是,我找不到任何文档是否可以使用 docker-compose 本身。

是否可以从 Docker Compose 1.6.2 开始。如果是,怎么做?

考虑到compose/volume.py#L23确实包含一个volume.create()方法,应该是可以的。

参见the volume section of Compose file reference

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql
 # Named volume
  - datavolume:/var/lib/mysql

那会调用 docker volume create

如果你想创建和存储数据库数据,使 docker-compose.yml 看起来像 如果你想使用 Dockerfile

version: '3.1'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql-data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
volumes:
  mysql-data:

你的 docker-compose.yml 看起来像 如果你想使用你的图像而不是 Dockerfile

version: '3.1'   

services:
  php:
    image: php:7.4-apache
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql-data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
volumes:

如果您想存储或保留 mysql 的数据,则 必须记得在 docker-compose.yml

中添加两行
volumes:
  - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

之后使用这个命令

docker-compose up -d

现在您的数据将永久存在,即使在使用此命令后也不会被删除

docker-compose down

extra:- 但如果你想删除所有数据,那么你将使用

docker-compose down -v