Docker - gksrlfw/study GitHub Wiki

docker

๊ธฐ์ดˆ

Layer ๊ตฌ์กฐ

์ด๋ฏธ์ง€๋Š” layer ๋‹จ์œ„๋กœ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ง์€ ์–ด๋ ต์ง€๋งŒ ์‹ค์ œ๋กœ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ณผ์ •์„ ์‹ค์ œ๋กœ ํ•ด๋ด…์‹œ๋‹ค.

  1. ubuntu ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž„์˜์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
docker run -it --name ubuntu-test ubuntu /bin/bash
touch testfile
  1. ctrl + p, q ๋กœ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋น ์ ธ๋‚˜์˜จ ํ›„์— ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฏธ์ง€๋กœ commit ํ•ฉ๋‹ˆ๋‹ค.
docker commit ubuntu-test ubuntu-test:0.0.1

์œ„ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ubuntu:latest, ubuntu-test:0.0.1 ๋‘ ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋‘ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋Š” ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ubuntu-test:0.0.1 ๋Š” ubuntu:latest ์ด๋ฏธ์ง€์— ๋ณ€๊ฒฝ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ตฌ์กฐ๋งŒ์„ ์ €์žฅํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ถ™์ธ ๊ฒƒ์œผ๋กœ, ์‹ค์ œ๋กœ๋Š” testfile ๋งŒํผ์˜ ํฌ๊ธฐ๋งŒ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋งˆ๋””๋กœ ubuntu-test:0.0.1 ๋Š” ubuntu:latest ๋ฅผ ์˜์กดํ•˜๋ฉฐ, ๋‹จ์ˆœํžˆ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์ด ๋Š˜์–ด๋‚œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

tag ๋ž€

docker ์—์„œ tag ๋Š” ์ด๋ฏธ์ง€์— ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ๋งŒ๋“  ubuntu-test:0.0.1 ์— tag-test tag ํ•˜๋ฉด ubuntu-test:0.0.1 ์ด๋ฏธ์ง€๋Š” tag-test ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

docker hub ์˜ ๋ชจ๋“  ์ด๋ฏธ์ง€ ์ด๋ฆ„์€ ๊ณ ์œ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, tag ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ push ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Muti stage

๊ฐœ๋…

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๋นŒ๋“œ ๋“ฑ์—๋Š” ํ•„์š”ํ•˜์ง€๋งŒ ์ตœ์ข… ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์—๋Š” ํ•„์š” ์—†๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ด๋ฏธ์ง€์™€ ๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€๋ฅผ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ ๋ฐ ๋ฐฐํฌ์‹œ๊ฐ„์„ ์ค„์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋จผ์ € base ๊ฐ€ ๋˜๋Š” dockerfile ์„ ํ†ตํ•ด ์•ฑ์„ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„, runtime ์ด ๋˜๋Š” dockerfile ์—๋Š” base dockerfile ์„ ๋ฐ›์•„ ์‹คํ–‰ํ•˜์—ฌ dockerfillle ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ค„์ผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€

M1

์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅด๋‹ค M1 ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ linux/arm64/v8 ์•„ํ‚คํ…์ฒ˜์˜ ์ด๋ฏธ์ง€๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ชจ๋“  ์ด๋ฏธ์ง€๊ฐ€ arm64 ๋ฅผ ์ง€์›ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Rosseta 2 ๋Š” ์ธํ…”์นฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋žจ์„ M1 ์„ ํƒ‘์žฌํ•œ ๋งฅ OS ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ docker ์˜ --platform ์˜ต์…˜์œผ๋กœ linux/amd64 ๋กœ ๋นŒ๋“œ๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ M1 ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker built -t gksrlfw/test:0.0.1 --platform linux/amd64 .

๋˜๋Š” dockerfile ์˜ FROM ์—์„œ ๋ช…์‹œํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FROM --platform=linux/x86_64 mysql:8

๋˜๋Š” docker compose ์—์„œ platform ์„ ๋ช…์‹œํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

services:
  db-master:
    platform: linux/x86_64

[https://www.lainyzine.com/ko/article/how-to-install-docker-for-m1-apple-silicon/]