cronのDockerコンテナからcronを動かして別のDockerコンテナのlogroate実行
動作確認環境
AWS Workspaces
Amazon Linux2 (Time zone: Asia/Tokyo (JST, +0900))
Maxscale 2.4.4
ディレクトリ
home/username/logrotate
|--log
| |--maxscale
| | |--maxscale.log
|--maxscale
| |--maxscale_logrotate
|--maxscale-dockerfiles
| |--Dockerfile
|--cron-logrotate-docker-dockerfiles
| |--Dockerfile
| |--maxscale-cron
FROM mariadb/maxscale:2.4.4
RUN apt-get update && apt-get -y install logrotate
# RUN mv /etc/cron.daily/logrotate /etc/cron.hourly/logrotate
# ADD maxscale-cron /etc/cron.d/maxscale-cron
# RUN chmod 0644 /etc/cron.d/maxscale-cron
maxscale/maxscale_logrotate
/var/log/maxscale/maxscale.log {
su maxscale maxscale
create 644 maxscale maxscale
rotate 3
missingok
compress
delaycompress
sharedscripts
size 1K
dateext
dateformat %Y%m%d%H%M%S
postrotate
kill -USR1 `cat /var/run/maxscale/maxscale.pid`
endscript
}
cron-logrotate-docker-dockerfiles/Dockerfile
FROM alpine:3.10.3
RUN apk --update add docker && rm -rf /var/cache/apk/*
COPY maxscale-cron /etc/crontabs/root
# cronのdaemonを起動(log level=1, foreground)
CMD crond -l 1 -f
cron-logrotate-docker-dockerfiles/maxscale-cron
*/1 * * * * docker exec maxscale /usr/sbin/logrotate -f /etc/logrotate.d/maxscale_logrotate >> /var/log/cron.log 2>&1
Dockerイメージ作成
$ mkdir -p log/maxscale
$ chmod 777 log/maxscale
$ mkdir maxscale
$ mkdir maxscale-dockerfiles
$ mkdir cron-logrotate-docker-dockerfiles
$ cd maxscale-dockerfiles
$ docker build -t maxscale-log:2.4.4 .
$ cd ..
$ cd cron-logrotate-docker-dockerfiles
$ docker build -t base:1.0 .
動作確認
$ cd ..
$ sudo chown root:root maxscale/maxscale_logrotate
$ docker run -d \
--name base \
-v /var/run/docker.sock:/var/run/docker.sock \
base:1.0
# MaxscaleのDockerコンテナ起動
$ docker run \
-d \
--name maxscale \
-v $(pwd)/log/maxscale:/var/log/maxscale \
-v $(pwd)/maxscale/maxscale_logrotate:/etc/logrotate.d/maxscale_logrotate \
maxscale-log:2.4.4 \
maxscale -d -U maxscale -l file
# ログ確認
$ ls -l log/maxscale/
合計 8
-rw-r--r-- 1 chrony ssh_keys 0 12月 19 01:40 maxscale.log
-rw-r--r-- 1 chrony ssh_keys 707 12月 19 01:39 maxscale.log20191218163900.gz
-rw-r--r-- 1 chrony ssh_keys 187 12月 19 01:40 maxscale.log20191218164000
Docker 公式コンテナを使って別のコンテナにdocker execする方法 (2019/12/20追記)
コンテナ内でコンテナを操作する主立ったやり方には
DinD(Docker in Docker)
DooD(Docker outside of Docker)
の二つがある。
コンテナからコンテナを操作する
DooDを使ってみる
$ docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker /bin/ash
/ # docker exec maxscale /usr/sbin/logrotate -f /etc/logrotate.d/maxscale_logrotate
/ # exit
$ ls log/maxscale/ -l
合計 8
-rw-r--r-- 1 chrony ssh_keys 187 12月 20 23:29 maxscale.log
-rw-r--r-- 1 chrony ssh_keys 1831 12月 20 23:29 maxscale.log20191220142926