Search
๐Ÿณ

Docker Architecture

Date
2024/12/05
Category
Devops
Tag
Docker
๋ชฉ์ฐจ

Docker Architecture

๋„์ปค๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋„์ปค ํด๋ผ์ด์–ธํŠธ(docker)๋Š” ๋„์ปค ๋ฐ๋ชฌ(daemon)๊ณผ ํ†ต์‹ ํ•˜๋ฉฐ, ๋„์ปค ๋ฐ๋ชฌ์€ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ, ์‹คํ–‰, ๋ฐฐํฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋„์ปค ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ๋ชฌ์€ ๋™์ผํ•œ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›๊ฒฉ ๋„์ปค ๋ฐ๋ชฌ์— ์—ฐ๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋„์ปค ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ๋ชฌ์€ REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UNIX ์†Œ์ผ“ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋Š” ๋„์ปค ์ปดํฌ์ฆˆ(Docker Compose)๋กœ, ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

Docker Daemon

๋„์ปค API ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ๊ณผ ๊ฐ™์€ ๋„์ปค ๊ฐ์ฒด(Docker Object)๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๋ฐ๋ชฌ์€ ๋‹ค๋ฅธ ๋ฐ๋ชฌ๊ณผ ํ†ต์‹ ํ•˜์—ฌ ๋„์ปค ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Docker Client

๋„์ปค ํด๋ผ์ด์–ธํŠธ(docker)๋Š” ๋งŽ์€ ๋„์ปค ์‚ฌ์šฉ์ž๋“ค์ด ๋„์ปค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ฃผ๋œ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ช…๋ น์–ด, API๋กœ Host์™€ ํ†ต์‹ ํ•œ๋‹ค. docker run๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ๋ช…๋ น์–ด๋ฅผ ๋ฐ๋ชฌ(dockerd)์— ์ „์†กํ•˜๊ณ , ๋ฐ๋ชฌ์€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ๋ชฌ๊ณผ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

Docker Registries

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์ด๋‹ค. ๋„์ปค ํ—ˆ๋ธŒ(Docker Hub)๋Š” ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ด๋ฉฐ, ๊ฐœ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ๋„์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค ํ—ˆ๋ธŒ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, docker pull ๋˜๋Š” docker run ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋„์ปค๋Š” ๊ตฌ์„ฑ๋œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. docker push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์„ฑ๋œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œํ•œ๋‹ค.

Docker Objects

๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Images
โ—ฆ
๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ
โ—ฆ
์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ์ด๋ฃจ์–ด์ง
โ—ฆ
์ž์‹ ๋งŒ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด Dockerfile ์ž‘์„ฑ ํ•„์š”
โ–ช
Dockerfile์˜ ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑ
โ–ช
Dockerfile์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ ๋ณ€๊ฒฝ๋œ ๋ ˆ์ด์–ด๋งŒ ๋‹ค์‹œ ๋นŒ๋“œ
โ€ข
Containers
โ—ฆ
์ด๋ฏธ์ง€์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค
โ—ฆ
Docker API ๋˜๋Š” CLI๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ, ์‹œ์ž‘, ์ค‘์ง€, ์ด๋™, ์‚ญ์ œ ๊ฐ€๋Šฅ
โ—ฆ
์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋ถ™์ผ(attach) ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๊ฐ€๋Šฅ