SDカードの寿命を伸ばすために /var/log は Ramdisk に置くように設定しました。ですが、Dockerのログは /var/lib/docker/containers に出力されるので、ぜんぜん対策になっていなかったという当たり前の話。
試した環境
Raspberry Pi 4 (8GB RAM)
Ubuntu 20.10 64bit
$ cat /etc/fstab
LABEL=writable / ext4 defaults 0 0
LABEL=system-boot /boot/firmware vfat defaults 0 1
tmpfs /tmp tmpfs defaults,size=128m 0 0
tmpfs /var/tmp tmpfs defaults,size=128m 0 0
tmpfs /var/log tmpfs defaults,size=64m 0 0
対処内容
Dockerのロギング・ドライバの設定を変更します。詳しくは公式サイトを確認しましょう。
参考:ロギング・ドライバの設定
設定方法は、Dockerデーモンのデフォルトを変更する方法(/etc/docker/daemon.jsonに書き込む方法)と、各コンテナごとに、ロギング・ドライバの設定をする方法があります。
自分のDocker環境では、docker-compose を使って、Wordpressとメールサーバを動しているだけなので、各コンテナ毎(docker-compose.yml)に設定を行う方法をとりました。
現在動いているDockerデーモンのロギング・ドライバの設定を確認するには、下記のコマンドを実行します。
$ docker info --format '{{.LoggingDriver}}'
json-file
デフォルトは、json-file形式での出力となっていて、/var/lib/docker/containers/[container_id] の下にログが出力されています。運用に必要なログは、ホストの/var/logに出力するようにしているので、ロギング・ドライバには none を設定し、出力を止めてしまいます。
設定例
メールサーバの設定。赤字の部分が今回追記したところ。
version: '3'
services:
mailserver:
image: docker.io/mailserver/docker-mailserver:latest
hostname: ${HOSTNAME}
domainname: ${DOMAINNAME}
container_name: ${CONTAINER_NAME}
env_file: mailserver.env
ports:
- "25:25"
- "143:143"
- "587:587"
- "993:993"
volumes:
- maildata:/var/mail
- mailstate:/var/mail-state
- /var/log/mailserver/mail:/var/log/mail/
- /var/log/mailserver/supervisor/:/var/log/supervisor/
# - maillogs:/var/log/mail
- ./config/:/tmp/docker-mailserver/
- /etc/letsencrypt/:/etc/letsencrypt/
cap_add: [ "NET_ADMIN", "SYS_PTRACE" ]
restart: always
<strong><span class="bold-red"> logging:
driver: none</span></strong>
volumes:
maildata:
mailstate:
# maillogs:
WordPressの設定。同じく赤字の部分を追記。
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
<span class="bold-red"> logging:
driver: none</span>
ports:
- 127.0.0.1:8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wp
volumes:
- ./html:/var/www/html
- ./php.ini:/usr/local/etc/php/php.ini
depends_on:
- db
db:
image: mysql/mysql-server:latest
# image: mysql:5.7
restart: always
<span class="bold-red"> logging:
driver: none
</span> environment:
# MYSQL_ROOT_PASSWORD: wordpress
MYSQL_RANDOM_ROOT_PASSWORD: '1'
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_DATABASE: wp
volumes:
- db:/var/lib/mysql
volumes:
db:
データは永続化されているので、 docker-compose down/up をしてコンテナを構築、ログング・ドライバの設定を反映します。下記のコマンドで、コンテナ毎のロギング・ドライバの設定値を確認できます。
$ docker inspect -f '{{.HostConfig.LogConfig.Type}}' fc4503182c41
none
none になっていれば設定完了です。
SDカードはケアしてないと1年ぐらいで壊れてしまうので、細かいコトだけどラズパイサーバにとっては大事な設定です。
ログがRAMDISKにのっていなかったり、マッピングしたポートはファイアウォールの設定を無視して外部に公開されてしまったり、Docker関連での運用ミスが続いております。
コメント