Skip to content

Commit 746f7b1

Browse files
committed
Docker cron irudiaren lehen bertsioa
1 parent 691e09e commit 746f7b1

4 files changed

Lines changed: 135 additions & 1 deletion

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Build and Push Docker Image
2+
3+
on:
4+
push:
5+
branches: [ "main" ]
6+
workflow_dispatch:
7+
8+
env:
9+
REGISTRY: ghcr.io
10+
# Irudiaren izena = codesyntax/docker-cron-image
11+
IMAGE_NAME: ${{ github.repository }}
12+
13+
jobs:
14+
build-and-push:
15+
runs-on: ubuntu-latest
16+
17+
permissions:
18+
contents: read
19+
packages: write
20+
21+
steps:
22+
- name: Kodea jaitsi (Checkout)
23+
uses: actions/checkout@v4
24+
25+
- name: Docker-en login egin (Log in to the Container registry)
26+
uses: docker/login-action@v3
27+
with:
28+
registry: ${{ env.REGISTRY }}
29+
username: ${{ github.actor }}
30+
password: ${{ secrets.GITHUB_TOKEN }}
31+
32+
- name: Metadatuak erauzi (Extract metadata)
33+
id: meta
34+
uses: docker/metadata-action@v5
35+
with:
36+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
37+
tags: |
38+
type=raw,value=latest
39+
type=sha,prefix={{date 'YYYYMMDD'}}-
40+
41+
- name: Irudia sortu eta igo (Build and push Docker image)
42+
uses: docker/build-push-action@v5
43+
with:
44+
context: .
45+
push: true
46+
tags: ${{ steps.meta.outputs.tags }}
47+
labels: ${{ steps.meta.outputs.labels }}

Dockerfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM alpine:latest
2+
RUN apk add --no-cache bash curl cronie docker-cli
3+
4+
# Kopiatu eta ziurtatu baimenak egokiak direla
5+
COPY crontab.txt /etc/crontabs/root
6+
RUN chmod 0644 /etc/crontabs/root
7+
8+
# Alpine-n crond zuzenean deitu dezakegu
9+
CMD ["crond", "-f", "-l", "2"]

README.md

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,79 @@
11
# docker-cron-image
2-
Docker inguruneetan cron lanak exekutatzeko irudia.
2+
3+
Docker irudi arin eta moldagarria, programatutako atazak (cron jobs) edukiontzi barruan exekutatzeko diseinatua.
4+
5+
Irudi hau **Alpine Linux**-en oinarrituta dago eta honako tresna hauek dakartza aurrez instalatuta, automatizazio script-ak errazteko:
6+
* `cronie` (Cron kudeatzailea)
7+
* `bash`
8+
* `curl`
9+
* `docker-cli` (Docker barruan beste Docker edukiontzi batzuk kudeatu ahal izateko)
10+
11+
Besterik gabe exekutatzen bada, irudiak abisu-mezu bat bistaratuko du logetan minuturo, erabiltzaileari bere konfigurazio propioa muntatu behar duela gogorarazteko.
12+
13+
---
14+
15+
## Erabilera gida
16+
17+
Irudi hau GitHub Container Registry-tik (GHCR) deskargatu dezakezu.
18+
19+
### Bertsioen Nomenklatura (Tags)
20+
21+
Irudiak honako *tag* egitura hau jarraitzen du bertsioak kudeatzeko:
22+
23+
* **`latest`**: Uneko bertsio egonkor eta berriena.
24+
* **`YYYYMMDD-sha`** (Adibidez: `20251126-a1b2c3d`): Data eta commit-aren hash-a barne hartzen dituen bertsio finkoa. Honek bermatzen du beti irudi berbera exekutatuko dela, nahiz eta `latest` eguneratu.
25+
26+
### Docker Compose Adibidea
27+
28+
Zure cron lanak exekutatzeko, **zure `crontab` fitxategia muntatu behar duzu** edukiontziaren `/etc/crontabs/root` bidean.
29+
30+
Hona hemen `docker-compose.yml` fitxategi baten adibidea:
31+
32+
```yaml
33+
version: '3.8'
34+
35+
services:
36+
cron-worker:
37+
image: ghcr.io/codesyntax/docker-cron-image:latest
38+
container_name: nire-cron-lana
39+
restart: unless-stopped
40+
volumes:
41+
# Zure cron lanak dituen fitxategia muntatu (overwrite)
42+
- ./nire-crontab.txt:/etc/crontabs/root:ro
43+
44+
# Docker socket-a muntatu (Docker komandoak erabili ahal izateko)
45+
- /var/run/docker.sock:/var/run/docker.sock
46+
```
47+
48+
### ⚠️ Ohar garrantzitsuak konfigurazioari buruz
49+
50+
Zure `crontab.txt` fitxategia sortzean, kontuan izan hiru puntu hauek:
51+
52+
1. **Irteera desbideratu:** Docker-ek logak irakurri ahal izateko, komandoen irteera `/proc/1/fd/1`-era bideratu behar da.
53+
2. **Lerro hutsa:** Fitxategiaren amaieran beti lerro huts bat utzi (bestela cron-ek ez du irakurriko).
54+
3. **Docker Socket-a:** `docker-compose` fitxategian `/var/run/docker.sock` muntatzea ezinbestekoa da zure cron lanek `docker` komandoak exekutatu behar badituzte (adibidez: `docker restart nginx`). Honek edukiontziari baimena ematen dio "Host" makinako Docker motorra kontrolatzeko.
55+
56+
Adibidea (`crontab.txt`):
57+
```text
58+
# Adibidea: Nginx edukiontzia berrabiarazi egunero 03:00etan
59+
0 3 * * * docker restart nire-nginx > /proc/1/fd/1 2>&1
60+
```
61+
62+
## Garapen gida
63+
64+
Proiektu honek **CI/CD** (Continuous Integration / Continuous Deployment) sistema bat du integratuta GitHub Actions erabiliz.
65+
66+
### GitHub Actions Workflow-a
67+
68+
Errepositorioan aldaketak egiten diren bakoitzean, `.github/workflows/docker-publish.yml` fitxategian definitutako prozesua abiarazten da.
69+
70+
Workflow honen urratsak honako hauek dira:
71+
72+
1. **Aktibazioa:** `main` adarrera *push* bat egiten denean aktibatzen da automatikoki.
73+
2. **Build:** Docker irudia eraikitzen du `Dockerfile` erabiliz.
74+
3. **Tagging:** Irudiari bi etiketa jartzen dizkio:
75+
* `latest`
76+
* Data eta commit hash-a daraman etiketa bakarra.
77+
4. **Publish:** Irudia **GitHub Container Registry (GHCR)**-ra igotzen du.
78+
79+
Ez da eskuzko `docker push` komandorik behar; kodea igotzearekin batera irudiaren bertsio berria eskuragarri egongo da minutu gutxiren buruan.

crontab.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* * * * * echo "Defektuzko cron konfigurazioa erabiltzen zaude. Zure cron lanak ez dira exekutatuko." > /proc/1/fd/1 2>&1

0 commit comments

Comments
 (0)