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๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ฐ๊พธ์๋ค.
๊ทธ๋ฌ๋ฉด์ ์ฌ์ฉ๋ฒ๋ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด์๋ค.
https://github.com/settings/tokens/new?scopes=write:packages
read:packages
write:packages
delete:packages
์ด๋ ๊ฒ ๊ถํ์ผ๋ก๋ 3๊ฐ๋ฅผ ์ ํํ๋ค. (write:package
๊ถํ ์ ํ ์ default๋ก repo ๊ถํ๋ ๊ฐ์ด ์ ํ๋๋๋ฐ, ์ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐํํ ์ ์๋ค)
export CR_PAT=ํ ํฐ๊ฐ
echo $CR_PAT | docker login ghcr.io -u ๊นํID --password-stdin
docker login ghcr.io -u ๊นํID -p ํ ํฐ๊ฐ
์ผ๋ก ํด๋ ๋ก๊ทธ์ธ ๋๊ธดํ๋๋ฐ, ๋ณด์์ ์ํํ๋ค๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋ฌ๋คecho ${{ secrets.ํ ํฐ์ด๋ฆ }} | sudo docker login ghcr.io -u ๊นํID --password-stdin
ghcr.io/..
ํ์์ผ๋ก ๋ฐ๊ฟ์ค๋คdocker tag ์๋์ด๋ฏธ์ง ghcr.io/๊นํ์์ด๋/์ด๋ฏธ์ง๋ช
:ํ๊ทธ๋ช
ex: docker tag mysql:latest ghcr.io/honeysleepr/carrot_mysql:latest
ghcr.io/..
ํ์์ผ๋ก ๋ง๋ค์๋ค๋ฉด 4๋ฒ์ผ๋ก ๋ฐ๋ก ๋์ด๊ฐ์docker push ghcr.io/๊นํ์์ด๋/์ด๋ฏธ์ง๋ช
:ํ๊ทธ๋ช
์ฑ๊ณต์ ์ผ๋ก push๊ฐ ๋๋ค๋ฉด ๋ณธ์ธ ๊นํ ๋ฉ์ธํ์ด์ง์ Packages ํญ์์ ์ด๋ฏธ์ง๋ฅผ ํ์ธํ ์ ์๋ค.
https://github.com/honeySleepr?tab=packages
docker pull ghcr.io/๊นํ์์ด๋/์ด๋ฏธ์ง๋ช
:ํ๊ทธ๋ช
docker run ghcr.io/๊นํ์์ด๋/์ด๋ฏธ์ง๋ช
:ํ๊ทธ๋ช
๋!
https://blog.outsider.ne.kr/1530
docs.github.com/en/packages