gcrane
๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Artifact Registry์ Docker ์ ์ฅ์ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
๋ค์ ์๊ตฌ์ฌํญ์ ํ์ธํ์ธ์.
๋ณต์ฌํ ์ด๋ฏธ์ง์ Artifact Registry์์ ๋์ Docker ์ ์ฅ์๋ฅผ ๋ง๋ค์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํ์ ๊ถํ์ด ์์ต๋๋ค.
Artifact Registry ๋ฆฌ๋(
roles/storage.objectViewer
) ๋๋ ๋ณต์ฌํ๋ ์๋ณธ ์ ์ฅ์์ ๋ํ ์ด์ ์์ํ๋ ๊ถํ์ด ์๋ ์ญํArtifact Registry ์์ฑ์(
roles/artifactregistry.writer
) ๋๋ ๋์ ์ ์ฅ์์ ๋ํ ์ด์ ์์ํ๋ ๊ถํ์ด ์๋ ์ญํ
๊ฐ์
gcrane ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ง์์ ํตํด ์ฌ๋ฌ ์ ์ฅ์ ๊ฐ์ ๋ณต์ฌ๋ฅผ ๊ฐ์ํํด ์ค๋๋ค.
- ๋จ์ผ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ๊ฒฝ๋ก ์๋์ ๋ชจ๋ ์ด๋ฏธ์ง ๋๋ ํ๋ก์ ํธ์ ๋ฉํฐ ๋ฆฌ์ ํธ์คํธ์ ์ ์ฅ๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ ์ด๋ฏธ์ง ๋ชจ์์ ๋ณต์ฌํฉ๋๋ค.
- ์ด๋ฏธ ์ ๋ก๋๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ๊ฑด๋๋๋๋ค.
์ฌ์ฉํ์ง ์๋ ์ด๋ฏธ์ง ์ญ์
๋ณต์ฌ ์์ ์ ์ํํ๊ธฐ ์ ์ ์ฌ์ฉํ์ง ์๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๋ฉด ์คํ ๋ฆฌ์ง ๋น์ฉ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ๋ ์ด์ ํ์ํ์ง ์์ ์ด๋ฏธ์ง๋ฅผ ์๋ณํ๊ณ ํด๋น ์ด๋ฏธ์ง์ ์ญ์ ๋ฅผ ์๋ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด gcr-cleaner ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ด์ ์ด๋ฏธ์ง๋ฅผ ์ฐพ๊ณ ์ญ์ ํ ์ ์์ต๋๋ค.
gcr-cleaner
๋๊ตฌ๋ ๊ณต์ Google ์ ํ์ด ์๋๋๋ค.
๋๊ตฌ ์ค์ ๋ฐ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ gcr-cleaner ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
gcrane ์ค์
๋ค์ ํ๊ฒฝ์์ gcrane
์ ์คํํ ์ ์์ต๋๋ค.
Compute Engine ์ธ์คํด์ค - ๋ณต์ฌํ ์ปจํ ์ด๋ ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ด ์ต์ ์ ์ฌ์ฉํฉ๋๋ค.
๋น์ฉ: Compute Engine VM์ ์ธ์คํด์ค ์ ํ์์ ๊ธฐ์ค์ผ๋ก ์๊ธ์ด ์ฒญ๊ตฌ๋ฉ๋๋ค. VM ์ธ์คํด์ค๊ฐ ์์ค ์ ์ฅ์์ ๋ค๋ฅธ ์์น์ ์๋ ๊ฒฝ์ฐ ๋ณต์ฌํ ์ด๋ฏธ์ง์ ๋คํธ์ํฌ ์ด๊ทธ๋ ์ค ์๊ธ์ด ๋ถ๊ณผ๋ ์ ์์ต๋๋ค.
Cloud Shell - ์ฝ 40GB ์ดํ์ ์๊ท๋ชจ ์งํฉ์ ๋ณต์ฌํ๋ ์ต์ ์ ๋๋ค.
gcrane
๋๊ตฌ๋ ์ด๋ฏธ ์ ๋ก๋๋ ์ด๋ฏธ์ง ๋ ์ด์ด์ ์ ๋ก๋๋ฅผ ๊ฑด๋๋ฐ๋ฏ๋ก, ์ด ํ๋๋ ๋ณต์ฌ ์ค์ธ ์ ๋ฐ์ดํฐ์ ์ ์ฉ๋ฉ๋๋ค.ํฐ ์ ์ฅ์๋ฅผ ๋ณต์ฌํ๋ฉด ์์ฒญ ์ ํ ์๊ฐ 10๋ถ์ด ์ง๋๊ณ Cloud Shell ์ฐ๊ฒฐ์ด ๋์ด์ง ์ ์์ต๋๋ค.
๋น์ฉ: Cloud Shell ์ธ์คํด์ค๊ฐ ์์ค ์ ์ฅ์์ ๋ค๋ฅธ ์์น์ ์๋ ๊ฒฝ์ฐ ๋ณต์ฌํ ์ด๋ฏธ์ง์ ๋คํธ์ํฌ ์ด๊ทธ๋ ์ค ์๊ธ์ด ๋ถ๊ณผ๋ ์ ์์ต๋๋ค. Cloud Shell ์ธ์ ์ ์์น๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ํ์ฌ ์ธ์ ์ ์์น๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
curl metadata/computeMetadata/v1/instance/zone
์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ฌํญ์ ํ์ฉํ๋ ค๋ฉด ์ต์ ๋ฒ์ ์ gcrane
๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ค์ ์น์
์ ์ค์ ์๋ด์ ์ต์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๋ ๋จ๊ณ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๊ธฐ์กด gcrane ์ค์น ๋ฒ์ ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane version
Compute Engine ์ค์
gcrane
์ ์ฌ์ฉํ์ฌ Compute Engine VM ์ธ์คํด์ค์ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- VM ์ธ์คํด์ค๋ฅผ ๋ง๋ญ๋๋ค. ๋น์ฉ์ ์ต์ํํ๋ ค๋ฉด ๋ณต์ฌํ๋ ์๋ณธ ๋ ์ง์คํธ๋ฆฌ์ ๋์ผํ ์์น์ ์ธ์คํด์ค๋ฅผ ๋ง๋ญ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก VM ์ธ์คํด์ค๋ ๊ธฐ๋ณธ ์๋น์ค ๊ณ์ ๊ณผ ์ฐ๊ฒฐ๋๋ฉฐ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๊ถํ์ด ์์ต๋๋ค. VM ์ธ์คํด์ค๊ฐ ์ด๋ฏธ์ง๋ฅผ ํธ์ํ ์ ์๋๋ก ์ก์ธ์ค ๋ฒ์๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
VM ์ธ์คํด์ค๋ฅผ ์ค์งํฉ๋๋ค. ์ธ์คํด์ค ์ค์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ๋ฒ์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
INSTANCE์ VM ์ธ์คํด์ค์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
VM ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํฉ๋๋ค. ์ค์ง๋ ์ธ์คํด์ค ์์์ ์ฐธ์กฐํ์ธ์.
SSH๋ฅผ ์ฌ์ฉํ์ฌ VM ์ธ์คํด์ค์ ์ฐ๊ฒฐํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ
gcrane
์ ๋ค์ด๋ก๋ํฉ๋๋ค.curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ
gcrane
๋ช ๋ น์ด๋ฅผ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
gcrane --help
๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
์ด์ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค. ๊ณ์ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
Cloud Shell ์ค์
Cloud Shell ์ฐฝ์ ์ฝ๋๋ค.
๊ธฐ๋ณธ ํ๋ก์ ํธ๋ฅผ ์ค์ ํฉ๋๋ค. PROJECT๋ฅผ Container Registry์ Artifact Registry๊ฐ ์ค์น๋ ํ๋ก์ ํธ์ ID๋ก ๋ฐ๊ฟ๋๋ค.
gcloud config set project PROJECT
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ
gcrane
๋๊ตฌ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ
gcrane
๋ช ๋ น์ด๋ฅผ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
gcrane --help
๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
์ด์ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค. ๊ณ์ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ก์ปฌ ๋จธ์ ์ค์
GitHub ์ ์ฅ์์์
gcrane
์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ๋ช ๋ น์ด๋ ๋ช ๋ น์ค์์ Linux x86-64 ๋ฐฐํฌํ์ ๋ค์ด๋ก๋ํฉ๋๋ค.curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ
gcrane
๋ช ๋ น์ด๋ฅผ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค. ์ด ๋ช ๋ น์ด๋ ๋ค์ด๋ก๋ํ ํ์ผ์ ์ด๋ฆ์ดgo-containerregistry.tar.gz
๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
gcrane --help
๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
์ด์ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค. ๊ณ์ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ณต์ฌํ ์ด๋ฏธ์ง ์๋ณ
gcrane
๋๊ตฌ๋ฅผ ์ค์นํ๋ฉด ์์ค ์ ์ฅ์์ ๊ธฐ์กด ์ด๋ฏธ์ง๋ฅผ ๋์ดํ์ฌ ๋ณต์ฌํ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ธฐ์กด ์ด๋ฏธ์ง๋ฅผ ๋์ดํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY
์ด๋ฏธ์ง์ ์๋ ํ๊ทธ๋ฅผ ๋์ดํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE
ํน์ ๊ฒฝ๋ก์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋์ดํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH
๊ฐ ๋ช ๋ น์ด๋ง๋ค ๋ค์์ ์ํํฉ๋๋ค.
- LOCATION์ ์ ์ฅ์ ์์น๋ก ๋ฐ๊ฟ๋๋ค.
- PROJECT๋ฅผ ํ๋ก์ ํธ ID๋ก ๋ฐ๊ฟ๋๋ค.
- PATH๋ฅผ ๋ณต์ฌํ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
์ด๋ฏธ์ง ๋ณต์ฌ ๋ช ๋ น์ด๋ ์ด๋ฏธ์ง ๋ณต์ฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด๋ฏธ์ง ๋ณต์ฌ
gcrane cp
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ณ ์ด๋ฏธ์ง ๋๋ ์ด๋ฏธ์ง ์งํฉ์ ๋ณต์ฌํ ์ ์์ต๋๋ค.
๋จ์ผ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2
์ ์ฅ์์ ํน์ ๊ฒฝ๋ก์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2
์ ์ฅ์์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2
๋ค์ ๊ฐ์ ๋ฐ๊ฟ๋๋ค.
- LOCATION1์ ์์ค ์ ์ฅ์์ ์์น์ ๋๋ค.
- LOCATION2๋ ๋์ ์ ์ฅ์์ ์์น์ ๋๋ค.
- PROJECT1์ ์์ค ์ ์ฅ์์ ์ฐ๊ฒฐ๋ Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค.
- PROJECT2๋ ๋์ ์ ์ฅ์์ ์ฐ๊ฒฐ๋ Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค.
- REPOSITORY1์ ์์ค ์ ์ฅ์์ ์ด๋ฆ์ ๋๋ค.
- REPOSITORY2๋ ๋์ ์ ์ฅ์์ ์ด๋ฆ์ ๋๋ค.
- IMAGE1์ ๋ณต์ฌํ ์ด๋ฏธ์ง์ ๋๋ค.
- IMAGE2๋ ๋์ ์ ์ฅ์์ ์๋ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ๋๋ค.
์์
๋ค์ ๋ช
๋ น์ด๋ repo1
์ ์ฅ์์์ ๋์ผํ ํ๋ก์ ํธ ๋ฐ ๋ฆฌ์ ์ repo2
์ ์ฅ์์ my-image:tag1
์ ๋ณต์ฌํฉ๋๋ค.
gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1
๋ค์ ๋ช
๋ น์ด๋ repo1
์ ์ฅ์์ ์๋ test-images/testing
์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ repo2
์ ์ฅ์์ ๋์ผ ๊ฒฝ๋ก์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.
gcrane cp -r us-west1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-west1-docker.pkg.dev/my-project/repo2/test-images/testing
๋ค์ ๋ช
๋ น์ด๋ dev-project
ํ๋ก์ ํธ์ my-repo
์ ์ฅ์์ ์๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฅธ prod-project
ํ๋ก์ ํธ์ my-repo
์ ์ฅ์์ ๋ณต์ฌํฉ๋๋ค.
gcrane cp -r us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo