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 ์ธ์คํธ๋ญ์ ์๋ ํน์ ์ด์์ฒด์ ์์๋ง ์ฌ์ฉ๋๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
'๐ ์ฑ > ๋์ปค ๊ต๊ณผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
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 ์ธ์คํธ๋ญ์ ์๋ ํน์ ์ด์์ฒด์ ์์๋ง ์ฌ์ฉ๋๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.