IT

도커 작성 영구 데이터 MySQL

lottoking 2020. 7. 20. 07:19
반응형

도커 작성 영구 데이터 MySQL


$ docker-compose down다음을 실행 하면 MySQL 데이터를 분석 할 수 있습니다..yml

version: '2'
services:
  # other services

  data:
    container_name: flask_data
    image: mysql:latest
    volumes:
      - /var/lib/mysql
    command: "true"

  mysql:
    container_name: flask_mysql
    restart: always
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
      MYSQL_USER: 'test'
      MYSQL_PASS: 'pass'
    volumes_from:
      - data
    ports:
      - "3306:3306"

내 이해는 data컨테이너를 사용하여 volumes: - /var/lib/mysqlmysql이 컨테이너에 데이터를 저장하는 로컬 컴퓨터 디렉토리에 매핑 하고이 매핑으로 인해 컨테이너가 파괴 된 경우에도 데이터가 지속되는 것을 이해합니다. 그리고 mysql컨테이너는 데시벨에 불고기 클라이언트 인터페이스와 때문에 로컬 디렉토리를 볼 수 있습니다.volumes_from: - data

이 답변을 시도했지만 실패했습니다. 도커 작성 영구 데이터 문제

편집하다

내을 변경 아래 .yml그림과 디렉터리를 생성로 ./data하지만 지금은 오류가 발생합니다.docker-compose up --buildmysql

  data:
    container_name: flask_data
    image: mysql:latest
    volumes:
      - ./data:/var/lib/mysql
    command: "true"

  mysql:
    container_name: flask_mysql
    restart: always
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
      MYSQL_USER: 'test'
      MYSQL_PASS: 'pass'
    volumes_from:
      - data
    ports:
      - "3306:3306"


flask_mysql | mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
flask_mysql | 2016-08-26T22:29:21.182144Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
flask_mysql | 2016-08-26T22:29:21.185392Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.


데이터 컨테이너는 불필요한 해결 방법입니다. 데이터 볼륨 이 당신을 위해 트릭을 할 것입니다. 다음으로 변경 docker-compose.yml:

version: '2'
services:
  mysql:
    container_name: flask_mysql
    restart: always
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
      MYSQL_USER: 'test'
      MYSQL_PASS: 'pass'
    volumes:
      - my-datavolume:/var/lib/mysql
volumes:
  my-datavolume:

Docker가 /var/lib/docker/volumes폴더 에 볼륨을 생성 합니다. 이 볼륨은 입력하지 않는 한 유지됩니다.docker-compose down -v


세 가지 방법이 있습니다.

첫 번째 방법

호스트 머신 에 mysql 데이터를 저장할 디렉토리를 지정해야 합니다 . 그런 다음 데이터 컨테이너를 제거 할 수 있습니다. mysql 데이터는 로컬 파일 시스템에 저장됩니다.

MySQL 컨테이너 정의는 다음과 같아야합니다.

mysql:
  container_name: flask_mysql
  restart: always
  image: mysql:latest
  environment:
    MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
    MYSQL_USER: 'test'
    MYSQL_PASS: 'pass'
volumes:
 - /opt/mysql_data:/var/lib/mysql
ports:
  - "3306:3306"

두 번째 방법

다음을 입력하기 전에 데이터 컨테이너를 커밋하는 것입니다 docker-compose down.

docker commit my_data_container
docker-compose down

세 번째 방법

또한 docker-compose stop대신 사용할 수 있습니다 docker-compose down(그러면 컨테이너를 커밋 할 필요가 없습니다)


mysql 데이터 용으로 별도의 볼륨을 생성해야합니다.

따라서 다음과 같이 보일 것입니다.

volumes_from:
  - data
volumes:
  - ./mysql-data:/var/lib/mysql

그리고 아니요, /var/lib/mysqlmysql 컨테이너 내부의 경로이며 호스트 컴퓨터의 경로와 관련이 없습니다. 호스트 컴퓨터에는 mysql이 전혀 없을 수도 있습니다. 따라서 목표는 mysql 컨테이너에서 내부 폴더를 유지하는 것입니다.


실제로 이것이 경로이며 이것이 작동하려면 유효한 경로를 언급해야합니다. 데이터 디렉토리가 현재 디렉토리에 my-data있으면 대신를 언급해야합니다 ./my-data. 그렇지 않으면 mysql에서 오류가 발생 mariadb합니다.

volumes:
 ./my-data:/var/lib/mysql

참고 URL : https://stackoverflow.com/questions/39175194/docker-compose-persistent-data-mysql

반응형