[Docker] ๋์ปค CI(Docker CI)
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ Docker CI๋ฅผ ์ ๋ฆฌํ๋ค. Dockerfile๋ก ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ง๋๋ ๋ฐ์ ๋์๊ฐ, ์ฝ๋๋ฅผ ํธ์ํ๋ฉด ์๋์ผ๋ก ์ด๋ฏธ์ง๊ฐ ๋น๋ยทํธ์๋๋๋ก GitHub Actions๋ก ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ๋ค.
Docker CI๋? CI/CD ํ์ดํ๋ผ์ธ์์ Docker ์ด๋ฏธ์ง ๋น๋๋ฅผ ์๋ํํ๋ ๊ฒ. ์ฝ๋๋ฅผ Git์ ํธ์ํ ๋๋ง๋ค ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ยทํ ์คํธํด, ํญ์ ์ต์ ์ด๋ฏธ์ง๋ฅผ ์ ์งํ๋ค.
1. CI/CD & ์๋ํ ํ๋ฆ
CI/CD๋ ์ฝ๋ ๋ณ๊ฒฝ์ ์์ฃผ ํตํฉํ๊ณ , ์๋ ๋น๋ยทํ ์คํธ๋ฅผ ๊ฑฐ์ณ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ๋ ๊ฒ์ด๋ค. ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ์ก๋๋ค.
flowchart LR
Dev(("๐จโ๐ป ๊ฐ๋ฐ์"))
Git[("๐ GitHub")]
GA["โ๏ธ GitHub Actions"]
Hub[("๐ณ Docker Hub")]
Dev -- "git push" --> Git
Git -- "์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ" --> GA
GA -- "build & push" --> Hub
๐ก GitHub Actions๋ ์ ์ฅ์ ์ด๋ฒคํธ(pushยทPR ๋ฑ)์ ๋ฐ์ํด ์ํฌํ๋ก๋ฅผ ์คํํ๋ ๋๊ตฌ๋ค. YAML๋ก ์ ์ํ๊ณ ๋ค์ํ ์ก์ ์ ์กฐํฉํด ๋น๋ยทํ ์คํธยท๋ฐฐํฌ๋ฅผ ์๋ํํ๋ค.
2. ๊ตฌ์ฑ ๋จ๊ณ
| ๋จ๊ณ | ๋ด์ฉ |
|---|---|
| โ | ๋ก์ปฌ์์ Dockerfile ๋น๋ โ Docker Hub push(์ต์ด) |
| โก | GitHub ์ ์ฅ์ ์์ฑ + ์ฝ๋ ํธ์ |
| โข | Settings > Secrets์ DOCKER_HUB_USERNAMEยทDOCKER_HUB_PASSWORD ๋ฑ๋ก |
| โฃ | .github/workflows/docker-image.yml ์์ฑ |
| โค | ์ฝ๋ ๋ณ๊ฒฝยทํธ์ โ Actions ์๋ ์คํ |
| โฅ | Actions ํญ์์ ๊ฒฐ๊ณผ ํ์ธ |
โ ๏ธ Docker Hub ๋น๋ฐ๋ฒํธ ๊ฐ์ ๋ฏผ๊ฐ ์ ๋ณด๋ ์ ๋ YAML์ ์ง์ ์ฐ์ง ๋ง๊ณ Secrets์ ์ ์ฅํ๋ค. ์ํฌํ๋ก์์๋
${{ secrets.์ด๋ฆ }}์ผ๋ก ์ฐธ์กฐํด, ์ฝ๋์ ์๊ฒฉ ์ฆ๋ช ์ด ๋ ธ์ถ๋์ง ์๊ฒ ํ๋ค.
3. ์ํฌํ๋ก ํ์ผ (docker-image.yml)
master ๋ธ๋์น ํธ์๋ ํ๊ทธ ์์ฑ ์, ์ด๋ฏธ์ง๋ฅผ ๋น๋ํด Docker Hub์ ์ฌ๋ฆฐ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
name: Push Docker Image to Docker Hub
on:
push:
branches:
- 'master'
tags:
- '**'
jobs:
push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Docker meta
id: docker_meta
uses: crazy-max/ghaction-docker-meta@v1
with:
images: leecloudo/nodejs-ci
tag-semver: |
{{version}}
{{major}}.{{minor}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Build and push Docker Image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
์ฃผ์ ์คํ ํด์ค:
| ์คํ | ์ญํ |
|---|---|
checkout | ์์ค ์ฝ๋ ์ฒดํฌ์์ |
docker_meta | ํ๊ทธยท๋ผ๋ฒจ ์๋ ์์ฑ(์๋งจํฑ ๋ฒ์ ) |
QEMUยทBuildx | ๋ฉํฐ ์ํคํ ์ฒ ๋น๋ ์ง์ |
login-action | Secrets๋ก Docker Hub ๋ก๊ทธ์ธ |
build-push-action | ์ด๋ฏธ์ง ๋น๋ + push |
๐ก QEMU + Buildx๋ฅผ ์ฐ๋ฉด
amd64๋ฟ ์๋๋ผarm64(์: ์ ํ ์ค๋ฆฌ์ฝยท๋ผ์ฆ๋ฒ ๋ฆฌํ์ด) ์ด๋ฏธ์ง๊น์ง ํ ๋ฒ์ ๋ฉํฐ ์ํคํ ์ฒ ๋น๋ํ ์ ์๋ค.docker_meta๋ ์ปค๋ฐยทํ๊ทธ๋ก๋ถํฐ ๋ฒ์ ํ๊ทธ๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
Docker CI (GitHub Actions)
โโ ๊ฐ๋
ํธ์ โ ์ด๋ฏธ์ง ์๋ ๋น๋ยทํธ์
โโ ํธ๋ฆฌ๊ฑฐ on.push (๋ธ๋์นยทํ๊ทธ)
โโ ๋ณด์ Secrets์ Docker Hub ์๊ฒฉ ์ฆ๋ช
โโ ๋น๋ Buildx(๋ฉํฐ ์ํคํ
์ฒ) + build-push-action
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| Docker CI | ์ด๋ฏธ์ง ๋น๋ ์๋ํ |
| GitHub Actions | ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํฌํ๋ก |
| Secrets | ๋ฏผ๊ฐ ์ ๋ณด ์์ ์ ์ฅ |
Docker CI์ ํต์ฌ์ โํธ์ํ๋ฉด ์ด๋ฏธ์ง๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ ธ ๋ ์ง์คํธ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋โ ํ๋ฆ์ ๋ง๋๋ ๊ฒ์ด๋ค. GitHub Actions์ Secrets๋ฅผ ํ์ฉํ๋ฉด, ์๋ ๋น๋ยทํธ์ ์์ด ํญ์ ์ต์ ์ด๋ฏธ์ง๋ฅผ ์ ์งํ ์ ์๋ค.
Comments powered by Disqus.