deploy: cap container logs and prune old images
Nothing bounded json-file growth for containers that did not set a logging block, and every deploy left its old image layers on disk until a manual prune. The docker daemon now sets global log rotation, and the deploy workflow drops image layers older than a week.
Pedro Lucas Porcellis porcellis@eletrotupi.com · 13 days ago
fb32fbf5090f5a80cadcf65e58ac16ae9a97c29b Browse filesParents
d0ab993Changed files
3
Additions
+31
Deletions
0
.github/workflows/deploy.yml
1 1
name: Test & Deploy
2 2
3 3
on:
4 4
push:
5 5
branches:
135 135
136 136
sed -i "s/^IMAGE_TAG=.*/IMAGE_TAG=latest/" .env
137 137
138 138
docker compose up -d --no-deps --force-recreate api
139 139
140 +
# old image layers pile up across deploys; keep roughly the last week
141 +
docker image prune -af --filter "until=168h" >/dev/null 2>&1 || true
142 +
140 143
sleep 5
141 144
docker compose logs --tail=50 api
/dev/null → ansible/roles/docker/handlers/main.yml
1 +
---
2 +
- name: restart docker
3 +
ansible.builtin.service:
4 +
name: docker
5 +
state: restarted
ansible/roles/docker/tasks/main.yml
1 1
---
2 2
# Installs Docker Engine + Compose plugin on Alpine Linux.
3 3
- name: Update apk cache
4 4
community.general.apk:
5 5
update_cache: yes
9 9
name:
10 10
- docker
11 11
- docker-cli-compose
12 12
state: present
13 13
14 +
- name: Ensure /etc/docker exists
15 +
ansible.builtin.file:
16 +
path: /etc/docker
17 +
state: directory
18 +
owner: root
19 +
group: root
20 +
mode: "0755"
21 +
22 +
# Bound every container's json-file logs globally, not just the ones that set
23 +
# an explicit logging block in a compose file
24 +
- name: Configure the Docker daemon log rotation
25 +
ansible.builtin.copy:
26 +
dest: /etc/docker/daemon.json
27 +
content: |
28 +
{
29 +
"log-driver": "json-file",
30 +
"log-opts": { "max-size": "10m", "max-file": "3" }
31 +
}
32 +
owner: root
33 +
group: root
34 +
mode: "0644"
35 +
notify: restart docker
36 +
14 37
- name: Enable Docker service
15 38
ansible.builtin.service:
16 39
name: docker
17 40
enabled: yes
18 41
state: started