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 μΈμ€νΈλμ μλ νΉμ μ΄μ체μ μμλ§ μ¬μ©λλ λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ§ μλλ€.