CI/CD pipeline-д Docker ашиглах
Код push хийх бүрт автоматаар image build хийж, registry-д байршуулах нь орчин үеийн хөгжүүлэлтийн стандарт болсон. Энэ хичээлд GitHub Actions ашиглан тэр процессийг тохируулна.
Үндсэн ойлголт
git push → GitHub Actions trigger → docker build → docker push → Registry
Үүний дараа сервер шинэ image татаж, deploy хийнэ.
GitHub Actions-ийн бүтэц
.github/workflows/docker.yml файл үүсгэнэ:
name: Docker Build ба Push
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Код татах
uses: actions/checkout@v4
- name: Docker Hub-д нэвтрэх
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Image build ба push
uses: docker/build-push-action@v5
with:
context: .
push: ${{ github.ref == 'refs/heads/main' }}
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/myapp:latest
${{ secrets.DOCKERHUB_USERNAME }}/myapp:${{ github.sha }}
push: ${{ github.ref == 'refs/heads/main' }} — зөвхөн main branch-д push хийгдэхэд registry-д upload хийнэ. PR-д зөвхөн build шалгана.
GitHub Secrets тохируулах
Repository → Settings → Secrets and variables → Actions:
DOCKERHUB_USERNAME → docker hub хэрэглэгчийн нэр
DOCKERHUB_TOKEN → Docker Hub access token (нууц үг биш!)
Docker Hub access token авах:
- hub.docker.com → Account Settings → Security
- New Access Token → нэр өгч үүсгэнэ
- Гарсан token-ийг GitHub Secrets-т хадгална
GitHub Container Registry ашиглах
Docker Hub-ийн оронд ghcr.io ашиглавал нэмэлт нууц хадгалах шаардлагагүй:
name: Docker Build ба Push
on:
push:
branches: [main]
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: ghcr.io-д нэвтрэх
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Image build ба push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
ghcr.io/${{ github.repository }}:latest
ghcr.io/${{ github.repository }}:${{ github.sha }}
GITHUB_TOKEN нь GitHub-ийн автоматаар олгодог token — нэмэлт тохируулга шаардлагагүй.
Layer cache — CI дахь хурдасгалт
CI ажиллах бүрт layer-уудыг дахин build хийвэл удаан болно. Cache ашиглаж хурдасгана:
- name: Docker Buildx тохируулах
uses: docker/setup-buildx-action@v3
- name: Image build ба push (cache-тай)
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ghcr.io/${{ github.repository }}:latest
cache-from: type=gha
cache-to: type=gha,mode=max
type=gha — GitHub Actions cache ашиглана. npm install эсвэл pip install layer өөрчлөгдөөгүй бол дахин ажиллахгүй.
Multi-platform build
ARM сервер (AWS Graviton, Apple M series) болон x86 хоёуланд ажиллах image:
- name: Docker Buildx тохируулах
uses: docker/setup-buildx-action@v3
- name: Image build ба push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/${{ github.repository }}:latest
Бүтэн workflow жишээ — tag-д тулгуурласан version
name: Docker Release
on:
push:
tags:
- "v*" # v1.0.0, v2.1.3 зэрэг tag-д ажиллана
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
v1.2.3 tag push хийвэл автоматаар 1.2.3, 1.2, 1 гэсэн tag-ууд үүснэ.
Build явцыг шалгах
GitHub → Repository → Actions tab
Ажиллаж байгаа болон өнгөрсөн workflow-уудыг харж болно. Алдаа гарвал хаана яагаад гарсныг логоос харна.
Дараагийн хичээлд:
Docker Dockerfile болон workflow-ийн шилдэг туршлагуудыг нэгтгэн checklist хэлбэрт оруулна.