ラベル docker-compose の投稿を表示しています。 すべての投稿を表示
ラベル docker-compose の投稿を表示しています。 すべての投稿を表示

2021年2月17日水曜日

Wekan サーバーの引っ越しで mongoDB のバックアップ・リストアした(docker-compose 編)

 とある事情で Wekan サーバーを引っ越ししました。
docker-compose で立てていたのですが、データベースのバックアップ・リストアをしたときの手順を備忘録として残しておきます。

手順はこちらを参考しました。
Dockerで起動しているMongoDBにリストアする - Qiita

環境

docker-compose はこんな感じです。

元サーバー

version: '2'
services:
  wekan:
    image: mquandalle/wekan
    restart: always
    links:
      - wekandb
    environment:
      - MONGO_URL=mongodb://wekandb/wekan
      - ROOT_URL=http://hogehoge:8088
    ports:
      - 8088:8080
    networks:
       - app_net

  wekandb:
    image: mongo:3.2.11
    volumes:
      - /mnt/sda1/docker/wekan/data:/data/db
      - /mnt/sda1/docker/wekan/configdb:/data/configdb
    restart: always
    networks:
       - app_net

networks:
  app_net:
    ipam:
      config:
        - subnet: 172.XX.XX.X/24
  

network 指定あり、db はホストにマウント済み。

移動先サーバー

version: '2'
services:

  wekan:
    image: mquandalle/wekan
    restart: always
    links:
      - wekandb
    environment:
      - MONGO_URL=mongodb://wekandb/wekan
      - ROOT_URL=http://fugafuga:8088
    ports:
      - 8088:8080

  wekandb:
    image: mongo:3.2.11
    volumes:
      - db_data:/data/db
      - db_config:/data/configdb
    restart: always

volumes:
  db_data:
    external: true
  db_config:
    external: true
  

network はなし。Windows マシンなのでホストにマウントするのがうまくいかないのでボリュームを作ってそこに永続化。

バックアップ

Qiita 記事のリストアコマンドをバックアップコマンドに変更して実行します。
元サーバーはホストに db をマウントしてるのでそこからやってもいいのかもしれませんが、mongodump しました。

また、ネットワーク作ってるのでそれを指定してます。

docker run --rm --link wekan_wekandb_1:mongo -it -v ~/wekan/backup:/backup --network wekan_app_net -w /backup mongo:3.2.11 bash -c "mongodump --host mongo"

backup ディレクトリに出力されてるはずなのでそれを引越し先サーバーにコピー。

リストア

リストアもバックアップ同様に行いました。
こちらはネットワークを指定しませんが docker-compose up すると wekan_default のようにデフォのネットワークが作られるのでそちらを指定します。
(細かいですが Windows 上なのでルートパスの / を2重化してます。この件は「ブログズミ: Docker Toolbox でホストのカレントディレクトリをマウントするときの備忘録」を参照してください。)

docker run --rm --link wekan_wekandb_1:mongo -it -v "/$(pwd)/backup/dump":/backup --network wekan_default -w //backup mongo:3.2.11 bash -c "mongorestore --host mongo /backup"


2021-01-14T08:18:03.435+0000    building a list of dbs and collections to restore from /backup dir
2021-01-14T08:18:03.484+0000    reading metadata for wekan.cfs_gridfs.attachments.chunks from /backup/wekan/cfs_gridfs.attachments.chunks.metadata.json
2021-01-14T08:18:03.484+0000    reading metadata for wekan.cfs_gridfs._tempstore.chunks from /backup/wekan/cfs_gridfs._tempstore.chunks.metadata.json
・・・
2021-01-14T08:18:04.035+0000    finished restoring wekan.customFields (0 documents)
2021-01-14T08:18:05.581+0000    restoring indexes for collection wekan.cfs_gridfs.attachments.chunks from metadata      
2021-01-14T08:18:05.665+0000    finished restoring wekan.cfs_gridfs.attachments.chunks (189 documents)
2021-01-14T08:18:05.666+0000    done

のようにできたら完了です。
移行先の Wekan にアクセスして確認しましょう。

最後に

Wekan は OSS の Trello っぽいやつです。
かなり進化していて WIP 制限とかスイムレーンとかあるので Trello よりも仕事で使えると思います。

便利なんでぜひ使ってみてください。

今回は以上です。


2017年6月12日月曜日

[Docker] docker-compose で作成されるデフォルト network でハマった備忘録

こんにちは。
ブログズミ: [Docker] 始めてみたけど躓きまくってるので備忘録として残しておくよ
上記記事から、一ヶ月くらい経って、docker-compose も使うようになってきました。
Docker はもとより、ネットワークとかの知識がほとんどない素人ですが、多少覚えてきました。

それにしても、docker-compose 便利ですね!
環境変数とか設定を Dockerfile から追い出せるし、--build-arg も docker-compose.yml に書けるし、
Docker ホストが起動したときに自動起動したい場合も、"restart: always" を書いとけば OK ですし、
ブログズミ: [Windows][Docker] Host および コンテナの起動をスタートアップに登録」とか、
いらんかったわ!って感じです。

でもハマった
まぁ、でもハマりますよね。
今回ハマったのはネットワーク絡み。

Dockerfile からビルドして docker run したコンテナからは通じるのに、
それを docker-compose で run すると通じない…
そんなことがありました。

docker-compose が作成する network
docker-compose run すると、{サービス名}_default という名前で network が作成されます。

$ docker-compose up -d
Creating network "hoge_hoge_default" with the default driver

こんな感じでログが出ていると思います。

Docker 管理下のネットワークは docker network ls で確認できます。
$ docker network ls
a8c84238aaaa        bridge             bridge              local
f9b622381b6a        host               host                local
7061554ce0f1        hoge_hoge_default  bridge              local
f1c24d1dda82        none               null                local

さらに、詳細を docker network inspect {ネットワーク名} で確認できます。

$ docker network inspect hoge_hoge_default
[
    {
        "Name": "hubot2_bridge",
        "Id": "1d3906e507b39eb08cf6d7326058eb62c447772371c4d2b692765c25778a4d11",
        "Created": "2017-05-23T11:41:13.819782229Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "72917816824f2d5fe76ba854a49766787fd1bb54928fd903d251fc9dfa5a2f69": {
                "Name": "hoge_hoge_1",
                "EndpointID": "219cb4cbd809b4d3d7e5f4d1118abe87fe5e4d44222ace5e6022119366827d60",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]


で、これが目的のネットワークと衝突してて通じてなかったようです。

解決方法
docker-compose.yml にネットワークの設定を書き足します。
参考:https://github.com/docker/compose/issues/2582

services:
  hoge:
    networks:
      - bridge

networks:
  bridge:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
        gateway: 172.16.238.1

これで、network の subnet/gateway を指定できるので、都合の良い設定すれば解決するはずです。



また、1つ docker のことがわかった気がします。
今回は以上です。では。