Getting Started with Docker
Last updated
Last updated
Docker ์ ๋ณตํ๋ค!!!!!!!
References: [์ฑ ] ํธ๋ฌ๋ธ ์ํ ๋์ปค
Docker๋ ์์ฒญ๋ ๊ด์ฌ์ ๋ฐ๊ณ ์๋ Open source project
Application์ ๊ฒฝ๋ ์ปจํ
์ด๋
๋ก packaging ํด์ ๋ฐฐํฌ ํ๊ณ ๊ตฌ๋ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค
Docker Container๋ ์ค์ ํ๋ฌผ ์ ๋ฐ์์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋์ฒ๋ผ application์ ์ผ๊ด์ฑ ์๊ฒ ํ์คํ๋ ํํ๋ก ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค!
Container๋ application์์ ์บก์ํํด ๋ ๋ฆฝ์ ์ธ ์ด์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๊ธฐ์
Virtual Machine์ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค!
Container๋ Linux Kernel์ ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ์ ๋ํ User Space Interface ์ธ Linux Container๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ ๊ฒ!
์ฌ๊ธฐ์ ๊ฐ๋ ฅํ API์ ๊ฐ๊ฒฐํ ๋๊ตฌ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ Linux ์ฌ์ฉ์๊ฐ application์ container๋ก ๋ง๋ค์ด ๊ด๋ฆฌ ํ ์ ์๋ค
Container๋ Host machine์์ ๊ตฌ๋ํ๋ OS๋ค์ด Linux kernel์ ์๋ก ๊ณต์ ํ๋ค๋ ์ ์์ ๊ธฐ์กด Hypervisor
์ ๋ค๋ฅด๋ค!
Hypervisor ๋?
Virtual Machine์ ์์ฑํ๊ณ ๊ตฌ๋ํ๋ ์ํํธ์จ์ด
์ฆ, ๋ค์ ๋งํด ๊ฐ์ ๋จธ์ ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๊ตฌ๋ํด๋ ์ฌ์ฉํ๋ Kernel์ ๋ชจ๋ ๊ฐ๋ค
๊ทธ๋์ VM๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๊ณ , ์ฑ๋ฅ ์ค๋ฒํค๋๋ ๊ฑฐ์ ์๋ค!
OS Container๋ VM๊ณผ ๋น์ทํ๋ค
but, Host Machine OS์ Kernel์ ๊ณต์ ํ๋ฉด์ ์ ์ ์คํ์ด์ค ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค
VM๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Container์ ์ ์ฉ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ ์ ์๊ณ , application๊ณผ library ๋ฑ์ ์ค์น, ์ค์ ๋ฐ ๊ตฌ๋ ํ ์ ์๋ค
OS Container๋ ํ์ฅ์ฑ ํ ์คํธ๋ฅผ ํ ๋ ์ ์ฉํ๋ค!
๋ค์ํ ๋ฐฐํฌํ์ผ๋ก ๊ตฌ์ฑ๋ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์๋๋ฐ VM๋ณด๋ค ํจ์ฌ ๊ฐ๋ณ๋ค
Container๋ ๊ตฌ์กฐ์ ๋ด์ฉ๋ฌผ์ ์ ์ํ ์ด๋ฏธ์ง๋ ํ ํ๋ฆฟ์ ํตํด ์์ฑํ๋ค
๊ทธ๋์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ ๋ ๋ค๋ฅธ Container์ ๋์ผํ ์คํ ํ๊ฒฝ๊ณผ ๋ฒ์ , ํจํค์ง ํ๊ฒฝ์ ๊ฐ์ถ๋๋ก ๊ตฌ์ฑํ๊ธฐ๊ฐ ์ฝ๋ค!
ํ์ฌ ๋ค์ํ ์ปจํ
์ด๋ ๊ธฐ์ ์ด ๋์ ์๋๋ฐ, ๊ทธ ์ค OS Container๋ก ์ ํฉํ ๊ฒ์ LXC
, OpenVZ
, Docker
, BSD Jain
๋ฑ์ด ์๋ค
OS Container๋ ์ฌ๋ฌ ๊ฐ์ process ๋ก ๊ตฌ์ฑํ๋ค๋ฉด, Application Container๋ ํ๋์ ์๋น์ค๋ฅผ package๋ก ๋ง๋ค์ด์ ๊ตฌ๋ํ๋ค
Appllication container๋ ํ๋์ process๋ง ๊ตฌ๋ํ๋ค
์ด ๋ ๊ตฌ๋๋๋ process๋ aaplication process๋ก์ OS Container ๊ฐ ํ๋์ OS ์์ ์ฌ๋ฌ ๊ฐ์ ์๋น์ค๋ฅผ ๊ตฌ๋ํ๋ ๋ฐฉ์๊ณผ ๋์กฐ์ ์ด๋ค!
Docker container๋ ๊ณ์ธต (layer) ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ฅผ ํตํด ์ค๋ณต์ ์ต์ํํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค
์ฆ, ๋ชจ๋ ๊ตฌ์ฑ ์์์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ base image
์ ๋ํ container๋ฅผ ๋จผ์ ๊ตฌ๋ํ๊ณ ,
๊ทธ ์์ ์ํ๋ ์์๋ฅผ ํ์ผ ์์คํ ์ ๋ณ๋์ layer๋ก ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ค
Layer ๊ธฐ๋ฐ ํ์ผ ์์คํ ์ ์ฌ์ฉํ๋ฉด ์ํ๋ ์์ ์ ์ธ์ ๋ ์ง ์์ ๋ ์ด์ด๋ก ์ฝ๊ฒ ๋๋์๊ฐ ์ ์๋ค!
Dockerfile์ ๋ช
์๋ RUN
๋ช
๋ น์ด ์คํ๋ ๋๋ง๋ค container์ layer๊ฐ ์๋ก ์์ฑ๋๋ค
Application Container์ ์ฃผ ๋ชฉ์ ์ผ๋ก๋ application์ ๊ตฌ์ฑํ๋ ๋ค์ํ ์ปดํฌ๋ํธ๋ค์ ๋ณ๋์ ์ปจํ ์ด๋ ํํ์ ํจํค์ง๋ก ๋ง๋๋ ๋ฐ ์๋ค
์ด๋ ๊ฒ container ๋จ์๋ก ๋ฌถ์ธ application์ ๊ตฌ์ฑ ์์๋ค์ API๋ ์๋น์ค๋ฅผ ํตํด ์ํธ์์ฉํ๋ ๋ฐฉ์์ผ๋ก application์ ๊ตฌ๋ํ๋ค
์ด๋ฌํ ๋ถ์ฐ ๋ฉํฐ ์ปดํฌ๋ํธ ์์คํ
ํํ์ ๋ฐฐํฌ ๋ฐฉ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ
๊ตฌํ์ ํต์ฌ์ด๋ค!
์ด๋ ๊ฒ ํ๋ฉด
๊ฐ๋ฐ์๋ ์์ ์ด ์ํ๋ ํํ๋ก application์ container ํํ์ package๋ก ๋ง๋ค๊ณ ,
์ด๋ฅผ ์ํ์ ์ผ๋ก๋ ์์ง์ ์ผ๋ก ํ์ฅํ๊ธฐ ์ํด ๋ค์ํ platform์ container๋ฅผ ๋ฐฐํฌํ๋ ์์ ์ ITํ์ด ์ ๋ดํ๊ฒ ํ ์ ์๋ค
OS Container | Application Container |
---|---|
ํ๋์ OS Container์ ์ฌ๋ฌ ์๋น์ค๋ฅผ ๊ตฌ๋ | ํ๋์ Container์ ํ๋์ ์๋น์ค๋ฅผ ๊ตฌ๋ |
๋ ์ด์ด๋ ํ์ผ ์์คํ ์ ์ฌ์ฉํ์ง ์์ | ๋ ์ด์ด๋ ํ์ผ ์์คํ ๊ธฐ๋ฐ |
ex) LXC, OpenVZ, BSD ์ฌ์ผ | ex) Docker, ๋ก์ผ |
๋์ปค๋ ๋ค์ํ Linux Kernel ๊ธฐ๋ฅ์ ํ์ผ์์คํ ๊ณผ ์ฎ์ด์ image๋ฅผ module ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ค
๊ตฌ์ฑํ image๋ฅผ ํตํด
application ๊ฐ์ ํ๊ฒฝ์ ๋ง์๊ป ์ค์ ํ ์ ์์ผ๋ฉฐ,
WORA (Write-Once-Run-Anywhere) ์์น์ ์คํํ ์ ์๋ค
Application์ ํ๋์ process ๋ฅผ ๊ตฌ๋ํ๋ ์์ค์ผ๋ก ๊ฐ๋ตํ๊ฒ ๋ง๋ค ์ ์์ผ๋ฏ๋ก
์ฌ๋ฌ process๊ฐ ํ์ ํ๋ ๋ถ์ฐ ์์คํ ์ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ,
๋์ ํ์ฅ์ฑ๋ ์ง์ํ ์ ์๋ค
๋์ปค๋ application ๊ฐ๋ฐ์ ์์ด์ ์ค์ํ ๋ค ๊ฐ์ง ํน์ง์ ์ ๊ณตํ๋ค
์์จ์ฑ (autonomy)
๋ถ์ฐํ (decentralization)
๋ณ๋ ฌ์ฑ (parallelism)
๊ฒฉ๋ฆฌ์ฑ (isolation)
๋์ปค ์ปจํ ์ด๋๋ ๊ฐ๋ฐ ๋จธ์ ์ด๋ ๋ฒ ์ด๋ฉํ ์๋ฒ, ๊ฐ์ ๋จธ์ , ๋ฐ์ดํฐ์ผํฐ ๋ฑ ์ด๋์๋ ์์ ๊ณผ ๋๊ฐ์ ๋์์ ์ฌํํ ์ ์๋ค
Application ์ค๊ณ์์ ์ ์ฅ์์ ์ด์์ ๊ดํ ์ฌํญ์ ๋ชจ๋ DevOpsํ์ ๋งก๊ธฐ๊ณ , ์จ์ ํ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋ค..!
์ด๋ก ์ธํด ํ์ workflow๋ฅผ ๋ชจ๋ํ ํ ์ ์์ด์ ์์ฐ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค
Docker๋ OS๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ์์ผ๋ก Container์์ ๊ตฌ๋ํ๋ application ์์ค์ ๊ฒฉ๋ฆฌ์ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค
์ด์ฒ๋ผ OS ๊ณ์ธต์ ์๋ฒฝํ ์ถ์ํํด ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ์ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํจ์๋ ๋ถ๊ตฌํ๊ณ Docker์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ VM์ ๋นํด ์๋นํ ์ ์ด์ ์ฑ๋ฅ๊ณผ ํจ์จ์ด ๋ฐ์ด๋๋ค!
Microservice Architecture์์ Docker Container๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค
๋น ๋ฅธ application ๋ฐฐํฌ
Container๋ application์ ๊ด๋ จ๋ ๋ถ๋ถ๋ง ๋ด๊ณ ์์ด์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ต์ํ์ ๋ฐํ์์ผ๋ก ๋น ๋ฅด๊ฒ ๋ฐฐํฌ ํ ์ ์๋ค
์ด์์ฑ
Application
๊ณผ ์ด์ ํ๊ฒฝ
(application์์ ์ฌ์ฉํ๋ library๋ฅผ ๋น๋กฏํ dependency ์ ๋ณด) ์ ํ๋์ Docker Container๋ก ๋ฌถ์ ์ ์๋๋ฐ, ์ด๋ ๊ฒ ๊ตฌ์ฑํ container๋ OS ๋ฒ์ ์ด๋ ๋ฐฐํฌ ๋ชจ๋ธ๊ณผ ๋
๋ฆฝ์ ์ด๋ค
Docker Container๋ ํธํ์ฑ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๋ docker๋ฅผ ์ด์ํ ์ ์๋ ๋จธ์ ์ ์ ์กํด ๊ณง๋ฐ๋ก ์คํํ ์ ์๋ฐ
์ฌ์ด ๊ณต์
๋ฏธ๋ฆฌ ์ ์๋ container image๋ ๊ณต์ฉ repo๋ ๋ด๋ถ ์ ์ฉ ์ฌ์ค repo์ ์ฌ๋ ค๋๊ณ ์ฝ๊ฒ ๊ณต์ ํ ์ ์๋ค
์ ์ ์์ ์ฌ์ฉ๋
Docker image๋ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉฐ ์๋ก์ดapplication์ ๋ฐฐํฌํ ๋ ๋ค๋ฅธ container๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ ์ฌ์ฉ๋๋ ์ ๋ค
์ฌ์ฌ์ฉ์ฑ
Docker container์ ๋ฒ์ ์ ์ง์์ ์ผ๋ก ์ด์ด๋๊ฐ๊ธฐ ์ฌ์ธ ๋ฟ๋ง ์๋๋ผ ์ํ ๋ ์ธ์ ๋ ์ง ์ด์ ๋ฒ์ ์ผ๋ก ๋๋์๊ฐ๊ธฐ๋ ์ฝ๋ค
๊ธฐ์กด์ ์ฌ์ฉํ๋ layer์ ๋ด๊ธด component๋ค์ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ฒญ๋ ๊ฒฝ๋ํ๊ฐ ๊ฐ๋ฅํ๋ค
Container๋ฅผ package๋ก ๋ง๋๋ ๋ฐ ํ์ํ ๋ชจ๋ ๋ช
๋ น์ Dockerfile
์ ์์ฑํ๊ณ , ์ด๋ฅผ ์ด์ฉํด Docker image๋ฅผ build ํ๋ค
Image์ tag๋ฅผ ๋ฌ๋ ค๋ฉด -t option์ ์ค๋ค
Dockerfile
์ด ํ์ฌ directory๊ฐ ์๋ ๋ค๋ฅธ ๊ฒฝ๋ก์ ์กด์ฌํ ๋๋ -f option์ผ๋ก Dockerfile์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ค
Image๋ฅผ ์์ฑํ ํ์ Container๋ฅผ ๋ฐฐ์นํ ๋๋ docker run ๋ช ๋ น์ ์คํํ๋ค
๊ตฌ๋ํ container์ ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด docker ps ๋ช ๋ น์ ์คํํ๋ค.
์ด ๋ช ๋ น์ ์คํํ๋ฉด ํ์ฌ active ์ํ์ ์๋ container ๋ชฉ๋ก์ด ๋ํ๋๋ค
๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ์ผ์์ ์ง ํ ๋๋ docker pauge ๋ช ๋ น์ ์คํํ๋ค
์ด ๋ช
๋ น์ cgroups freezer
๋ฅผ ์ด์ฉํด ํ์ฌ container์์ ๊ตฌ๋ ์ค์ธ ๋ชจ๋ process๋ฅผ ์ผ์ ์ ์งํ๋ค
๋ด๋ถ์ ์ผ๋ก SIGSTOP signal์ ๋ณด๋ธ๋ค
์ด ๋ช ๋ น์ ์ด์ฉํ๋ฉด ์ธ์ ๋ ์ง process๋ฅผ ์ผ์์ ์ง ํ๋ฐ๊ฐ resume ํ ์ ์๋ค
ํ ๊ฐ ์ด์์ stop ์ํ์ ์๋ container๋ฅผ ์คํ ์ํฌ๋๋ docker start ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค
Docker๋ฅผ ๋ค ์ฌ์ฉํ๋ค๋ฉด ๋ฉ์ถ๊ฑฐ๋(Stop) ์ข ๋ฃ(Kill)ํ๋ค
docker stop ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ํ์ฌ ๊ตฌ๋์ค์ธ container์ SIGTERM signal์ ๋ณด๋ธ ํ SIGKILL signal์ ๋ณด๋ด์ ์์ฐ~์ค๋ฝ๊ฒ ๋ฉ์ถ๊ฒ ํ๋ค
์ด ๋ช ๋ น์ผ๋ก ๋ฉ์ถ ํ์๋ docker ps -a ๋ช ๋ น์ ์คํํ๋ฉด ๋ชฉ๋ก์ container๊ฐ ๋ํ๋๋ค
docker kill ๋ช ๋ น์ ์คํํ๋ฉด ํ์ฌ ๊ตฌ๋์ค์ธ container์ main process์ SIGKILL signal์ ๋ณด๋ธ๋ค
Container๋ฅผ ์คํ ์ฃผ์ฅ ๋ณ๊ฒฝํ ์ฌํญ์ ์ ์ฅํ๋ ค๋ฉด ๋จผ์ container๋ฅผ ๋ฉ์ถ (Stop) ํ์ docker commit ๋ช ๋ น์ ์คํํ๋ค
์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด Image์ ๋ฐ์๋๋ค!
+
์ ๋์ปค๋์ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๋จ์ผ ์ฃผ์ ๊ณต๊ฐ machine image๋ฅผ ์์ฑํ๋๋ก application logic ์ ํ์ํ ๊ธฐ๋ฅ๋ง ํฌํจํ๋๋ก Custom OS ๋ก compile ํ ๊ฒ
์ ๋์ปค๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ OS ๋ฅผ ์ด์ฉํด build ํ๋ค
๋น ๋ฅธ ๋ถํ ์๊ฐ
์ ๋์ปค๋์ provisioning ์์ ์ ๋งค์ฐ ๋์ ์ธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ ๋ถํ ์๊ฐ๋ 1์ด ์ด๋ด๋ค
์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
์ ๋์ปค๋์ ์ฝ๋๋ฒ ์ด์ค๋ ๊ธฐ์กด OS์ ๋นํด ์์ผ๋ฉฐ ๊ด๋ฆฌํ๊ธฐ๋ ์ฝ๋ค
ํฅ์๋ ๋ณด์
๋ถํ์ํ ์ฝ๋๊ฐ ๋ด๊ฒจ ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ณต๊ฒฉ์ ๋ ธ์ถ๋ ๊ฐ๋ฅ์ฑ์ ํฌ๊ฒ ์ค์ผ ์ ์๋ค
์ธ๋ฐํ ์ต์ ํ
์ ๋์ปค๋์ compile tool chain์ ํตํด ์์ฑ๋๋ฉฐ, device driver์ application logic์ ์ต์ ํ๋๋ค
์ ๋์ปค๋์ source code์ ๊ทธ๋ก๋ถํฐ ์์ฑ๋ binary์ ๋ํ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค
๋ค์ ๋น๋ํ๋ ๊ณผ์ ๋ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ Microservice architecture์ ์ ์ด์ธ๋ฆฐ๋ค
์ ๋์ปค๋ ํ์ฉ ์
ex) ๋์คํฌ ์ ๊ทผ๊ณผ ํ๋ฉด ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ application์ ์ ์ํ ๋, ํด๋น ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ์ ํ๋ฉด ์ถ๋ ฅ ๊ธฐ๋ฅ์ kernel์์ ์ ๊ฑฐํด ์ ๋์ปค๋๋ก ๋ง๋ค ์ ์๋ค
Application
๊ณผ runtime ํ๊ฒฝ
, OS ๊ธฐ๋ฅ
๋ง ๋ด์์ ์ค์ ์ ๋ฐฐ์นํ ์์คํ
์ ์ต์ํ์ผ๋ก ๋ง๋ค ์ ์๋ค
์ด๋ ์ค์ ์ ๋ฐฐ์นํ ์๋ฒ์์ application์ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ ๋ ์๋ก์ด Image๋ฅผ ์์ฑํ๋ ๋ถ๋ณํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ (immutable application deployment) ๋ฐฉ์์ ํต์ฌ ๊ฐ๋ ์ด๋ค
์ปจํ ์ด๋์ ์ ๋์ปค๋์ ์๋ก ๊ถํฉ์ด ์ ๋ง๋๋ค
์ ๋์ปค๋์ด๋ผ๋ ๋ ๋ค๋ฅธ ์ถ์ํ ๊ณ์ธต์ ๋์ ํ๋ฉด, docker ๊ฐ๋ฐ์๋ ๊ธฐ์กด ๋ฐฉ์์ผ๋ก docker container๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ , ์ค์ ํ๊ฒฝ์ ์ํ ์ ๋์ปค๋ container ๋ฐฉ์์ผ๋ก ํ์ฉํ ์๋ ์๋ค