728x90
๋ฐ˜์‘ํ˜•

16์žฅ ์–ด๋””์„œ๋“  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋„์ปค ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ : ๋ฆฌ๋ˆ…์Šค, ์œˆ๋„, ์ธํ…”, ARM

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

16.1 ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 

  • AWS ๋Š” ARM ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ธํ…”์ด๋‚˜ AMD ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์— ๋น„ํ•ด ๋‹จ๊ฐ€๊ฐ€ ๊ฑฐ์˜ ์ ˆ๋ฐ˜์ด๋‹ค.
  • ARM ํ”„๋กœ์„ธ์„œ์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์€ ์ธํ…”๊ณผ AMD ํ”„๋กœ์„ธ์„œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” x64 ์ธ์ŠคํŠธ๋Ÿฌ์…˜๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋ฏธ์ง€ ์•„ํ‚คํ…์ฒ˜์™€ ์ปดํ“จํ„ฐ์˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ผ์น˜ํ•ด์•ผ๋งŒ ์ด๋ฏธ์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
# 64๋น„ํŠธ ARM ํ”„๋กœ์„ธ์„œ์šฉ ๋นŒ๋“œ
$ docker build -t diamol/ch16-whoami:linux-arm64 --platform linux/arm64 .

$ docker image inspect diamol/ch16-whoami:linux-arm64 -f '{{.Os}}/{{.Architecture}}'

linux/arm64

$ docker info -f '{{.OSType}}/{{.Architecture}}'

linux/aarch64

16.2 ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ Dockerfile ์Šคํฌ๋ฆฝํŠธ

๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

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

๋‹ค๋งŒ, ๋นŒ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์œ„์˜ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ด ๊ฒฝ์šฐ Dockerfile ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์•„ํ‚คํ…์ฒ˜๋‚˜ ์šด์˜์ฒด์ œ๋ณ„๋กœ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ Dockerfile ์˜ CMD ์ธ์ŠคํŠธ๋Ÿญ์…˜์—๋Š” ๋ชจ๋“  ์šด์˜์ฒด์ œ์—์„œ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

16.3 ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•˜๊ธฐ

  • ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์ค‘ ์•„ํ‚คํ…Œ์ฒ˜ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค๋ ค๋ฉฐ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์™€ ํ•จ๊ป˜ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฉ”๋‹ˆํŽ˜์ŠคํŠธ๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ข… ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋กœ ๋ฌถ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•œ๋‹ค.
  • ๋ฉ”๋‹ˆํŽ˜์ŠคํŠธ์—๋Š” ์ด๋ฏธ์ง€ ๋ณ€์ข… ๋ชฉ๋ก์ด ๋‹ด๊ธฐ๋Š”๋ฐ, ์ด๋ฏธ์ง€๊ฐ€ ๋จผ์ € ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.
  • ์ฆ‰, ๋ณ€์ข… ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ํ‘ธ์‹œํ•œ ๋‹ค์Œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ‘ธ์‹œํ•ด์•ผ ํ•œ๋‹ค.
$ docker image tag diamol/ch16-folder-list:linux-amd64 "$dockerId/ch16-folder-list:linux-amd64"

$ docker image tag diamol/ch16-folder-list:linux-arm64 "$dockerId/ch16-folder-list:linux-arm64"

$ docker image tag diamol/ch16-folder-list:linux-arm "$dockerId/ch16-folder-list:linux-arm"

$ docker image push "$dockerId/ch16-folder-list"

$ docker manifest inspect diamol/base

...
{
	"digest": ...,
	"arch": "amd64",
	"os": "linux"
}
{
	"digest": ...,
	"arch": "arm",
	"os": "linux"
}
{
	"digest": ...,
	"arch": "arm64",
	"os": "linux"
}
{
	"digest": ...,
	"arch": "amd64",
	"os": "windows"
}
  • ๋‹ค์ด์ œ์ŠคํŠธ๋Š” ์ด๋ฏธ์ง€์˜ ์œ ์ผ ์‹๋ณ„์ž๋กœ, ํ•ด๋‹น ๋ณ€์ข… ์ด๋ฏธ์ง€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ํ•ด์‹œ๊ฐ’์ด๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—๋Š” ๋Œ€์ƒ ์šด์˜์ฒด์ œ์™€ ์•„ํ‚คํ…์ฒ˜ ๋“ฑ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๋“ค์–ด ์žˆ๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.
  • ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ™์€ ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋กœ ๋ฌถ์ด๋Š” ์ด๋ฏธ์ง€๋“ค์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋ชจ์€๊ฒƒ์œผ๋กœ, ์ด๊ฒƒ๋˜ํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.
$ docker manifest create "$dockerId/ch16-folder-list" "$dockerId/ch16-folder-list:linux-amd64" "$dockerId/ch16-folder-list:linux-arm64" "$dockerId/ch16-folder-list:linux-arm"

$ docker manifest push "$dockerId/ch16-folder-list"

16.4 ๋„์ปค Buildx๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€ ๋นŒ๋“œํ•˜๊ธฐ

  • Buildx ๋Š” docker build ๋ช…๋ น์˜ ํ™•์žฅํŒ ๋Š๋‚Œ์ด๋‹ค.
  • ์ตœ์ ํ™”๋œ ๋นŒ๋“œ ์—”์ง„์ด ์ ์šฉ๋˜์–ด ๋นŒ๋“œ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋‹ค.
  • docker build ๋ช…๋ น์„ ๊ทธ๋Œ€๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ณ , ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜, ์•„์ง ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ๋Œ€์ฒดํ•  ์ˆœ ์—†๋‹ค.
  • ๋„์ปค ์ปจํ…์ŠคํŠธ์™€ ํ†ตํ•ฉ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„์—์„œ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Buildx ๋Š” ์•„์ง ์œˆ๋„์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹จ์ผ ํŒŒ์ผ๋กœ ๋œ Dockerfile ์Šคํฌ๋ฆฝํŠธ๋งŒ ์ง€์›ํ•œ๋‹ค

๋นŒ๋“œํŒœ ๊ตฌ์„ฑ

A. ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ.

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

B. Buildx ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ

  • Buildx ๋Š” ๋„์ปค ๋ช…๋ นํ–‰ ๋„๊ตฌ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‹ค.
  • Docker 18.09 ์ด์ƒ ๋ฒ„์ „์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋œ๋‹ค.
$ docker version

$ docker buildx version

$ docker run -rm -it docker/buildx:latest

$ docker-buildx install

$ docker buildx create --use --name ch16 --platform linux/amd64 node1

$ docker buildx create --append --name ch16 --platform linux/386 node2

$ docker buildx ls

C. Buildx ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€์ข… ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ

$ docker buildx build -t "$dockerId/ch16-folder-list-2" --platform linux/amd64,linux/386 --push .
  • Buildx ๋Š” ์—ฌ๋Ÿฌ ๋นŒ๋”์— Dockerfile ์Šคํฌ๋ฆฝํŠธ์™€ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‚˜๋ˆ  ์ฃผ๊ณ  ๋นŒ๋“œ๋ฅผ ์ง€์‹œํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ , ๊ฐ ๋นŒ๋”์˜ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋นŒ๋”์—์„œ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ํ‘ธ์‹œํ•œ๋‹ค.
  • ๋นŒ๋“œ ์„œ๋ฒ„๋งˆ๋‹ค ์›ํ•˜๋Š” ๋Œ€์ƒ ํ”Œ๋žซํผ์„ ์ง€์ •ํ•ด๋‘๋ฉด, ์ด๋“ค ๋ชจ๋‘์— ๋นŒ๋“œ๋ฅผ ์ง€์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

16.5 ๊ฐœ๋ฐœ ๋กœ๋“œ๋งต๊ณผ ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€

IoT ์žฅ์น˜๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ํ˜น์€ ํด๋ผ์šฐ๋“œ ์šด์˜๋น„๋ฅผ ์ค„์—ฌ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

Dockerfile ์Šคํฌ๋ฆฝํŠธ์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์‚ฌํ•ญ๋งŒ ๋ฏธ๋ฆฌ ์ ์šฉํ•ด ๋†“๋Š”๋‹ค๋ฉด, ํฐ ์–ด๋ ค์›€ ์—†์ด ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • FROM ์ธ์ŠคํŠธ๋Ÿญ์…˜์— ํ•ญ์ƒ ๋‹ค์ค‘ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋กœ ์ง€์ •ํ•œ๋‹ค.
  • RUN, CMD ์ธ์ŠคํŠธ๋Ÿญ์…˜์—๋Š” ํŠน์ • ์šด์˜์ฒด์ œ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
728x90
๋ฐ˜์‘ํ˜•
MyeongDev