こちらも参照https://hackmd.io/ZJWSTrK8R8ium6yqEqgGbA?view
インストール最近はdocker-composeを別途入れなくていい。プラグインだが公式のEngineのインストール手順に含まれてるインストールページに書いてあるログローテートの設定もやっておく
コンテナをサブドメインに割り当てる
-e VIRTUAL_HOST=<service-name>.example.com
PIDからコンテナを特定するtopやiotopで重いプロセスがいたときに、そのプロセスが所属するコンテナを知りたい$ docker ps --format '{{.ID}}' | xargs docker inspect -f '{{.State.Pid}} {{.Config.Hostname}} {{.Name}}'
docker psの方だけ--formatなのが罠(-fはFilter) jrcs/letsencrypt-nginx-proxy-companion で証明書の期限を確認find . -name cert.pem | xargs -n 1 -I{} sh -c 'echo {}; openssl x509 -noout -dates -in {} | grep notAfter' イメージのバージョンを固定するタグの指定では不十分(後から変更される可能性がある。latestとか特に)
$ docker image ls --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE jwilder/nginx-proxy latest sha256:4e6bae63dab0c4d3ebf3bbecbf5cd2700ca99db02e155efaa6e28baa14033bc8 2e769f4d3e9c 2 months ago 148MB そしてdocker-compose.ymlで image: jwilder/nginx-proxy@sha256:4e6bae63dab0c4d3ebf3bbecbf5cd2700ca99db02e155efaa6e28baa14033bc8
時間が経つとリビルドできないaptとかgemとかのリポジトリからパッケージが消えると、結局リビルドできない。公開できるものはDocker Hubにビルド済イメージを入れておく。
プライベートのものは自前のDocker Hubを用意するのかなー
apt-get update がキャッシュされて、それが古くなってて失敗することもあるようだ。 時計がずれるhttps://www.eucalyptus.com/blog/2014/09/14/docker-strange-dev-how-i-learned-stop-worrying-and-love-vm
お手軽にmongodbの永続化$ boot2docker ssh $ sudo mkdir -p /var/lib/docker/mongodb $ exit $ docker run --name mongodb --restart=always -d -v /var/lib/docker/mongodb:/data/db mongo mongod --smallfiles
で、DBを使うコンテナを起動 docker run ... --link mongodb:mongodb データバックアップ
If you run SSHD in your Docker containers, you're doing it wrong!
https://github.com/dockerfile/mongodb docker run -it --rm --link mongodb:mongodb dockerfile/mongodb bash -c 'mongo --host $MONGODB_PORT_27017_TCP_ADDR'
Docker Quicktip: Backing up Volumes Container42
Docker volumeの内容をバックアップ
バックアップdocker compose downでサービスを止めてから
docker run --rm -v <volume_name>:/dst -v `pwd`:/backup busybox \ tar cpvf /backup/_`date +%Y%m%d_%H%M%S`.tar -C /dst ./
レストア事前にdocker compose upでvolumeを作成し、downでサービスを止める
# 一旦中身を消して docker run --rm -v <volume_name>:/dst busybox \ rm -rv /dst # レストア docker run --rm -v <volume_name>:/dst -v `pwd`:/backup busybox \ tar xpvf /backup/<backup_file> -C /dst ./
もっとちゃんとやるならhttps://gist.github.com/nicklegr/9a792c00c02b524501b15ffcd84128e1MongoDBのバックアップ・レストア最近は docker compose run を使うといいdocker compose run --rm -v $WORK_DIR:/dst $SERVICE_NAME \ mongodump --host $SERVICE_NAME -o/dst/mongodb
json形式でエクスポートするには
※以下は古い情報。--linkや環境変数のホスト名は非推奨
$ sudo docker run -it --rm -v /path/to/backup:/backup --link <target_container>:mongodb mongo \ /bin/bash -c 'mongodump --host $MONGODB_PORT_27017_TCP_ADDR -o/backup'
$ sudo docker run -it --rm --link <target_container>:mongodb -v /path/to/backup:/backup mongo bash $ mongorestore --host $MONGODB_PORT_27017_TCP_ADDR /backup
バイナリは互換性がなくなることがあるようなので、
#!/bin/bash if [ ! $1 ]; then echo " Example of use: $0 database_name [dir_to_store]" exit 1 fi db=$1 out_dir=$2 if [ ! $out_dir ]; then out_dir="./" else mkdir -p $out_dir fi tmp_file="fadlfhsdofheinwvw.js" echo "print('_ ' + db.getCollectionNames())" > $tmp_file cols=`mongo --host $MONGODB_PORT_27017_TCP_ADDR $db $tmp_file | grep '_' | awk '{print $2}' | tr ',' ' '` for c in $cols do mongoexport --host $MONGODB_PORT_27017_TCP_ADDR -d $db -c $c -o "$out_dir/${db}_${c}.json" done rm $tmp_file
root以外で行う場合は下記のハック # バックアップファイルのオーナーがrootになるので、dockerに変更 # (idコマンドでホスト側のdockerのuid,gidを調べて渡している) docker run -it --rm -v $WORK_DIR:/backup mongo:3.2.6 \ /bin/bash -c "chown -R `id -u`:`id -g` /backup" PostgreSQLのバックアップ・レストアここまで来るとバックアップコンテナ作った方がよさそうね$ sudo docker run -it --rm -v /path/to/backup:/backup --link <target_container>:postgresql sameersbn/postgresql:9.4 \ /bin/bash -c 'DUMMY=$(echo "*:*:*:$POSTGRESQL_ENV_DB_USER:$POSTGRESQL_ENV_DB_PASS" > ~/.pgpass) && chmod 600 ~/.pgpass && pg_dump -h $POSTGRESQL_PORT_5432_TCP_ADDR -U $POSTGRESQL_ENV_DB_USER $POSTGRESQL_ENV_DB_NAME > /backup/dump.sql'
$ sudo docker run -it --rm -v /path/to/backup:/backup --link <target_container>:postgresql sameersbn/postgresql:9.4 /bin/bash # psql -h postgresql -U $POSTGRESQL_ENV_DB_USER $POSTGRESQL_ENV_DB_NAME -f /backup/<filename>.sql docker-composevolumesの設定が間違ってると起きることがある?$ sudo docker-compose up Recreating loftcalendar_mongodb_1... Cannot start container 44ba4c1e27343fcbe77ae1c5e9b17cdec35908395e2890481329b6511f94f954: set app armor profile docker-default: no such file or directory
このときは一度コンテナを消す $ sudo docker rm loftcalendar_mongodb_1
Web UIdocker front end & reverse proxy for developmenthttps://github.com/acidlemon/mirage
デバッグ用シェル下記をdocker-compose.ymlに書いておく
shell: build: . command: bash working_dir: /app/user environment: - DB接続関連一通り
開発環境としての利用
未使用データの削除 |