Docker에서 시작한 Mastodon의 DB를 나중에 영속화
개요
Mastodon, 유행하고 있네요. 나는 또한 기세를 타고 Azure에 인스턴스을 시작했습니다.
훌륭하게 데이터 지속성 설정을 잊은 채로 시작하여 지금에 이르게 됩니다.
v1.2로 올리기 위해 컨테이너를 한 번 떨어 뜨려야하지만,
어떻게 든 데이터를 유지하면서 재부팅이 가능했기 때문에 메모해 둡니다.
……飛んでいくデータを表現しているみたいで嫌ですね。
호스트에 데이터 저장 대상 만들기
今回は /usr/share/mastodon
に諸々置いていたため、同じ場所に作成しました。
postgres用ディレクトリ作成
[root@mstdn001 ~]# mkdir /usr/share/mastodon/postgresql
대상 컨테이너 확인
PostgreSQLのコンテナ名を確認します。(横スクロールで見えます)
コンテナ名の確認
[root@mstdn001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d849f18a9e9b gargron/mastodon "bundle exec rails s " 3 days ago Up 3 days 0.0.0.0:3000->3000/tcp, 4000/tcp mastodon_web_1
c8fbcc7633de gargron/mastodon "bundle exec sidekiq " 3 days ago Up 3 days 3000/tcp, 4000/tcp mastodon_sidekiq_1
33db6dcac1cd gargron/mastodon "npm run start" 3 days ago Up 3 days 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1
3829643b3b41 postgres:9.6-alpine "docker-entrypoint.sh" 3 days ago Up 3 days 5432/tcp mastodon_db_1
0d764d54cc62 redis:alpine "docker-entrypoint.sh" 3 days ago Up 3 days 6379/tcp mastodon_redis_1
postgresが動作しているのは mastodon_db_1
ですね。
데이터 구출
docker cp
というコマンドで、実データをコンテナ内から取り出します。
docker cp <コンテナ名>:<コンテナ内のフルパス> <ホストの相対パス>
の形で入力します。
postgresのデータを救出
[root@mstdn001 ~]# cd /usr/share/mastodon
[root@mstdn001 mastodon]# docker-compose pause
[root@mstdn001 mastodon]# docker cp mastodon_db_1:/var/lib/postgresql/data ./postgresql/data
コピー結果を確認
[root@mstdn001 mastodon]# ls -l ./postgresql/data/
total 56
drwx------. 5 root root 41 Apr 15 14:49 base
drwx------. 2 root root 4096 Apr 17 18:36 global
drwx------. 2 root root 18 Apr 15 14:49 pg_clog
drwx------. 2 root root 6 Apr 15 14:49 pg_commit_ts
drwx------. 2 root root 6 Apr 15 14:49 pg_dynshmem
-rw-------. 1 root root 4492 Apr 15 14:49 pg_hba.conf
-rw-------. 1 root root 1636 Apr 15 14:49 pg_ident.conf
drwx------. 4 root root 39 Apr 15 14:49 pg_logical
drwx------. 4 root root 36 Apr 15 14:49 pg_multixact
drwx------. 2 root root 18 Apr 15 15:20 pg_notify
drwx------. 2 root root 6 Apr 15 14:49 pg_replslot
drwx------. 2 root root 6 Apr 15 14:49 pg_serial
drwx------. 2 root root 6 Apr 15 14:49 pg_snapshots
drwx------. 2 root root 6 Apr 15 15:20 pg_stat
drwx------. 2 root root 63 Apr 18 21:46 pg_stat_tmp
drwx------. 2 root root 18 Apr 15 14:49 pg_subtrans
drwx------. 2 root root 6 Apr 15 14:49 pg_tblspc
drwx------. 2 root root 6 Apr 15 14:49 pg_twophase
-rw-------. 1 root root 4 Apr 15 14:49 PG_VERSION
drwx------. 3 root root 92 Apr 18 17:26 pg_xlog
-rw-------. 1 root root 88 Apr 15 14:49 postgresql.auto.conf
-rw-------. 1 root root 22205 Apr 15 14:49 postgresql.conf
-rw-------. 1 root root 24 Apr 15 15:20 postmaster.opts
-rw-------. 1 root root 85 Apr 15 15:20 postmaster.pid
docker-compose.yml 수정
docker-compose.yml
を修正して、ホストとコンテナのディレクトリを紐付けます。
Uncomment to enable DB persistance
の下2行がコメントになっているので解除し、パスを修正します。
- <ホストの相対パス>:<コンテナ内のフルパス>
となります。先ほどとは逆なので注意です。
docker-compose.yml
version: '2'
services:
db:
restart: always
image: postgres:9.6-alpine
### Uncomment to enable DB persistance
volumes:
- ./postgres/data:/var/lib/postgresql/data
#(以下略)
# 今回の内容とは関係ありませんが、
# 「image: postgres:alpine」を「image: postgres:9.6-alpine」に書き換えることで、
# 勝手にPostgresのバージョンが上がることを防いでいます。
컨테이너 재시작
Postgres用コンテナを再起動します。
docker-compose を利用するためディレクトリの移動を忘れずに。
dbコンテナを再起動
[root@mstdn001 ~]# cd /usr/share/mastodon/
[root@mstdn001 mastodon]# docker-compose unpause
[root@mstdn001 mastodon]# docker-compose up -d db
Starting mastodon_db_1
동작 확인
PCや適当なクライアントから繋いでみたり、トゥートしてみて確認します。
ちゃんと動いていて、過去のデータも残っていれば完璧です。
先にdocker-compose.ymlを修正しておいて、 docker cp
からコンテナ再起動までの時間をなるべく短くした方が良いかもしれません。
참고 정보
下記サイト等を参考にしました。ありがとうございました。
/usr/share/mastodon
に諸々置いていたため、同じ場所に作成しました。[root@mstdn001 ~]# mkdir /usr/share/mastodon/postgresql
[root@mstdn001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d849f18a9e9b gargron/mastodon "bundle exec rails s " 3 days ago Up 3 days 0.0.0.0:3000->3000/tcp, 4000/tcp mastodon_web_1
c8fbcc7633de gargron/mastodon "bundle exec sidekiq " 3 days ago Up 3 days 3000/tcp, 4000/tcp mastodon_sidekiq_1
33db6dcac1cd gargron/mastodon "npm run start" 3 days ago Up 3 days 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1
3829643b3b41 postgres:9.6-alpine "docker-entrypoint.sh" 3 days ago Up 3 days 5432/tcp mastodon_db_1
0d764d54cc62 redis:alpine "docker-entrypoint.sh" 3 days ago Up 3 days 6379/tcp mastodon_redis_1
mastodon_db_1
ですね。docker cp
というコマンドで、実データをコンテナ内から取り出します。docker cp <コンテナ名>:<コンテナ内のフルパス> <ホストの相対パス>
の形で入力します。[root@mstdn001 ~]# cd /usr/share/mastodon
[root@mstdn001 mastodon]# docker-compose pause
[root@mstdn001 mastodon]# docker cp mastodon_db_1:/var/lib/postgresql/data ./postgresql/data
[root@mstdn001 mastodon]# ls -l ./postgresql/data/
total 56
drwx------. 5 root root 41 Apr 15 14:49 base
drwx------. 2 root root 4096 Apr 17 18:36 global
drwx------. 2 root root 18 Apr 15 14:49 pg_clog
drwx------. 2 root root 6 Apr 15 14:49 pg_commit_ts
drwx------. 2 root root 6 Apr 15 14:49 pg_dynshmem
-rw-------. 1 root root 4492 Apr 15 14:49 pg_hba.conf
-rw-------. 1 root root 1636 Apr 15 14:49 pg_ident.conf
drwx------. 4 root root 39 Apr 15 14:49 pg_logical
drwx------. 4 root root 36 Apr 15 14:49 pg_multixact
drwx------. 2 root root 18 Apr 15 15:20 pg_notify
drwx------. 2 root root 6 Apr 15 14:49 pg_replslot
drwx------. 2 root root 6 Apr 15 14:49 pg_serial
drwx------. 2 root root 6 Apr 15 14:49 pg_snapshots
drwx------. 2 root root 6 Apr 15 15:20 pg_stat
drwx------. 2 root root 63 Apr 18 21:46 pg_stat_tmp
drwx------. 2 root root 18 Apr 15 14:49 pg_subtrans
drwx------. 2 root root 6 Apr 15 14:49 pg_tblspc
drwx------. 2 root root 6 Apr 15 14:49 pg_twophase
-rw-------. 1 root root 4 Apr 15 14:49 PG_VERSION
drwx------. 3 root root 92 Apr 18 17:26 pg_xlog
-rw-------. 1 root root 88 Apr 15 14:49 postgresql.auto.conf
-rw-------. 1 root root 22205 Apr 15 14:49 postgresql.conf
-rw-------. 1 root root 24 Apr 15 15:20 postmaster.opts
-rw-------. 1 root root 85 Apr 15 15:20 postmaster.pid
docker-compose.yml
を修正して、ホストとコンテナのディレクトリを紐付けます。Uncomment to enable DB persistance
の下2行がコメントになっているので解除し、パスを修正します。- <ホストの相対パス>:<コンテナ内のフルパス>
となります。先ほどとは逆なので注意です。version: '2'
services:
db:
restart: always
image: postgres:9.6-alpine
### Uncomment to enable DB persistance
volumes:
- ./postgres/data:/var/lib/postgresql/data
#(以下略)
# 今回の内容とは関係ありませんが、
# 「image: postgres:alpine」を「image: postgres:9.6-alpine」に書き換えることで、
# 勝手にPostgresのバージョンが上がることを防いでいます。
docker-compose を利用するためディレクトリの移動を忘れずに。
[root@mstdn001 ~]# cd /usr/share/mastodon/
[root@mstdn001 mastodon]# docker-compose unpause
[root@mstdn001 mastodon]# docker-compose up -d db
Starting mastodon_db_1
ちゃんと動いていて、過去のデータも残っていれば完璧です。
docker cp
からコンテナ再起動までの時間をなるべく短くした方が良いかもしれません。2017/04/19 추가
@ 히데쿠로 님의 편집 요청을 바탕으로 일부 절차를 수정했습니다.
조언 감사합니다!
Reference
이 문제에 관하여(Docker에서 시작한 Mastodon의 DB를 나중에 영속화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuu26/items/d4b9df0ba2d46e6b9f69텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)