eletrotupi / tcc/ commit / fb32fbf

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 files
Parents d0ab993
Changed 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