๐ ํด๋น ํฌ์คํ ์ ์์ํ์ธ์! ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค ์์ ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์ ๋๋ค. ํฌ์คํ ์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ ๋ฒ ํฌ์คํ ๊น์ง๋ ๋์ปค ์์ง์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ์ปจํ ์ด๋, ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ, ๋ ๋์๊ฐ Dockerfile์ ๊ฐ์ง๊ณ ๋๋ง์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ํ์ตํ๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ๋์ปค ์์ฒด๋ฅผ ๋ค๋ค๋ณผ ์ ์๋ ๋์ปค ๋ฐ๋ชฌ์ ๋ํด์ ์์๋ณด์. ๋์ปค ๋ฐ๋ชฌ์ ๋ํด ์ดํดํ๊ณ ๋์ปค ์์ฒด์ ์ผ๋ก ์ค์ ํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ์ต์ ์ ํ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ์ปจํ ์ด๋๋ฅผ ์ข ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค. ๋์ปค ๋ฐ๋ชฌ์ ๋ํด์ ์์๋ณด๊ธฐ ์ ์ ๋์ปค๊ฐ ์ด๋ค ๊ตฌ์ฑ์์๋ก ์ด๋ฃจ์ด์ ธ ์๋์ง๋ถํฐ ์ดํดํด์ผ ํ๋ค.
1. ๋์ปค์ ๊ตฌ์กฐ
์ด์ ๋ถํฐ '๋์ปค ์์ง = ๋์ปค'๋ผ๊ณ ๊ฐ๋ตํ ๋ถ๋ฅด๋๋ก ํ์. ๋์ปค๋ 2๊ฐ์ง์ ์์๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ํ ๊ฐ์ง๋ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ํ๋ ๋์ปค ํด๋ผ์ด์ธํธ, ์๋ฒ์ ์ญํ ์ ํ๋ ๋์ปค ๋ฐ๋ชฌ์ด ์๋ค. ์๋ ๋์ปค๊ฐ ๋ฌด์จ ์น์๋ฒ๋ ์๋๊ณ , ์ด๋ป๊ฒ ๋์ปค ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋๋์ด์ ธ ์๋ ๊ฑธ๊น?
์ผ๋จ, ์ฐ๋ฆฌ๋ ๋์ปค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ํฐ๋ฏธ๋์์ docker ๋ผ๋ ์ ๋์ด๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ปจํ ์ด๋, ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ๋ค์ ๋งํด, ๋์ปค๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ธ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ก ์ด docker ๋ผ๋ ์ ๋์ด์ ๋ช ๋ น์ด๊ฐ ๋๊ณ , ์ด ๋ช ๋ น์ด๊ฐ ์์ฑ๋์ด ์๋ ํ์ผ์ docker ๋ผ๋ ์ด๋ฆ์ ํ์ผ์ด๋ค. ์ค์ ๋ก docker ๋ช ๋ น์ด ํ์ผ์ด ์ด๋์๋์ง ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
$ which docker
๊ทธ๋ฌ๋ฉด ์๋ง MacOS์ ๊ฒฝ์ฐ /usr/local/bin/docker ์ด๊ฑฐ๋ ๋ฆฌ๋ ์ค ๊ณ์ด์ OS์ผ ๊ฒฝ์ฐ, /bin/docker ๊ฐ ํ์ค์ถ๋ ฅ์ผ๋ก ๋์ฌ ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ ์ด docker ๋ช ๋ น์ด ํ์ผ์ด ๋ฐ๋ก ๋์ปค๋ฅผ ๊ตฌ์ฑํ๋ ์์ ์ค ํ๋์ธ ๋์ปค ํด๋ผ์ด์ธํธ๊ฐ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ์๋ฒ์ ์ญํ ์ ํ๋ ๋์ปค ๋ฐ๋ชฌ์ ๋ํด ์์๋ณด์. ์ฐ์ , ์๋์ ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ ์ค์ธ ๋์ปค ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ps ๋ช ๋ น์ด๋ก ์ถ๋ ฅ์์ผ๋ณด์.(ps ๋ช ๋ น์ด์ ๋ํด ์ ๋ชจ๋ฅธ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ )
$ ps aux | grep -E "docker"
์ ๊ฒฐ๊ณผํ๋ฉด์ ๋ณด๋ฉด docker๋ฅผ ์คํํ๋ ํ๋ก์ธ์ค๋ ๋ฐ๋ก /usr/bin ์ด๋ผ๋ ๋๋ ํ ๋ฆฌ์ dockerd ๋ผ๋ ํ์ผ์ด ์คํํ๊ณ ์์์ ์ ์๊ฐ ์๋ค. ์ฆ, ์ด dockerd ํ์ผ์ด ๋ฐ๋ก ์๋ฒ์ ์ญํ ์ ํ๋ ๋์ปค ๋ฐ๋ชฌ์ด ๋๋ค. ์กฐ๊ธ ๋ ์์ธํ๊ฒ, ๋์ปค๋ ์ธ๋ถ์์ API ์ ๋ ฅ์ ๋ฐ์ ๋์ปค์ ๊ธฐ๋ฅ์ ์ํํ๋๋ฐ, ์ด ๋ ์ธ๋ถ๋ก๋ถํฐ API ์ ๋ ฅ์ ๋ฐ์ผ๋ฉด ๋์ปค ํ๋ก์ธ์ค(dockerd ํ์ผ์ด ์คํ)๊ฐ ์คํ๋์ด ์๋ฒ๋ก์ ์ ๋ ฅ์ ๋ฐ์ ์ค๋น๊ฐ ๋ ์ํ๊ฐ ๋๋ค. ์ด '์ํ'๋ฅผ ๋ฐ๋ก ๋์ปค ๋ฐ๋ชฌ์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ฏค๋๋ฉด ๋์น ์ฑ ์๋ ์๊ฒ ์ง๋ง ๋์ปค ๋ฐ๋ชฌ์ ์ค๋ช ํ๋ฉด์ ์ธ๊ธํ '์ธ๋ถ๋ก๋ถํฐ์ API ์ ๋ ฅ'์ด ๋ฐ๋ก ๋์ปค ํด๋ผ์ด์ธํธ๊ฐ ๋๋ค. ์ด ๋, ๋์ปค ํด๋ผ์ด์ธํธ๋ API๋ฅผ '์ฌ๋์ด ์ฌ์ฉํ ์ ์๋๋ก' CLI(Command Line Interface) ํํ๋ก ์ ๊ณตํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ CLI ๋ช ๋ น์ด๊ฐ 'docker' ๋ผ๋ ์ ๋์ด๋ก ์์ํ๋ ๋ช ๋ น์ด์ด๋ค. ๊ฒฐ๊ตญ, ๋์ปค์ ๊ตฌ์ฑ์์๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋์ํํ๋ฉด ์๋์ ๊ฐ๋ค.
์ ๊ทธ๋ฆผ์์ /var/run/docker.sock ์ด๋ผ๋ ์ ๋์ค ์์ผ์ด ๋ญ์ง ๊ถ๊ธํ ์ ์๋ค. ์์ธํ ๊ฑด ์๋์์ ์์๋ณธ๋ค. ์ด ์์ผ์ ๋์ปค ํด๋ผ์ด์ธํธ๊ฐ ๋์ปค ๋ฐ๋ชฌ์ API๋ฅผ ํธ์ถํ๊ธฐ ์ํ ํต์ ์๋จ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ ๊ทธ๋ฆผ์ ์์ ๊ณผ์ ์ ๋์ปค์ ์๋ฌด๋ฐ ์ต์ ์ค์ ์ ํ์ง ์์์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋์ปค ํด๋ผ์ด์ธํธ๊ฐ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ๋ ์์์ด๋ค. ๋ง์ฝ ๋์ปค ๋ฐ๋ชฌ์ ์ฌ๋ฌ๊ฐ์ง ์ต์ ์ ์ถ๊ฐํ๋ฉด ์ ๊ทธ๋ฆผ์์ ๋ ๋ค๋ฅธ ์์๊ฐ ์ค๊ฐ์ ์ถ๊ฐ๋ก ํฌํจ๋ ์ ์๋ค.
2. ๋์ปค ๋ฐ๋ชฌ ์คํ
๊ทธ๋ฌ๋ฉด ์ด์ ์์์ ๊ฐ๋ ์ ์ผ๋ก ๋ฐฐ์ด ๋์ปค ๋ฐ๋ชฌ์ ์ง์ ์คํ์์ผ๋ณด๋๋ก ํ์. ์ฐ์ ๋์ปค ๋ฐ๋ชฌ์ ์๋์ ๊ฐ์ด service ๋ช ๋ น์ด๋ฅผ ํ์ฉํด ์ฆ, ๋์ปค ์๋น์ค๋ฅผ ํ์ฉํด์ ์์ ๋๋ ์ ์ง์ํฌ ์ ์๋ค. ์ฌ๊ธฐ์ ๋์ปค ๋ฐ๋ชฌ์ ์์ํ๋ค๋ผ๋ ๊ฒ์ ๊ณง ์๋ฒ๋ก์์ ๋์ปค๋ฅผ ๋์ด๋ค๋ ์ ์ด๋ค.(ํํ ์น์๋ฒ๋ฅผ ๋์ด๋ค๋ ๊ฐ๋ ์ฒ๋ผ!)
$ service docker start
$ service docker stop
ํ์ง๋ง ์์ฒ๋ผ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋์ปค ๋ฐ๋ชฌ์ ์์ํ๋ ๊ฒ์ ๋ ๋ํ ๊ณ์ด์ ์ด์์ฒด์ (ex. CentOS)์์๋ง์ด๋ค. Mac์์๋ Docker Desktop on Mac ์์ด์ฝ์ ํด๋ฆญํด ๋์ปค ๋ฐ๋ชฌ์ ๋จผ์ ์คํํด์ฃผ์ด์ผ ํ๊ณ , ์ฐ๋ถํฌ์ ๊ฒฝ์ฐ๋ ๋ณ๋ค๋ฅธ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ง ์์๋ ์๋์ผ๋ก ๋์ปค ๋ฐ๋ชฌ์ ์คํ์์ผ์ค๋ค. ๋ฌผ๋ก ๋ ๋ํ ๊ณ์ด์ ์ด์์ฒด์ ์์๋ ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ง ์๊ณ ๋ ์ฐ๋ถํฌ์ฒ๋ผ ์๋์ผ๋ก ๋์ปค ๋ฐ๋ชฌ์ ์คํ์์ผ์ค ์ ์๋๋ฐ, ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
$ systemctl enable docker
์์ ๊ฐ์ด service ๋ช ๋ น์ด๋ฅผ ํ์ฉ(๋์ปค ์๋น์ค๋ฅผ ํ์ฉ)ํด์ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์ํฌ ์๋ ์์ง๋ง, ์์์ ๋ฐฐ์ด dockerd ๋ช ๋ น์ด๋ก๋ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์ํฌ ์ ์๋ค.(๋ฐ๋ก ์์์ ๋์ปค๋ฅผ ์คํํ๋ ํ๋ก์ธ์ค๋ dockerd ๋ผ๋ ํ์ผ์ ํตํด์ ์คํ๋๋ค๊ณ ๋ฐฐ์ ์๋ค) ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด service ๋ช ๋ น์ด๋ก ๋์ปค ๋ฐ๋ชฌ์ ์ ์ง์ํจ ๋ค dockerd ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์์ผ๋ณด์.
$ service docker stop
๊ฐํน ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋๋ผ๋ ๋์ปค ๋ฐ๋ชฌ์ด ์ ์งํ์ง ์์์ docker ps ์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ ์ ์๋์ ํ ์๋ ์๋ค. ์ด ๋๋ docker.socket ์ด๋ผ๋ ํ์ผ์ด ์ฌ์ ํ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์ํค๊ณ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, ์๋์ ๋ช ๋ น์ด๋ก docker.socket ์ด๋ผ๋ ๊ฒ๋ ์ ์ง์์ผ์ฃผ๋ฉด ๊ทธ ๋๋ ์ ๋ง ๋์ปค ๋ฐ๋ชฌ์ด ์ ์งํ์ฌ docker ps ์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋จ๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค.(์ด์ ๊ด๋ จํด์๋ ์ด Stackoverflow์์ ๋์์ ์ป์ ์ ์์๋ค)
$ systemctl stop docker.socket
๊ทธ๋ฆฌ๊ณ ์ด์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ง์ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์ํค๋ฉด ์ฌ์ง๊ณผ ๊ฐ์ ํ์ค์ถ๋ ฅ์ด ์ญ ๋ฌ๋ค.
$ dockerd
์ ์ฌ์ง์ ๋ก๊ทธ ์ค ๋ง์ง๋ง ์ค์ "API listen on /var/run/docker.sock" ์ด๋ผ๋ ๊ฒ์ด ๋ํ๋ฌ๋ค. ์ด๋ ๊ณง ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ ์ํ(listen)๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ์๋ฏธํ๊ณ , ์ฌ๊ธฐ์์ ์ ๋ ฅ์ ๋ฐ๋ก ์์์ ๋ฐฐ์ ๋ ์ฌ์ฉ์๊ฐ ๋์ปค ํด๋ผ์ด์ธํธ๋ฅผ ํตํ ์ฆ, docker ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ๋ ฅ์ ์๋ฏธํ๋ค. ์ค์ ๋ก ์ ์ํ์์ ํฐ๋ฏธ๋์ ํ๋ ๋ ์ผ์ docker ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์์ฒ๋ผ dockerd๋ฅผ ํ์ฉํด์ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์ํค๋ ์ฅ์ ์ ๋ฌด์์ผ๊น? ์ฐ์ ๋๋ฒ๊น ์ด๋ ๋์ปค ์์ฒด์ ํธ๋ฌ๋ธ ์ํ ์ด ์ฌ์์ง๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ํ๋ ์น์๋ฒ๋ฅผ ๊ฐ๋ฐํ ๋๋ ์น์๋ฒ๋ฅผ ํฌ๊ทธ๋ผ์ด๋ ์ก์ผ๋ก ๋์๋์ ํฐ๋ฏธ๋์์ ์ค์๊ฐ์ผ๋ก ์๋ฌ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ์์ฝ๊ฒ ๋๋ฒ๊น ํ ์ ์๊ฒ ๋๋ค. ์ด๊ฒ๊ณผ ๋น์ทํ๊ฒ dockerd๋ฅผ ํ์ฉํ๋ฉด ๋์ปค ๋ฐ๋ชฌ์ ์ค์๊ฐ ๋ก๊ทธ๋ฅผ ๊ณ์ ๋ณผ ์ ์์ด ์์ฌ์ด ๋๋ฒ๊น ์ด ๊ฐ๋ฅํด์ง๋ค.
3. ๋์ปค ๋ฐ๋ชฌ ์ค์
์ง๊ธ๊น์ง๋ ๋์ปค ํด๋ผ์ด์ธํธ, ๋์ปค ๋ฐ๋ชฌ์ด ๋ฌด์์ธ์ง ๋ฐฐ์๋ณด๋ฉด์ ๋์ปค๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ฅผ ๋ฐฐ์ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ปค ๋ฐ๋ชฌ์ ์ง์ ์คํํ๋ ๋ฐฉ๋ฒ๋ ๋ฐฐ์๋ณด์๋ค. ๋ค์์ ์ด์ ๋์ปค ๋ฐ๋ชฌ์ ์ข ๋ ์ ํ์ฉํ ์ ์๋๋ก ๋์ปค ๋ฐ๋ชฌ์ ๋ถ์ฌํ ์ ์๋ ๋ค์ํ ์ต์ ์ ๋ํด์ ๋ฐฐ์๋ณด๋๋ก ํ์.
์ด๋ฒ ๋ชฉ์ฐจ์์ ๋ฐฐ์ธ ๋ด์ฉ์ ๋ชจ๋ dockerd ๋ช ๋ น์ด๋ฅผ ํ์ฉํด์ ๋์ปค ๋ฐ๋ชฌ์ ์ต์ ์ ์ค์ ํ๋ค. ํ์ง๋ง ๋์ปค ๋ฐ๋ชฌ ์ต์ ์ ์ค์ ํ๊ธฐ ์ํด์๋ ๋ณดํต dockerd ๋ช ๋ น์ด ๋ณด๋ค๋ ๋์ปค ์ค์ ํ์ผ์ ์์ ํ ๋ค, ๋์ปค ๋ฐ๋ชฌ์ด ํด๋น ์ค์ ํ์ผ์ ์ฝ์ด ๋ค์ฌ ๋ณ๊ฒฝ๋ ๋์ปค ๋ฐ๋ชฌ ์ต์ ์ ๋ฐ์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, dockerd๋ก ์์ํด ์ ๋ ฅ์ํฌ ๋ช ๋ น์ด๋ค์ ๋์ปค ์ค์ ํ์ผ์ DOCKER_OPTS ๋ผ๋ ๋ณ์์ ํ ๋นํ ๋ค ์ ์ฅํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์์๋ ๋์ปค ๋ฐ๋ชฌ ์ค์ ์ ๋ณ๊ฒฝํ๊ณ ๋ฐ๋ก ํ์ธํ ์ ์๋๋ก ํ๊ธฐ ์ํด ํํ์ง ์์(?) ๋ฐฉ๋ฒ์ธ dockerd ๋ช ๋ น์ด๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํด์ ๋์ปค ๋ฐ๋ชฌ์ ์ต์ ์ ๋ํด ๋ฐฐ์๋ณด๋๋ก ํ์. ๋ณด์, ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ์ ๊ฐ์ ์ต์ ๋ ์์ง๋ง ์ด์ ๋ํด์๋ ํด๋น ํฌ์คํ ์์๋ ๋ค๋ฃจ์ง ์์ผ๋ฏ๋ก ์๋ณธ ์ฑ ์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค. ์ฌ๊ธฐ์๋ ๋ํ์ ์ธ ์ต์ ์ธ -H ์ต์ ์ ๋ํด์๋ง ๋ฐฐ์๋ณด๋๋ก ํ์.
3-1. ๋์ปค ๋ฐ๋ชฌ์ API๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ ์ถ๊ฐํ๊ธฐ, -H ์ต์
-H ์ต์ ์ ๋์ปค ๋ฐ๋ชฌ์ API๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ถ๊ฐํด์ค๋ค. ์๋ฌด๋ฐ -H ์ต์ ์ ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค ๋ฐ๋ชฌ์ ์คํํ๊ฒ ๋๋ฉด ๋์ปค ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ ๋์ค ์์ผ์ธ docker.sock์ ์ฌ์ฉํ๋ค. ์ ๋ชฉ์ฐจ์์ ๋ณธ ๊ทธ๋ฆผ์ ๋ค์ ๊ฐ๊ณ ์ ๋ณด์.
์ ๊ทธ๋ฆผ์์ 2๋ฒ์ ํด๋นํ๋ ๋ถ๋ถ์ด ๋ฐ๋ก docker.sock์ธ ์ ๋์ค ์์ผ์ด๊ณ ์ด๊ฒ์ด ๋์ปค ํด๋ผ์ด์ธํธ๋ฅผ ์ํด ๋์ปค ๋ฐ๋ชฌ์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ๊ธฐ๋ณธ ์ธํ ์ด ์ด๋ ๊ธฐ ๋๋ฌธ์ ์๋์ 2๊ฐ ๋ช ๋ น์ด๋ ๋์ผํ ํจ๊ณผ๋ฅผ ์ง๋๋ค.
$ dockerd
$ dockerd -H unix:///var/run/docker.sock
์ ๋ช ๋ น์ด๋ฅผ ์คํํ ๋๋ ๋ฐ๋์ ๋์ปค ๋ฐ๋ชฌ์ด ์ ์ง๋ ์ํ์์ ์คํ๋์ด์ผ ํ๋ค. ์๋ํ๋ฉด ์ด๋ฏธ ๋์ปค ๋ฐ๋ชฌ์ด ์์๋ ์ํ์ธ๋ฐ, ๋ ์์ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
dockerd ๋ช ๋ น์ด์ -H ์ต์ ์๋ IP ์ฃผ์์ ํฌํธ๋ฒํธ๋ฅผ ์ ๋ ฅํ ์๊ฐ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๊ฒฉ API์ธ Docker Remote API๋ก ๋์ปค๋ฅผ ์ ์ดํ ์ ์๊ฒ ๋๋ค. ์ฆ, ๋ก์ปฌ์ ์๋ ๋์ปค ๋ฐ๋ชฌ์ด ์๋๋๋ผ๋ ๋ค๋ฅธ ์ปดํจํฐ์ ์๋ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด ๋ ๋ค๋ฅธ ์ปดํจํฐ์ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ๋๋ HTTP ์์ฒญ์ผ๋ก ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด ๋์ปค ๋ฐ๋ชฌ์ด RESTful API ํํ๋ฅผ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก ๋์ปค ๋ฐ๋ชฌ์ ์คํํ๊ฒ ๋๋ฉด ํธ์คํธ์ ์กด์ฌํ๋ ๋ชจ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ๋ชจ๋ IP ์ฃผ์์ 999๋ฒ ํฌํธ๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ์ ๋ ฅ์ ๋ฐ๊ฒ ๋๋ค. ์ฆ, ๋ค๋ฅธ ์ปดํจํฐ์ ์ ์ฅ์์, ์๋์ IP ์ฃผ์ ๋ฐ 999๋ฒ ํฌํธ๋ฅผ ํตํด ๋ก์ปฌ(๋ด ์ปดํจํฐ)์ ๋์ปค ๋ฐ๋ชฌ์ ์๊ฒฉ์ผ๋ก ์ ์ดํ ์ ์๊ฒ ๋๋ค.
$ dockerd -H tcp://0.0.0.0:999
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์์ ๊ฐ์ ๋ช ๋ น์ด ํ ์ค๋ง ์ ๋ ฅํ๋ค๋ฉด, ๋ก์ปฌ์์๋ ๋์ด์ ๋์ปค ํด๋ผ์ด์ธํธ์ธ docker ์ ๋์ด๋ก ์์ํ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ก์ปฌ์ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ์ง ๋ชปํ๋ค. ์๋ํ๋ฉด ๋ฐ๋ก ์์์ ๋ฐฐ์ด docker.sock ์ด๋ผ๋ ์ ๋์ค ์์ผํ์ผ์ -H ์ต์ ์ ์ถ๊ฐํด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก๋ ๋์ปค ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ ๋์ค ์์ผ๊ณผ Remote API๋ฅผ ์ํ ๋ฐ์ธ๋ฉ ์ฃผ์๋ฅผ ๋์์ ์๋์ฒ๋ผ ์ค์ ํ๋ค. ์๋์ฒ๋ผ ์ค์ ํ๋ฉด ์๋ฏธ๋ "๋์ปค ๋ฐ๋ชฌ์ docker.sock์ด๋ผ๋ ์ ๋์ค ์์ผ์ ํตํ ์ ๋ ฅ ๋๋ 0.0.0.0(ํธ์คํธ์ ๋ชจ๋ ๋คํธ์ํฌ ์ธํผํ ์ด์ค์ ๋ชจ๋ IP์ฃผ์)์ 999๋ฒ ํฌํธ๋ฒํธ๋ฅผ ํตํ ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ ๋๊ธฐ์ํ(listen)์ ์์!" ์ด๋ผ๊ณ ํ ์ ์๋ค.
$ dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:999
๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ํธ์คํธ์์ Remote API๋ก ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ๋ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ์ดํดํด๋ณด์. ์ผ๋จ, Remote API ๋ ๋์ปค ํด๋ผ์ด์ธํธ๋ ๋ ๋ค ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ API๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ๋ช ๋ น์ด์ ์๊น์๋ง ๋ค๋ฅผ ๋ฟ ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ๋๋ ๋ก์ง์ ๋์ผํ๋ค๋ ๊ฒ์ด๋ค. ๋ง์ฝ 199.168.99.100 ์ด๋ผ๋ IP์ฃผ์๋ฅผ ๊ฐ์ง ์ปดํจํฐ์์ Z๋ผ๋ ๊ฐ๋ฐ์๊ฐ ๋์ปค ๋ฐ๋ชฌ์ ๋ก์ปฌ์์ ์คํ์์ผฐ๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ฆฌ๊ณ ์ด Z๊ฐ๋ฐ์๋ dockerd -H ์ต์ ์ ์ฃผ์ด 199.168.99.100์ด๋ผ๋ IP ์ฃผ์์ 999๋ฒ ํฌํธ๋ฒํธ๋ฅผ ๊ฐ๋ฐฉํ์ฌ ๋ค๋ฅธ ์๊ฒฉ ํธ์คํธ์์ Remote API๋ก ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ์ ์๋๋ก ํ์ฉํ๋ค๊ณ ํด๋ณด์. ์ด ๋ ๋์ํ๋ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
์ฆ, ๋ก์ปฌ HOST์์ ๋ ๋ฆฐ docker version์ด๋ผ๋ ๋ช ๋ น์ด๋ ์๊ฒฉ HOST์์ curl ๋ช ๋ น์ด๋ก ๋ ๋ฆฐ HTTP ์์ฒญ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋ ๊ฒ์ด๋ค. ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ์๊ฒฉ ํธ์คํธ์์ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ์ ์๊ฒ ๋๋ค. Remote API ์ข ๋ฅ(์ ๊ทธ๋ฆผ์์ /version URL ์ฒ๋ผ)๋ ๋์ปค ๋ช ๋ น์ด ๊ฐ์๋งํผ ์์ผ๋ฉฐ API์ ๋ฐ๋ผ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋์ปค ํด๋ผ์ด์ธํธ ๋ช ๋ น์ด์ ์กฐ๊ธ์ฉ ๋ค๋ฅธ ๋ถ๋ถ๋ ์๋ค. ๊ทธ๋์ ๋ณดํต์ HTTP ๋๊ตฌ๋ก ์ง์ (์ ๊ทธ๋ฆผ์ฒ๋ผ) ์์ฒญํ๊ธฐ ๋ณด๋ค๋ ํน์ก ์ธ์ด(ex. Python)๋ก ๋ฐ์ธ๋ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ ธ์ ํ๊ฒฝ๋ณ์์ DOCKER_HOST ๋ผ๋ ๋ณ์ ๊ฐ์ IP ์ฃผ์ ๋ฐ ํฌํธ๋ฒํธ๋ฅผ ํ ๋นํจ์ผ๋ก์จ ์๊ฒฉ์ ์๋ ๋์ปค๋ฅผ ์ ์ดํ ์๋ ์๋ค. ๋์ปค ๋ฐ๋ชฌ์ผ๋ก ์ ๊ทผํ ์๊ฒฉ ํธ์คํธ(ํด๋ผ์ด์ธํธ)์ ์ ธ์์ ์๋์ฒ๋ผ ํ๊ฒฝ ๋ณ์๋ฅผ ํ ๋นํ๋ฉด ๋์ปค ๋ฐ๋ชฌ์ ์๊ฒฉ์ผ๋ก ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
$ export DOCKER_HOST="tcp://199.168.99.100:999"
$ docker version
ํ์ง๋ง ์์ฒ๋ผ Remote API๋ฅผ ์ด์ฉํด์ ์๊ฒฉ ํธ์คํธ์ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ณด์์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ ๊ฒ ์๋ฌด ๋ณด์๋ ์ค์ ํ์ง ์์ผ๋ฉด ๋๊ตฐ๊ฐ๊ฐ IP ์ฃผ์์ ํฌํธ๋ฒํธ๋ง ์๋ฉด ์ฝ๊ฒ ์๊ฒฉ ํธ์คํธ์ ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋์ ๋์ปค์ ๋ํด์ ๋ณด์์ ์ค์ ํด์ค ์ ์๋ค. ์๋ฒ(๋์ปค ๋ฐ๋ชฌ)์ธก๊ณผ ํด๋ผ์ด์ธํธ(๋์ปค ํด๋ผ์ด์ธํธ)์ธก ์์์ ๋ณด์ ํ์ผ์ ์์ฑํด ์ ์ฉํ๋ค. ๋ณธ ํฌ์คํ ์์๋ ๋ค๋ฃจ์ง ์์ง๋ง ์ฑ ์์๋ ๋ณด์์ ์ค์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. ๊ด์ฌ์ด ์๋ค๋ฉด ์๋ณธ ์ฑ ์ ๋ด์ฉ์ ์ดํด๋ณด๋๋ก ํ์.
4. ๋์ปค ๋ฐ๋ชฌ ๋ชจ๋ํฐ๋ง
๋์ปค ๋ฐ๋ชฌ์ ๋ชจ๋ํฐ๋งํ๋ ์ด์ ๋ ๋ญ๊น? ๋ง์ ์์ ๋์ปค ์ปจํ ์ด๋ ์๋ฒ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํจ์ผ ์๋ ์๊ณ , ๋์ปค ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๊ทธ ์์ธ์ ์ฐพ๊ธฐ ์ํจ์ผ ์๋ ์๋ค. ๋์ปค ๋ฐ๋ชฌ์ ์ด๋ฌํ ์ํฉ์ ๋๋นํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฐ์ ๋์ปค๊ฐ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ๋ชจ๋ํฐ๋ง์ด ์๊ณ , ๋์ปค ํ๋ก์ ํธ์์ ์ง์ํ๋ ๋ค์ํ ์คํ์์ค ๋์๋ณด๋๋ ์กด์ฌํ๋ค. ์ฐ์ ๋์ปค ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ๋ถํฐ ์ดํด๋ณด์.
4-1. ๋์ปค ๋ฐ๋ชฌ์ ๋๋ฒ๊ทธ ๋ชจ๋
๋์ปค ์์ง์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ๋์ปค ๋ฐ๋ชฌ์ ๋ชจ๋ํฐ๋งํ๋ ๋ฐฉ๋ฒ์ ๋์ปค ๋ฐ๋ชฌ์ ์คํํ ๋ ๋๋ฒ๊ทธ ๋ชจ๋๋ก ์คํํ๋ ๊ฒ์ด๋ค. ๋๋ฒ๊ทธ ๋ชจ๋๋ก ๋์ปค ๋ฐ๋ชฌ์ ์คํํ๊ฒ ๋๋ฉด Remote API๋ก ๋์ปค ๋ฐ๋ชฌ์ ์ ์ดํ ๋ ๋ฐ์๋๋ ์ /์ถ๋ ฅ ๋ฟ๋ง ์๋๋ผ ๋ก์ปฌ์ ๋์ปค ํด๋ผ์ด์ธํธ์์ ์ค๊ฐ๋ ๋ช ๋ น์ด(docker ์ ๋์ด๋ก ์์ํ๋ ๋ช ๋ น์ด)๋ฅผ ๋ก๊ทธ๋ก ๋ชจ๋ ์ถ๋ ฅํ๋ค. ๋๋ฒ๊ทธ ๋ชจ๋๋ก ์คํํ๋ ๋ฐฉ๋ฒ์ -D ์ต์ ์ ์ฃผ์ด ์๋์ฒ๋ผ ์คํํด์ฃผ๋ฉด ๋๋ค.
$ dockerd -D
๊ทธ๋ฌ๋ฉด ์๋์ฒ๋ผ ๋์ปค ๋ฐ๋ชฌ์ด ์ ๋ ฅ ๋๊ธฐ ์ํ(listen)๋ก ์์๋ ๊ฒ์ ์ ์ ์๋ค.
์ ํ์ค์ถ๋ ฅ์ ๋ง์ง๋ง ์ค์ ๋ณด๋ฉด GET์ผ๋ก RESTFul API๋ฅผ ๋ ๋ฆฐ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ํ์๊ฐ ๋์ปค ๋ฐ๋ชฌ์ ๋๋ฒ๊ทธ ๋ชจ๋๋ก ์คํํ ํ, ๋ค๋ฅธ ์ ธ์์ docker ps ๋ผ๋ ์ปจํ ์ด๋ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ๋์ปค ํด๋ผ์ด์ธํธ ๋ช ๋ น์ด๋ฅผ ๋ ๋ ธ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๊ธฐ์๋ ์ ์ ์๋ฏ์ด, docker ps๋ผ๋ ๋์ปค ํด๋ผ์ด์ธํธ ๋ช ๋ น์ด๋ RESTFul API๋ก ๋ฒผํํ๋ฉด /v1.42/containers/json ์ด๋ผ๋ URL๋ก HTTP ํต์ ์ ํ ๊ฒ์ ์ ์ ์๋ค.
์ฐธ๊ณ ๋ก, ๋์ปค ๋ฐ๋ชฌ์ ๋๋ฒ๊ทธ ๋ชจ๋๊ฐ ์๋ ์ผ๋ฐ์ ์ธ ์ฆ, ์๋น์ค ๋ชจ๋๋ก ๊ตฌ๋ํ์ ๊ฒฝ์ฐ์๋ ์์ ๊ฐ์ ๋ก๊ทธ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ค. ํ์ง๋ง ์๋น์ค ๋ชจ๋์ผ ๋๋ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋๋ฐ, upstart ๊ธฐ๋ฐ์ ๋ฆฌ๋ ์ค์์๋ /var/log/upstart/docker.log ํ์ผ์์, systemd๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฐ๋ถํฌ 16.04 ์ด์์ ๋ฆฌ๋ ์ค์์๋ jorunalctl -u docker ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.(Q. upstart linux vs systemd linux?https://fossbytes.com/systemd-vs-sys-v-vs-upstart/)
ํ์ง๋ง ์ด๋ฐ ๋์ปค ๋ฐ๋ชฌ์ ๋๋ฒ๊ทธ ๋ชจ๋๋ ๋ช๊ฐ์ง ๋จ์ ์ด ์กด์ฌํ๋ค. ์ฐ์ ๋ก๊ทธ์ ์ฌ์ฉ์์๊ฒ ๊ผญ ํ์ํ์ง ์๋ ์ ๋ณด๋ ์ถ๋ ฅ์ด๋๋ค. ๋ํ ์ ๊ฒฐ๊ณผํ๋ฉด ์ฒ๋ผ ๋์ปค ๋ฐ๋ชฌ์ ํฌ๊ทธ๋ผ์ด๋ ์ก ์ํ๋ก ๋ฌด์กฐ๊ฑด ๋๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ธ ํ๋๋ฅผ ๋ฌด์กฐ๊ฑด ์ฐจ์งํ๊ฒ ๋๋ค.
4-2. ๋์ปค ๋ฐ๋ชฌ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด, events, stats, system df ๋ช ๋ น์ด
์์์ ์์๋ณธ ๋์ปค ๋ฐ๋ชฌ์ ๋๋ฒ๊ทธ ๋ชจ๋์ ๋จ์ ๋ค์ ๋ณด์ํ๋ ๋ช ๋ น์ด๋ค์ด ์กด์ฌํ๋ค. ์ฐ์ ๋์ปค ๋ฐ๋ชฌ์ ์๋น์ค ๋ชจ๋๋ก ๊ตฌ๋ํด๋ณด์. ์์์ ์์์์ผ๋์ ๋์ปค ๋ฐ๋ชฌ ๋๋ฒ๊ทธ ๋ชจ๋๋ฅผ ์ค์งํด์ฃผ๊ณ ์๋ ๋ช ๋ น์ด๋ก ๋์ปค ๋ฐ๋ชฌ์ ์๋น์ค ๋ชจ๋๋ก ์์์์ผ๋ณด์.
$ service docker start
์ด์ ๋ช ๋ น์ด ์ข ๋ฅ ํ๋์ฉ ์์๋ณด์. ๋จผ์ events ๋ช ๋ น์ด์ด๋ค. events ๋ช ๋ น์ด๋ ๋์ปค ๋ฐ๋ชฌ์ ์ด๋ค ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆผ ๋ก๊ทธ๋ฅผ ๋ณด์ฌ์ค๋ค. ์๋ 2๊ฐ์ ๋ช ๋ น์ด ์ค ํ๋๋ฅผ ์ ๋ ฅํด๋ณด์. ์ ๋ ฅํ๊ณ ์๋ฌด๋ฐ ์ถ๋ ฅ์ด ๋ฐ์ํ๊ณ ์์ง ์๋ค๋ฉด ์ ์์ ์ธ ์ํ์ด๋ค.
์ด์ ๋ค๋ฅธ ์ ธ๋ก ๊ฐ์ Ubuntu14.04 ์ด๋ฏธ์ง๋ฅผ Pull ํด๋ณด์. ํ์ฌ ์๋ฒ์ฉ ๋ฆฌ๋ ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐํผํ๊ฒ ํ์๋ tmux๋ผ๋ ํฐ๋ฏธ๋ ๋ฉํฐํ๋ ์๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฐ ๋ค์ events ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ ์ ธ๋ก ๋์๊ฐ์ ์ค์๊ฐ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด์.
๋ณด๋ฉด ๋ฐฉ๊ธ ๋ค๋ฅธ ์ ธ์์ Ubuntu:14.04 ์ด๋ฏธ์ง๋ฅผ Pullํ ๋ก๊ทธ๊ฐ ๋จ์์๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค. ์ด๋ ๊ฒ events ๋ช ๋ น์ด๋ ๋์ปค ๋ฐ๋ชฌ์์ ์คํ๋๋ ๋ช ๋ น์ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊ทธ๋ก ์ถ๋ ฅํ๋ค. ํ์ง๋ง ๋์ปค ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ๋ช ๋ น์ด๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ์๋๋ฉฐ, attach, commit, copy, create ๊ณผ ๊ฐ์ ์ปจํ ์ด๋ ๊ด๋ จ ๋ช ๋ น์ด์ delete, import, load, pull, push ์ ๊ฐ์ ์ด๋ฏธ์ง ๊ด๋ จ ๋ช ๋ น์ด, ๋ณผ๋ฅจ, ๋คํธ์ํฌ, ํ๋ฌ๊ทธ์ธ ๋ฑ๊ณผ ๊ฐ์ ๋ช ๋ น์ด์ ์ํ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ๋๋ค.
๋ํ events ๋ช ๋ น์ด๋ --filter ์ต์ ์ ์ฌ์ฉํด์ ์ํ๋ ๋ก๊ทธ ์ ๋ณด๋ง ์ถ๋ ฅํ ์ ์๋๋ก ํ ์ ์๋ค. ์ด์ ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์ฐ๋ฉด์ --filter ์ต์ ์ ๋ฐฐ์ ๋ ์ ์ด ์๋ค. ํ์์ ์๋์ ๊ฐ์ด ์ฌ์ฉ๋๋ฉฐ type์ด๋ผ๋ ํค์๋์ ๋ค์ด๊ฐ ์ธ์๋ก๋ container, image, volume, network, plugin, daemon์ผ๋ก ๋๋๋ค. ์๋๋ events ๋ช ๋ น์ด์ --filter ์ต์ ์ ์ฌ์ฉํ ์์์ด๋ค.
$ docker events --filter 'type=image'
๋ค์์ stats ๋ช ๋ น์ด์ด๋ค. stats ๋ช ๋ น์ด๋ ์คํ ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋์ ์์ ์ฌ์ฉ๋์ ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅํด์ค๋ค. ํนํ ์คํ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋์ CPU, ๋ฉ๋ชจ๋ฆฌ ์ ํ ๋ฐ ์ฌ์ฉ๋, ๋คํธ์ํฌ ์ ์ถ๋ ฅ, ๋ธ๋ก ์ ์ถ๋ ฅ(=ํ๋์จ์ด ์ ์ถ๋ ฅ) ์ ๋ณด๋ฅผ ์ถ๋ ฅํด์ค๋ค. ๋ง์ฝ ์ค์๊ฐ์ด ์๋ ํ ๋ฒ๋ง ์ผ์์ ์ผ๋ก ์ถ๋ ฅ์ํค๊ณ ์ถ๋ค๋ฉด --no-stream ์ต์ ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
$ docker stats
$ docker stats --no-stream
์ฐธ๊ณ ๋ก Remote API๋ฅผ ์ฌ์ฉํด์ stats ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋์ปค ํด๋ผ์ด์ธํธ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด stats๋ฅผ ์ฐ๋ ๊ฒ๋ณด๋ค ๋ ์์ธํ ์ ๋ณด๋ฅผ ๋ฐํํ๋ค๊ณ ํ๋ค.
๋ง์ง๋ง์ผ๋ก system df ๋ช ๋ น์ด์ ๋ํด ์์๋ณด์. system df ๋ช ๋ น์ด๋ ๋์ปค์์ ์ฌ์ฉํ๊ณ ์๋ ์ด๋ฏธ์ง, ์ปจํ ์ด๋, ๋ณผ๋ฅจ์ ์ด ๊ฐ์ ๋ฐ ์ฌ์ฉ์ค์ธ ๊ฐ์, ํฌ๊ธฐ, ์ญ์ ํจ์ผ๋ก์จ ํ๋ณด ๊ฐ๋ฅํ ๊ณต๊ฐ์ ์ถ๋ ฅํ๋ค. ์ญ์ ํจ์ผ๋ก์จ ํ๋ณด ๊ฐ๋ฅํ ๊ณต๊ฐ์ RECLAIMABLE ์ด๋ผ๋ ํญ๋ชฉ์ ํ์๋๋ค.
$ docker system df
4-3. ๋จ์ผ ๋์ปค ํธ์คํธ์์ ๋ชจ๋ํฐ๋ง ํด๋ณด๊ธฐ, CAdvisor
๋ค์์ผ๋ก๋ ๊ตฌ๊ธ์ด ๋ง๋ ์ปจํ ์ด๋ ๋ชจ๋ํฐ๋ง ๋๊ตฌ์ธ CAdvisor๋ฅผ ํ๋ฒ ์ฌ์ฉํด๋ณด๋๋ก ํ์. CAdvisor๋ ๊ตฌ๊ธ์ด ๋ง๋ ์คํ์์ค๋ก์, CAdvisor ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด๋ฅผ ์ปจํ ์ด๋๋ก ๋ง๋ค์ด ๋์๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๋ก์ ๊ฐ๋จํ ์ค์น๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฒ๋ค๊ฐ Docker Hub์๋ ์ด๋ฏธ์ง ํํ๋ก ์ฌ๋ผ๊ฐ ์๊ธฐ๋ ํ๋ค. ๊ทธ๋ฆฌ๊ณ CAdvisor๋ ์ปจํ ์ด๋ ๋ณ ์ค์๊ฐ ๋ฆฌ์์ค ์ฌ์ฉ๋ ๋ฐ ๋์ปค ๋ชจ๋ํฐ๋ง ์ ๋ณด ๋ฑ์ ์๊ฐํํด์ ๋ณด์ฌ์ค๋ค. CAdvisor์ ์คํ ๊นํ ์์ค์ฝ๋๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ CAdvisor๋ฅผ ์ฌ์ฉํด๋ณด์. ๋ฆฌ๋ ์ค์์ ์ค์น๋ฅผ ํด๋ณด๋ ค ํ์ง๋ง, ํ์๊ฐ ์ค์นํ ๋ฆฌ๋ ์ค๋ ์๋ฒ์ฉ ๋ฆฌ๋ ์ค๋ผ์ GUI ํ๋ฉด์ด ์ ๊ณต๋์ง ์๋๋ค. CAdvisor๋ฅผ ์ค์นํ๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ ์์ ํด๋ณด๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ํ์ ๋ ธํธ๋ถ(๋งฅ๋ถ)๊ณผ ๋ฆฌ๋ ์ค CentOS๊ฐ ๊น๋ ค์๋ VirtualBox(VM)๊ณผ ํฌํธ ํฌ์๋ฉ์ ํ๊ณ , ์ด VM์์์์ ํธ์คํธ์ VM ์์์ ์คํ์ํจ CAdvisor ์ปจํ ์ด๋์ ํฌํธ ํฌ์๋ฉ ์ฆ, ์ด 2๋ฒ์ ํฌํธ ํฌ์๋ฉ์ ํ๋ ค๊ณ ํ๋ค. ๋ ธํธ๋ถ๊ณผ VM ๊ฐ์ ํฌํธ ํฌ์๋ฉ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด๋ณด์.
(์ฐธ๊ณ ๋ก ๋งฅ๋ถ ์์ฒด์์ ์ฆ, Docker Desktop on Mac์์ CAdvisor ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ค๊ณ ํ์ง๋ง ์์ฑ ์ ๋ฐ๋ก ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ(Exit)๋๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์๊พธ ๋ฐ์ํด์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง๋ ์์๋ค. ์ฐธ๊ณ ๋ก ๊นํ ์ด์์๋ ์ด์ ๊ด๋ จ๋ ๋ฌธ์ ์ ๊ธฐ๊ฐ ๋์์๋๋ฐ ํด๊ฒฐ๋ ์ธ๊ตญ์ธ ๋ถ๋ค..๋ ๊ณ์๋ ํน์๋ผ๋ ๋๋ฒ๊น ํด๋ณด๋ ค๊ณ ํ๋ค๋ฉด ํด๋น ๊ธ์ ์ฐธ๊ณ ํด๋ณด์)
๋งฅ๋ถ๊ณผ VM ๊ฐ์ ํฌํธํฌ์๋ฉ์ ์๋ฃ(๋งฅ๋ถ๊ณผ VM ๊ฐ์๋ 8080 ํฌํธ๋ฒํธ๋ฅผ ๊ฐ๋ฐฉํจ)ํ๋ค๊ณ ๊ฐ์ ํ๊ณ , VM์์ ๋ฆฌ๋ ์ค์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ CAdvisor ์ปจํ ์ด๋๋ฅผ ์์ฑํด๋ณด์. ์์ฑ ํ, docker ps ๋ช ๋ น์ด๋ฅผ ์ณค์ ๋ ์ ๋์ ์ค์ด๋ฉด ์ฑ๊ณตํ ๊ฒ์ด๋ค.
$ docker run \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
๊ทธ๋ฆฌ๊ณ ์ด์ ๋งฅ๋ถ์์ http://localhost:8080 URL์ ํตํด ์ ๊ทผํ๋ฉด ์๋์ ๊ฐ์ด ์น๋ธ๋ผ์ฐ์ ํ๋ฉด์ CAdvisor ํ๋ฉด์ด ๋ํ๋๋ค.
์ ํ๋ฉด์์ [/docker] ๋ฅผ ๋๋ฌ๋ณด๋ฉด ๋์ปค ๋ฐ๋ชฌ์ ์ ๋ณด, ์ปจํ ์ด๋์ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง๋ก ์ด๋ํ๊ณ ์ด๋ํ ํ์ด์ง ์ดํ์ ๋ํ๋๋ ์๋ ํ๋ฉด์์ [Subcontainers]์ ํด๋นํ๋ ๋ชฉ๋ก์ ํ์ฌ VM์์ ๋์ปค ๋ฐ๋ชฌ์์ ์คํ์ค์ธ ์ปจํ ์ด๋๋ค์ ์๋ฏธํ๋ค. ์๋์์๋ 2๊ฐ์ ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ๋ฐ, ์ด๋ CAdvisor๋ฅผ ์ค์นํ๋ฉด์ ์์ฑ๋ ํ๋์ ์ปจํ ์ด๋๋ฅผ ์๋ฏธํ๊ณ ๋๋จธ์ง ํ๋๋ ํ์๊ฐ ๋ฐ๋ก ์ค์ตํ๋ฉด์ ์์ฑํ Nginx ์ปจํ ์ด๋ 1๊ฐ๋ฅผ ์๋ฏธํ๋ค.
์ ์ ๋ณด ์ด์ธ์ CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๋คํธ์ํฌ, ํ์ผ ์์คํ ๊ด๋ จํ์ฌ ๋ชจ๋ํฐ๋ง ์ ๋ณด๋ฅผ ์ ๊ณตํด์ค๋ค. ์ด๋ฐ ์ ์ฉํ CAdvisor ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ํ๊ณ์ ์ด ์๋๋ฐ, ๋ฐ๋ก ํ๋์ ํธ์คํธ๋ง ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ ์ถ๊ฐ VM ๋จธ์ ์ ํ ๋น๋ฐ์์ ๊ทธ VM ๋จธ์ ์์๋ ๋์ปค ๋ฐ๋ชฌ์ ์คํ์ํค๊ณ ์๋ค๋ฉด, ํ๋์ CAdvisor๋ก ์ถ๊ฐํ VM์ ๋์ปค ๋ฐ๋ชฌ์ ๋ชจ๋ํฐ๋งํ ์๋ ์๋ค. ์ด๋ฐ ํ๊ณ์ ๋๋ฌธ์ ์ฌ๋ฌ ํธ์คํธ์ ๋์ปค ๋ฐ๋ชฌ์ ๋ชจ๋ ๋ชจ๋ํฐ๋งํ ์ ์๋ Grafana ๋ Prometheus ๋ฑ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค.
5. Python Remote API ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ docker-py๋ฅผ ์ด์ฉํด ๋์ปค ์ฌ์ฉํ๊ธฐ
์ด๋ฒ ๋ชฉ์ฐจ์์๋ [๋ชฉ์ฐจ 3-1]์์ ์ ์ ์ธ๊ธํ ์๊ฒฉ ํธ์คํธ์ ๋์ปค ๋ฐ๋ชฌ์ ์ด์ฉํ๊ธฐ ์ํด Remote API๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ ํน์ ์ธ์ด๋ก ๋ฐ์ธ๋ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์ ์ดํด๋ณด์. ์ฌ๊ธฐ์์๋ Python์ผ๋ก ๋ฐ์ธ๋ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์์๋ณธ๋ค.
์์์ Remote API๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ผ๋ก ์๊ฒฉ ํธ์คํธ์ ๋์ปค ๋ฐ๋ชฌ์ ์ด์ฉํ๊ธฐ ์ํจ์ด๋ผ๊ณ ํ๋ค. ํ์ง๋ง ๊ผญ ์๊ฒฉ ํธ์คํธ์ ๋์ปค ๋ฐ๋ชฌ ์ด์ฉ์ด ๋ชฉ์ ์ด ์๋๋๋ผ๋ ์๋ฅผ ๋ค์ด, ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํด์ผ ํ ์์ ์ด ๋ง๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ๋ฑ ๋ณต์กํ ๊ณผ์ ์ด ํฌํจ๋์ด ์๋ค๋ฉด ํน์ ์ธ์ด๋ก ๋ฐ์ธ๋ฉ๋ Remote API ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ฉํ๊ธฐ๋ ํ๋ค. ๋ฐ์ธ๋ฉ ์ง์์ด ๋๋ ์ธ์ด๋ก๋ Go, C#, C++, Python, Dart, PHP, Java ๋ฑ์ด ์๋ค.
Python์ผ๋ก Remote API๋ฅผ ์ด์ฉํ๋ ค๋ฉด ์ผ๋จ Python ๋ฒ์ ์ด 3.0 ์ด์์ด์ด์ผ ํ๋ค. Python Remote API ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฆ์ docker-py ์ด๋ค. docker-py๋ pip์ ์ด์ฉํด ์ค์นํ ์ ์๋ค. ์ฐ์ ๋ฆฌ๋ ์ค์ ๋จผ์ pip ์ค์น ํ, docker-py ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด๋ณด์.
$ yum install epel-release -y
$ yum install python3-pip -y
$ pip3 install docker
์ด์ docker-py๊ฐ ์ ์์ ์ผ๋ก ์ค์น๋์๋ค. ๊ทธ๋ฌ๋ฉด ์๋์ฒ๋ผ ๋ฆฌ๋ ์ค์์ python3 ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ด๊ณ ์๋ ์ฝ๋๋ฅผ ์ ๋ ฅ์์ผ์ ๋์ปค ์์ง์ ์ ๋ณด๋ฅผ ์ถ๋ ฅ์ํฌ ์ ์๋ค.
$ python3
>>> import docker
>>> client = docker.DockerClient(base_url="unix://var/run/docker.sock")
>>> client.info()
๊ทธ๋ผ ๊ฐ๋จํ ์์๋ก, docker-py๋ฅผ ์ด์ฉํด์ Nginx ์ปจํ ์ด๋๋ฅผ Detached ์ํ๋ก ์คํํ๋๋ฐ, ํธ์คํธ์ 80/tcp ํฌํธ๋ฅผ ์ปจํ ์ด๋์ 80๋ฒ ํฌํธ์ ๋ฐ์ธ๋ฉํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์. ์๋์ ๊ฐ์ main.py ํ์ผ์ ํ๋ ์์ฑํ๊ณ python3 main.py ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ณด์.
# docker-py.py
import docker
client = docker.DockerClient(base_url="unix://var/run/docker.sock")
container = client.containers.run('nginx', detach=True, ports={'80/tcp': 80})
print("Created container info:", container.name, container.id)
ํ์๋ ์๋์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ๋์๋ค. docker-py๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ ๋ ์๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ ๋ฌธ์๋ ์ฐธ๊ณ ํด๋ณด๋๋ก ํ์.
์ด๋ ๊ฒ ๊น์ง ํด์ ๋์ปค ๋ฐ๋ชฌ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๋ํด์ ๋ฐฐ์๋ณด์๋ค. ๋ค์ ํฌ์คํ ์๋ ๋์ปค ์ค์์ ๋ํด ์์๋ณด๋๋ก ํ์.