๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ

[GCP] Docker ์†Œ๊ฐœ

by - ์˜คํŠธ - 2023. 4. 22.

4์›” 22์ผ ์™„๋ฃŒ /

 

๋ชฉํ‘œ

  • Docker ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ, ์‹คํ–‰, ๋””๋ฒ„๊ทธํ•˜๊ธฐ
  • Docker Hub ๋ฐ Google Artifact Registry์—์„œ Docker ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ
  • Docker ์ด๋ฏธ์ง€๋ฅผ Google Artifact Registry๋กœ ํ‘ธ์‹œํ•˜๊ธฐ

 

์ง„ํ–‰

- ์„ค์ • ๋ฐ ์š”๊ฑด

์‹ค์Šต ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์•ผ ํ€˜์ŠคํŠธ ์ง„ํ–‰ ๊ฐ€๋Šฅ

 

์‹ค์Šต ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Google Cloud ์ฝ˜์†”์— ์ ‘์† ๊ฐ€๋Šฅ

(์ด๋•Œ ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ๋ณธ์ธ ๊ตฌ๊ธ€ ๊ณ„์ •์ด ์•„๋‹Œ ์ž„์‹œ ๊ณ„์ •์„ ์‚ฌ์šฉํ•ด์•ผ ๋ˆ์ด ๋‚˜๊ฐ€์ง€ ์•Š์Œ!)

 

Google Cloud Shell

gcloud auth list : ์‚ฌ์šฉ ์ค‘์ธ ๊ณ„์ • ์ด๋ฆ„ ๋ชฉ๋ก ํ‘œ์‹œ
-> student-04-78066893a060@qwiklabs.net

gcloud config list porject : ํ”„๋กœ์ ํŠธ ID ๋ชฉ๋ก ํ‘œ์‹œ
-> qwiklabs-gcp-01-e6818de75f2c

 

- Hello World

docker run [hello-world] : hello-world ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

-> ๋งŒ์•ฝ ์‹คํ–‰ ๊ฒฐ๊ณผ 'Hello from Docker'์ด ๋œจ์ง€ ์•Š์„ ๊ฒฝ์šฐ
     docker images : Docker Hub์—์„œ ๊ฐ€์ ธ์˜จ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ํ™•์ธ
     docker run [hello-world] : ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹คํ–‰

docker ps : ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ
docker ps -a : ์‹คํ–‰ ์™„๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ

 

- ๋นŒ๋“œ

mkdir test && cd test : test ํด๋” ์ƒ์„ฑ ํ›„ test ํด๋”๋กœ ์ „ํ™˜
Dockerfile ์ƒ์„ฑ * ๊ฐ ์ค„ ์ดํ•ด ํ•„์š”
๋…ธ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ (ํฌํŠธ 80์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๊ณ  'Hello World'๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ HTTP ์„œ๋ฒ„)

docker build -t node-app:0.1 . : ์ด๋ฏธ์ง€ ๋นŒ๋“œ
-> Dockerfile์ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•จ
docker images : ๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€ ํ™•์ธ

 

- ์‹คํ–‰

docker run -p 4000:80 --name my-app node-app:0.1 : ๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

curl http://localhost:4000 : ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ ๋ช…๋ น์–ด (๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„ ์ƒ์„ฑ)

docker stop my-app && docker rm my-app : ์ดˆ๊ธฐ ํ„ฐ๋ฏธ๋„ ๋‹ซ์€ ํ›„์— ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋ฐ ์‚ญ์ œ
docker run -p 4000:80 --name my-app -d node-app:0.1
docker ps

docker logs [container_id]

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ •

cd test : ํ…Œ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™
ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ ํŽธ์ง‘ : ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ app.js๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  'Hello World' ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ

docker build -t node-app:0.2 . : ์ƒˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์ƒ์„ฑ ํ›„ 0.2 ํƒœ๊ทธ ์ง€์ •
docker run -p 8080:80 --name my-app-2 -d node-app:0.2
docker ps

curl http://localhost:8080 : ์ปจํ…Œ์ด๋„ˆ ํ…Œ์ŠคํŠธ (์ดํ›„ ์ž‘์„ฑ)
curl http://localhost:4000 : ์ปจํ…Œ์ด๋„ˆ ํ…Œ์ŠคํŠธ (์ฒ˜์Œ ์ž‘์„ฑ)

docker logs -f [container_id] : ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ค‘์ผ ๋•Œ ๋กœ๊ทธ ์ถœ๋ ฅ(-f ์˜ต์…˜)
docker exec -it [container_id] bash : ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋Œ€ํ™”ํ˜• Bash ์„ธ์…˜ ์‹œ์ž‘(docker exec)
* ๋ช…๋ น์–ด ์ดํ•ด ํ•„์š”
ls : ๋””๋ ‰ํ„ฐ๋ฆฌ ํ™•์ธ
exit : Bash ์„ธ์…˜ ์ข…๋ฃŒ
docker inspect [container_id] : ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฒ€ํ† (docker inspect)
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [container_id]
: --format์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜๋œ JSON์˜ ํŠน์ • ํ•„๋“œ๋ฅผ ๊ฒ€์‚ฌ

 

> ๋Œ€์ƒ Docker ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

์ด๋ฏธ์ง€ ํ‘ธ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ ์ƒ์„ฑ ํ•„์š”

Artifact Registry

์ธ์ฆ ๊ตฌ์„ฑํ•˜๊ธฐ

gcloud auth configure-docker us-central1-docker.pkg.dev
: us-central1 ๋ฆฌ์ „์˜ Docker ์ €์žฅ์†Œ์— ์ธ์ฆ ์„ค์ • -> 'Y' ์ž…๋ ฅ(Docker ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ)
export PROJECT_ID=$(gcloud config get-value project)
cd ~/test
: ํ”„๋กœ์ ํŠธ ID ์„ค์ • ํ›„ Dockerfile์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณ€๊ฒฝ
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/my-repository/node-app:0.2 .
: node-app : 0.2์— ํƒœ๊ทธ ์ง€์ •
docker images
docker push us-central1-docker.pkg.dev/$PROJECT_ID/my-repository/node-app:0.2
: ์ด๋ฏธ์ง€๋ฅผ Artifact Registry๋กœ ํ‘ธ์‹œ

 

node-app ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ํ™”๋ฉด

์ด๋ฏธ์ง€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

docker stop $(docker ps -q)
docker rm $(docker ps -aq)
: ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋ฐ ์‚ญ์ œ 
๋ชจ๋“  Docker ์ด๋ฏธ์ง€ ์‚ญ์ œ

์ด๋ฏธ์ง€ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰

 


 

Docker ์†Œ๊ฐœ ์™„๋ฃŒ!