Docker.md
๋ฐฐ๊ฒฝ
์ผ๋ฐ์ ์ผ๋ก ์๋ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ณต์กํ๊ณ ์ด๋ ค์ด ์ ๋ฌด์ ์ํฉ๋๋ค. Ubuntu, Windows, MacOS ๋ฑ ๊ฐ๊ธฐ ๋ค๋ฅธ OSํ๊ฒฝ์ด ์๊ณ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒ์ ๋ฑ ํ๊ฒฝ์ ๋งค์ฐ ๋ค์ํฉ๋๋ค.
DevOps์ ๋ฑ์ฅ๊ณผ ํจ๊ป ๊ฐ๋ฐ์ฃผ๊ธฐ๊ฐ ์งง์์ง๋ฉฐ ๋ฐฐํฌ๋ ๋ ์์ฃผ ์ด๋ฃจ์ด์ง๊ณ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๊ฐ ์ ํํ๋ฉด์ ํ๋ก๊ทธ๋จ์ ๋ ์๊ฒ ์ชผ๊ฐ์ด์ ธ ๊ด๋ฆฌ๋ ๋ ๋ณต์กํด์ง๋๋ค. ๋ํ ํด๋ผ์ฐ๋์ ๋ฐ์ ์ผ๋ก ์ค์นํด์ผํ ์๋ฒ๊ฐ ์๋ฐฑ, ์์ฒ๋์ ์ด๋ฅด๋ ๋ณต์กํ ์ํฉ์ ์ฒํด์์ต๋๋ค.
์ด์ ๊ฐ์ด ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๊ฒฝ์์ ๋น ๋ฅด๊ณ ์ ์ํ๊ฒ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋๋ก ๋์จ๊ฒ์ด ๋ฐ๋ก '๋์ปค(Docker)'์ ๋๋ค.
Docker๋?
์ปจํ
์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ

์ปจํ ์ด๋๋ผ ํ๋ฉด ๋ฐฐ์ ์ฃ๋ ๋ค๋ชจ๋ ํ๋ฌผ ์์ก์ฉ ๋ฐ์ค๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค. ๊ฐ๊ฐ์ ์ปจํ ์ด๋ ์์๋ ๋ค์ํ ์ข ๋ฅ์ ํ๋ฌผ์ ๋ฃ์ ์ ์๊ณ ํธ๋ ์ผ๋ฌ ๋ฑ์ ๋ค์ํ ์ด์ก์๋จ์ผ๋ก ์ฝ๊ฒ ์ฎ๊ธธ ์ ์์ต๋๋ค.
๋์ปค์์ ์ด์ผ๊ธฐํ๋ ์ปจํ ์ด๋๋ ๋ค์ํ ํ๋ก๊ทธ๋จ, ์คํํ๊ฒฝ์ ์ปจํ ์ด๋๋ก ์ถ์ํํ๊ณ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋จ์ํ๊ฒ ํด์ค๋๋ค. ๋ฐฑ์๋ ํ๋ก๊ทธ๋จ, DB ์๋ฒ ๋ฑ ์ด๋ค ํ๋ก๊ทธ๋จ๋ ์ปจํ ์ด๋๋ก ์ถ์ํ ํ ์ ์๊ณ AWS, Azure, Google Cloud ๋ฑ ์ด๋์๋ ์คํํ ์ ์์ต๋๋ค.
Docker์ ํน์ง
์ปจํ
์ด๋
๊ฐ๋
๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ ๊ธฐ์
๊ธฐ์กด ๊ฐ์ํ ๋ฐฉ์๊ณผ์ ์ฐจ์ด์
๊ธฐ์กด ๋ฐฉ์ : OS ๊ฐ์ํ (์ ๊ฐ์ํ) ex) VMWare, VirtualBox ๋ฑ -> ์ฌ๋ฌ OS๋ฅผ ๊ฐ์ํํ ์ ์๊ณ ์ฌ์ฉ๋ฒ์ด ๊ฐ๋จํ์ง๋ง ๋ฌด๊ฒ๊ณ ๋๋ ค์ ์ด์ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. => ํ๋์จ์ด ๊ฐ์ํ ๋ฐฉ์
KVM๊ณผ ๋ฐ๊ฐ์ํ ๋ฐฉ์์ Xen : CPU์ ๊ฐ์ํ๊ธฐ์ (HVM) -> ๊ฒ์คํธ OS๊ฐ ํ์ํ์ง๋ง ์ ์ฒด OS๋ฅผ ๊ฐ์ํํ๋ ๋ฐฉ์์ด ์๋์๊ธฐ ๋๋ฌธ์ ์ ๊ฐ์ํ๋ฐฉ์์ ๋นํด ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค. => ์ํํธ์จ์ด๋ก ๊ตฌํ๋ ํ๋์จ์ด
์ ๊ฐ์ํ์ ๋ฐ๊ฐ์ํ ๋ชจ๋ ์ถ๊ฐ์ ์ธ OS๋ฅผ ์ค์นํ์ฌ ๊ฐ์ํํ๋ ๋ฐฉ์์ด์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ๋ฌธ์ ๊ฐ ์กด์ฌํ์ต๋๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋์จ๊ฒ์ด ๋ฐ๋ก ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ ํ๋๋ฐฉ์์ ๋๋ค.
๋ฆฌ๋ ์ค ์ปจํ ์ด๋
์ปจํ ์ด๋๋ฅผ ํตํด ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ์ํค๋ ๋ฐฉ์
๋จ์ํ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ๋์ํฉ๋๋ค.
CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋งํผ๋ง ์ถ๊ฐ๋ก ์ฌ์ฉํ๊ธฐ๋๋ฌธ์ ์ฑ๋ฅ์ ์ผ๋ก๋ ๊ฑฐ์ ์์ค์ด ์์ต๋๋ค.
ํ๋์ ์๋ฒ์ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๋ํ CPU๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ํ ํ ์ ์๊ณ ํน์ ํฌํธ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง

ํน์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ํ ํ๊ฒฝ
์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ๋ฑ์ ํฌํจํ๊ณ ์๋ ๊ฒ
๊ฒ์ธตํ๋ ํ์ผ ์์คํ
์ฆ, ์ปจํ ์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์์กด์ฑ ํ์ผ์ ์ปดํ์ผํ๊ณ ์ด๊ฒ์ ๊ฒ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค.
๋๊ตฌ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ Docker hub์ ๋ฑ๋กํ๊ฑฐ๋ Docker Registry๋ฅผ ์ง์ ๋ง๋ค์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ปจํ
์ด๋๊ฐ ํ์ํ ์ด์
์ปดํจํฐ์ ํ๊ฒฝ์ ๋ณดํธ์ ์ด์ง ์์ต๋๋ค.
์ปดํจํฐ๋ OS, ๋ฒ์ , ์์คํ ์ค์ , ์ค์น๋ ์ํํธ์จ์ด ๋ฑ ๋ค์ํ ํ๊ฒฝ์ด ์กด์ฌํฉ๋๋ค.
์ํ๊ด๋ฆฌ๋ฅผ ํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์์คํ ์ ๊ฐ์ ํ๊ฒฝ์ ์ ๊ณตํด์ผํ๋๋ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅ... ์์ฃผ ์ด๋ ต์ต๋๋ค.
ํ์ง๋ง Docker๋ ์ด๋ฏธ์ง๋ฅผ ํตํด ๊บ ๋ํ๊ณ ๋์ผํ ํ๊ฒฝ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์์ฝ๊ฒ ์ํ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ํ ์ด๋ฏธ์ง๋ ๋ง์ฝ ์ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ์คํ์ ์ฑ๊ณตํ๋ค๋ฉด ์ด๋ฏธ ์คํ์ด ๋ณด์ฅ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ฃผ ๊ฐ๋ ฅํ portable์ฑ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. => ์ฌํ์ฑ
Docker ์๋ฒ์ ํด๋ผ์ด์ธํธ
์ปจํ ์ด๋ = OS์ ๊ฐ์ํ๋ฅผ ๋์์ฃผ๋(macOS์ ๊ฒฝ์ฐ xhyve) ํ๋ก๊ทธ๋จ์์ ์คํ๋ ํ๋ก์ธ์ค
Docker Command
์ด๋ฏธ์ง ์คํ
docker run (<์ต์
>) [์ด๋ฏธ์ง ์๋ณ์] (<๋ช
๋ น์ด>) (<์ธ์>)
์ด๋ฏธ์ง๊ฐ ๋ค์ด๋ก๋ ๋์ด์์ง ์์ ๊ฒฝ์ฐ์๋ ํด๋น ์ด๋ฏธ์ง ์๋ ๋ค์ด๋ก๋
Options
-d : ์ปจํ ์ด๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
docker run -d exampleimage/exampleimage
-p [ํธ์คํธOS ํฌํธ]:[์ปจํ ์ด๋ ํฌํธ] : ํธ์คํธOS์ ์ปจํ ์ด๋ ๊ฐ์ ํฌํธ ๊ณต์ ๋ฅผ ์ํด ์ฌ์ฉ
docker run -p 8080:8080 exampleimage/exampleimage
-w : Dockerfile์ WORKDIR ์ค์ ์ ๋ฎ์ด์ฐ๊ธฐ ์ํด ์ฌ์ฉ
--rm : ์ปจํ ์ด๋๋ฅผ ์ผํ์ฑ์ผ๋ก ์คํํ ๋ ์ฃผ๋ก ์ฌ์ฉ
์ค์น๋ ์ด๋ฏธ์ง๋ค ํ์ธ
docker images
์คํ๋ ์ปจํ
์ด๋ ํ์ธ
docker ps
์ด๋ฏธ์ง ๋ณ๊ฒฝ์ฌํญ ํ์ธ
docker diff [Container ID]
๋ค์ด๋ก๋ ๋ฐ์ Base Image์์ ๋ฐ๋ ๋ชจ๋ ํ์ผ๋ค ์ถ๋ ฅ
์๋ก์ด ์ด๋ฏธ์ง ์์ฑ(์ปจํ
์ด๋๊ฐ ์กด์ฌํ ๋)
docker commit [Container ID] [new Image name]:[tag]
Dockerfile๋ก ์ด๋ฏธ์ง ์์ฑ
Dockerfile
์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ๊ธฐ์ ํ Docker ์ ์ฉ DSL
Dockerfile ๋ช ๋ น์ด
FROM [Base Image] : ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์
ADD [์ถ๊ฐํ ํ์ผ] [ํ์ผ์ด ์ถ๊ฐ๋ ๊ฒฝ๋ก] : ํ์ผ ์ถ๊ฐ (ํ์ฌ ๊ฒฝ๋ก ํ์์ ์๋ ํ์ผ๋ค๋ง ์ถ๊ฐ ๊ฐ๋ฅ)
RUN [๋ช
๋ น์ด] : ๋ช
๋ น์ด ์คํ
WORKDIR [๋๋ ํ ๋ฆฌ] : ์์
๋๋ ํ ๋ฆฌ ๋ณ๊ฒฝ
ENV [ํ๊ฒฝ๋ณ์๋ช
] [VALUE]: ํ๊ฒฝ๋ณ์ ๊ธฐ๋ณธ๊ฐ ์ง์
EXPOSE [ํฌํธ๋ฒํธ] : ์ปจํ
์ด๋ ์คํ ์ ๋
ธ์ถ์ํฌ ํฌํธ (expose๋ฅผ ์ง์ ํ๋๋ผ๋ docker run์์ -p ์ต์
์ผ๋ก ํธ์คํธ์ ํฌํธ์ ์ปจํ
์ด๋์ ํฌํธ๋ฅผ ์ง์ ํด์ผํจ)
CMD [๋ช
๋ น์ด] : ์ด๋ฏธ์ง์ ๊ธฐ๋ณธ ๋ช
๋ น์ด ์ค์
Dockerfile์ ์์ฑ๋ ์ด๋ฏธ์ง ๋น๋
docker build -t [ID]/[new image name]:[tag] .
. : ํด๋น ๊ฒฝ๋ก ํ์ ํ์ผ๋ค์ ๋ชจ๋ ์ด๋ฏธ์ง๋ก ์์ฑ
์ด๋ฏธ์ง ์ด๋ฆ ๋ณ๊ฒฝ
docekr tag [image name] [new image name]
์ด๋ฏธ์ง ์ญ์
docker rmi [image name]
Docker registry์์ ์ด๋ฏธ์ง ๋ฐ์์ค๊ธฐ
docker pull [image name]
Dockerfile
COPY vs ADD
๋ ๋ช ๋ น์ด ๋ชจ๋ ๋ก์ปฌํ๊ฒฝ์ ์๋ ํ์ผ์ ์ปจํ ์ด๋์ ์ถ๊ฐํ๋ ๋ช ๋ น์ด์ด๋ค. ADD๊ฐ ๋จผ์ ๋ง๋ค์ด์ง ๋ช ๋ น์ด์ธ๋ฐ ๊ทธ ์ด์ ๋ ์ด๋ฆ์์ ์ ์ถํ ์ ์๋ค. COPY๋ ๋ก์ปฌ์ ํ์ผ์ ์ปจํ ์ด๋์ ๋จ์ ๋ณต์ฌํ๋ ๋ช ๋ น์ด์ด๊ณ ADD๋ COPY์ ๊ฐ์ด ๋ณต์ฌํ๋ ๊ธฐ๋ฅ๋ ์์ง๋ง ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก [source]์ url์ ์ ๋ ฅํ๋ฉด ๋ค์ด๋ก๋ํ์ฌ ์ปจํ ์ด๋์ ์ถ๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํน์ ํฌ๋งท์ ์์ถํ์ผ์ด [source]์ธ ๊ฒฝ์ฐ์๋ ์์ถ์ ํด์ ํ๊ฒ ๋๋๋ฐ, ์ด๋ ๋จ์ํ๊ฒ ์์ถํ์ผ์ ๋๊ธฐ๊ณ ์ถ์ ๋ ๋ฌธ์ ๊ฐ ๋์ด ๋จ์ ๋ณต์ฌ๋ง ํ๋ COPY ๋ช ๋ น์ด๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
Last updated