GitHub Packages๐Ÿ“ฆ (aka. Container Registry)

๊ฐ•๋ณ‘์ฒ ยท2022๋…„ 12์›” 7์ผ
0

GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” Docker Hub ๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋‹ค.
Docker image๋ฅผ push ํ•ด์„œ ์ €์žฅํ•˜๊ณ , pull ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค


์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ

ํ”„๋กœ์ ํŠธ์—์„œ CI/CD๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ DockerHub๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ DockerHub ๋ฌด๋ฃŒ ๋ฒ„์ „์—์„œ๋Š” private image๋ฅผ ํ•˜๋‚˜๋งŒ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” public image๋กœ ์˜ฌ๋ ค์•ผํ•œ๋‹ค.

Public image๋กœ ์˜ฌ๋ ธ๋‹ค๊ณ  ํ•ด์„œ ๋ณด์•ˆ์ƒ์œผ๋กœ ์œ„ํ—˜ํ•œ์ง€๋Š” ์‚ฌ์‹ค ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์ฐœ์ฐœํ•˜๊ธด ํ–ˆ๋‹ค. GitHub์— ์˜ฌ๋ฆฐ ์†Œ์Šค์ฝ”๋“œ์™€๋Š” ๋‹ฌ๋ฆฌ, ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” build ๋œ ํŒŒ์ผ์ด ๊ณต๊ฐœ๋˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ!

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ Github Packages์˜ Container registry๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

Private image๋ฅผ ์ œํ•œ์—†์ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ ๋„ ์ข‹์•˜๊ณ , ์–ด์ฐจํ”ผ CI/CD๋ฅผ GitHub๋ฅผ ํ†ตํ•ด์„œ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ image ์ €์žฅ๋„ GitHub์— ํ•˜๋Š” ๊ฒŒ ์‘์ง‘๋„(?) ๋ฉด์—์„œ๋„ ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๊ทธ๋ž˜์„œ CI/CD์—์„œ DockerHub ๋Œ€์‹  Github Packages๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด์„œ ์‚ฌ์šฉ๋ฒ•๋„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1. Packages๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ(๋น„๋ฐ€๋ฒˆํ˜ธ ์—ญํ• )์„ ๋งŒ๋“ ๋‹ค

https://github.com/settings/tokens/new?scopes=write:packages

read:packages

write:packages

delete:packages

์ด๋ ‡๊ฒŒ ๊ถŒํ•œ์œผ๋กœ๋Š” 3๊ฐœ๋ฅผ ์„ ํƒํ•œ๋‹ค. (write:package ๊ถŒํ•œ ์„ ํƒ ์‹œ default๋กœ repo ๊ถŒํ•œ๋„ ๊ฐ™์ด ์„ ํƒ๋˜๋Š”๋ฐ, ์œ„ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค)


2. Token์„ ์ด์šฉํ•ด ๋กœ๊ทธ์ธํ•œ๋‹ค

export CR_PAT=ํ† ํฐ๊ฐ’
echo $CR_PAT | docker login ghcr.io -u ๊นƒํ—™ID --password-stdin
  • ์—ฌ๊ธฐ์„œ ๊นƒํ—™ ID๋Š” ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผํ•œ๋‹ค!
  • ๊ทธ๋ƒฅ docker login ghcr.io -u ๊นƒํ—™ID -p ํ† ํฐ๊ฐ’ ์œผ๋กœ ํ•ด๋„ ๋กœ๊ทธ์ธ ๋˜๊ธดํ•˜๋Š”๋ฐ, ๋ณด์•ˆ์ƒ ์œ„ํ—˜ํ•˜๋‹ค๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค
  • GitHub Actions ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ๋œ๋‹ค: echo ${{ secrets.ํ† ํฐ์ด๋ฆ„ }} | sudo docker login ghcr.io -u ๊นƒํ—™ID --password-stdin

3. pushํ•  ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ghcr.io/.. ํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค

docker tag ์›๋ž˜์ด๋ฏธ์ง€ ghcr.io/๊นƒํ—™์•„์ด๋””/์ด๋ฏธ์ง€๋ช…:ํƒœ๊ทธ๋ช…

ex: docker tag mysql:latest ghcr.io/honeysleepr/carrot_mysql:latest

  • ์—ฌ๊ธฐ์„œ๋Š” ๊นƒํ—™ID๋ฅผ ์†Œ๋ฌธ์ž๋กœ ์ ์–ด์•ผํ•œ๋‹ค
  • ์• ์ดˆ์— ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๋•Œ ghcr.io/.. ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด 4๋ฒˆ์œผ๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ€์ž

4. GitHub Packages๋กœ ์ด๋ฏธ์ง€๋ฅผ push ํ•œ๋‹ค.

docker push ghcr.io/๊นƒํ—™์•„์ด๋””/์ด๋ฏธ์ง€๋ช…:ํƒœ๊ทธ๋ช…

์„ฑ๊ณต์ ์œผ๋กœ push๊ฐ€ ๋๋‹ค๋ฉด ๋ณธ์ธ ๊นƒํ—™ ๋ฉ”์ธํŽ˜์ด์ง€์˜ Packages ํƒญ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
https://github.com/honeySleepr?tab=packages


5. ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ณณ์—์„œ ์ด๋ฏธ์ง€๋ฅผ pull ํ•œ๋‹ค

docker pull ghcr.io/๊นƒํ—™์•„์ด๋””/์ด๋ฏธ์ง€๋ช…:ํƒœ๊ทธ๋ช…

  • ์ด๋•Œ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. (2๋‹จ๊ณ„ ์ฐธ๊ณ )

6. Docker ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ๋‹ค

docker run ghcr.io/๊นƒํ—™์•„์ด๋””/์ด๋ฏธ์ง€๋ช…:ํƒœ๊ทธ๋ช…


๋!


๐Ÿ“š reference

https://blog.outsider.ne.kr/1530
docs.github.com/en/packages

0๊ฐœ์˜ ๋Œ“๊ธ€