-v
옵션을 사용하고 호스트 디렉토리에 매핑하여 컨테이너를 실행하면됩니다. 컨테이너가 데이터를 저장하는 위치를 알아야합니다.
해당 이미지의 경우 Dockerfile을 찾고 있습니다. 내가 관심있는 데이터가 MySql에 저장되어 있다고 가정합니다. MySql config에서 컨테이너가 사용하는 데이터 디렉토리는 /var/lib/mysql
입니다. 예상대로 마운트가 매핑되었는지 확인
> docker run -d -t -v /docker/pbx-data:/var/lib/mysql jmar71n/freepbx
20b45b8fb2eec63db3f4dcab05f89624ef7cb1ff067cae258e0f8a910762fb1a
사용 docker inpect
:
그래서 당신은 당신의 호스트에 /docker/pbx-data
에 MySQL의 데이터 디렉토리 매핑이 같은 컨테이너를 시작할 수 있습니다
> docker inspect --format '{{json .Mounts}}' 20b
[{"Source":"/docker/pbx-data",
"Destination":"/var/lib/mysql",
"Mode":"","RW":true,"Propagation":"rprivate"}]
컨테이너가 실행될 때 데이터베이스를 부트 스트랩하므로 호스트가 사용하는 MySql 데이터 디렉토리의 내용을 볼 수 있습니다 :
> ls -l /docker/pbx-data
total 28684
-rw-r----- 1 103 root 2062 Sep 21 09:30 20b45b8fb2ee.err
-rw-rw---- 1 103 messagebus 18874368 Sep 21 09:30 ibdata1
-rw-rw---- 1 103 messagebus 5242880 Sep 21 09:30 ib_logfile0
-rw-rw---- 1 103 messagebus 5242880 Sep 21 09:30 ib_logfile1
drwx------ 2 103 root 4096 Sep 21 09:30 mysql
drwx------ 2 103 messagebus 4096 Sep 21 09:30 performance_schema
컨테이너를 죽이고 동일한 볼륨 매핑을 사용하여 다른 컨테이너를 실행하면 이전 컨테이너의 모든 데이터 파일이 저장되며 앱 상태는 유지되어야합니다.
FreePBX에 익숙하지 않지만 다른 디렉토리에 상태가 저장되어있는 경우 동일한 위치에서 여러 -v
옵션을 사용하여 위치를 찾을 수 있습니다.