175
160

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker Composeでボリューム作成

Last updated at Posted at 2017-08-11

概要

vagrantでdockerを使い始めて、データの永続化のためにボリュームを使うと
ホストのフォルダに書き込めなくて、パーミッションエラーによく悩まされたので
忘れないようメモを残す。

パーミッションエラーになるパターン

よく見かけるボリュームの作り方

docker-compose.yml
version: "2"
services:
  database:
    image: mysql
    volumes:
      - /home/vagrant/opt/mysql:/var/lib/mysql

busyboxを使った作り方

docker-compose.yml
app:
  image: busybox
  container_name: app
  volumes:
    - /home/vagrant/opt/mysql:/var/lib/mysql

mysql:
  image: mysql
  container_name: mysql
  environment:
    MYSQL_ROOT_PASSWORD: password
  ports:
    - "3306:3306"
  volumes_from:
    - app

パーミッションエラーにならないパターン

「/var/lib/docker/volumes/mysql-db」フォルダに永続化される

※ ただし、「docker-compose down -v」されるとボリュームも削除されるので注意!

トップレベルにvolumes:を置いてボリュームの定義する

docker-compose.yml
version: "2"
services:
  mysql:
    image: mysql
    volumes:
      - mysql-db:/var/lib/mysql
volumes:
  mysql-db:
    driver: local

トップレベルにvolumes:を置いてボリュームの定義する(2)

「/home/vagrant/docker/data/mysql」フォルダに永続化される

※ ただし、ホストの通常ユーザーではアクセスできないパーミッションなので、
 操作するときは「sudo su -」とかで、rootになる。

docker-compose.yml
version: "2"
services:
  mysql:
    image: mysql
    volumes:
      - mysql-db:/var/lib/mysql
volumes:
  mysql-db:
    driver_opts:
      type: none
      device: /home/vagrant/docker/data/mysql
      o: bind

参考サイト

175
160
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
175
160

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?