๐ ํด๋น ํฌ์คํ ์ ์์ํ์ธ์! ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค ์์ ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์ ๋๋ค. ํฌ์คํ ์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋์ปค ์์ง์ ํต์ฌ ์ค ํ๋์ธ ๋์ปค ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ์.
1. ์ปจํ ์ด๋ ์์ฑํ๊ธฐ
๊ฐ์ฅ ๋จผ์ ๋ฐฐ์๋ณผ ๊ฒ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค. docker run ๋ช ๋ น์ด๋ก ์คํํ ์ ์๋๋ฐ, ์ด ๋ช ๋ น์ด๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์คํ๊น์ง ํ ์ ์๋ ๋ช ๋ น์ด์ด๋ค. ๋ช ๋ น์ด ํ์์ ์๋์ ๊ฐ๋ค. ๊ณต์ ๋ฌธ์์ ๊ฐ๋ฉด ์ฌ๋ฌ๊ฐ์ง ์ธ์๊ฐ ์๊ธด ํ์ง๋ง, ์ฌ๊ธฐ์๋ ์์ฃผ ์ฐ์ด๋ฉฐ ํต์ฌ์ ์ธ ๋ช ๋ น์ด ์ธ์๋ง ์์๋ณด๋๋ก ํ์.
$ docker run [OPTIONS] [IMAGE]
์๋์ ๊ฐ์ด ubuntu:20.04 ์ด๋ฏธ์ง๋ฅผ ํ์ฉํด์ ์ปจํ ์ด๋๋ฅผ ์์ฑํด๋ณด์. run ๋ช ๋ น์ด๋ก๋ ์ด๋ฏธ์ง๋ฅผ pull ํ๋ ๊ฒ๊น์ง ํ๋ฒ์ ํด์ค๋ค. ์ด์ ์ ๋ฐฐ์ ์ ๋๋ pull ๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ณ , run ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๋จ๊ณ๋ฅผ ํฌ ์คํ ์ผ๋ก ๋๋์ด์ ๋ฐฐ์์ ์ด๋ ๊ฒ ํด์ผ๋ง ์ปจํ ์ด๋๊ฐ ์์ฑ๋๋ ์ค ์์๋ค. ํ์ง๋ง run ๋ช ๋ น์ด ํ๋๋ง ์คํํด์ฃผ์ด๋ ์ต์ด๋ก๋ ๋ก์ปฌ ๋์ปค ์์ง์ ํด๋น ์ด๋ฏธ์ง๊ฐ ์๋์ง ์ฐพ์๋ณด๊ณ , ์์ผ๋ฉด ๋์ปค ์ค์ ์ด๋ฏธ์ง ์ ์ฅ์์ธ ๋์ปค ํ๋ธ์์ ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ๊ณ ๊ทธ ์ด๋ฏธ์ง๋ฅผ ํ์ฉํด ์ปจํ ์ด๋๋ฅผ ์์ฑํด์ค๋ค. ์๋๋ run ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑ ๋ฐ ์คํํ๋ ์์์ด๋ค.
์ ๋ช ๋ น์ด ์ถ๋ ฅํ๋ฉด์ ๋ณด๋ฉด ์ฒซ ์ค์ ubuntu:20.04 ๋ผ๋ ์ด๋ฏธ์ง๋ฅผ local ์์ ์ฐพ์ ์ ์์ด์ ๋์ปค ํ๋ธ์์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋จผ์ pull ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ค, ํ๋กฌํํธ ์ ๋ณด๋ฅผ ๋ณด๋ฉด Host ์ด๋ฆ์ด [localhost โ 41560e9a6708] ๋ก ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ, ์์ฑํ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ '41560e9a6708' ๋ผ๋ ํธ์คํธ ์ด๋ฆ์ ๋ฌด์์์ 16์ง์ ํด์๊ฐ์ด๋ค. ์ด ๊ฐ์ ๋ฐฉ๊ธ ์์ฑํ ์ปจํ ์ด๋์ ๊ณ ์ ํ ID์ ์ ์ผ๋ถ๋ถ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด์ค๊ฒ ํ ์ ์์๋ ์ด์ ๋ -i ์ -t ๋ผ๋ ์ต์ ๋๋ถ์ด๋ค. ์ฌ๊ธฐ์ i๋ interactive๋ฅผ, t๋ tty๋ก, ๋ฆฌ๋ ์ค์ ์ฝ์์ด๋ ํฐ๋ฏธ๋์ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ๋ฐ๋ก ์์ํ๋ ๋ช ๋ น์ด๊ฐ bash ์ ธ์ ํ์ฑํํ๋๋ก ์ค์ ๋์ด ์๋ค.(์ด๋ ํด๋น ์ปจํ ์ด๋์ COMMANDS ํญ๋ชฉ์ ๋ณด๋ฉด /bin/bash ๋ผ๋ ๋ช ๋ น์ด๊ฐ ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ) ๋ฐ๋์ ์ด 3๊ฐ์ง ์กฐ๊ฑด์ด ๋ชจ๋ ์ถฉ์กฑ๋์ด์ผ ํด๋น ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๊ณ์ ๋ค์ด๊ฐ ์์ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ๋ค์ด๊ฐ ์ปจํ ์ด๋์์ ๋น ์ ธ๋์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ์๋์ ๊ฐ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
๋ช ๋ น์ด | ์๋ฏธ |
์ ธ์ exit ์ ๋ ฅ ๋๋ Ctrl + D | ์ปจํ ์ด๋์์ ๋น ์ ธ๋์ค๋ ์ปจํ ์ด๋๋ฅผ ์ ์ง์ํด |
Ctrl + P + Q | ์ปจํ
์ด๋์์ ๋น ์ ธ๋์ค๋ ์ปจํ
์ด๋๋ฅผ ์คํ์ํจ ์ํ๋ก ๋์ด (๊ทธ๋์ ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉ) |
์ถ๊ฐ์ ์ผ๋ก ์ปจํ ์ด๋์ ๊ด๋ จ๋ ๋ช ๋ น์ด์ ์ต์ ๋ค์ ์๋ ํ ํํ๋ก ์์๋ณด๋๋ก ํ์.
๋ช ๋ น์ด | ์ต์ | ์๋ฏธ | ํน์ง |
docker pull [IMAGE] | ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ๋ ์ฌ์ฉ | ||
docker images | ๋ด๋ ค๋ฐ์ ์ด๋ฏธ์ง ๋ชฉ๋ก๋ค์ ์ถ๋ ฅ | ||
docker create [OPTIONS] [IMAGE] | ์ปจํ ์ด๋๋ฅผ ์์ฑ | ์ปจํ ์ด๋๋ฅผ ์์ฑ๋ง ํ ๋ฟ ๋ด๋ถ๋ก ๋ค์ด๊ฐ์ง ์์. -i, -t ์ต์ ์ ํจ๊ป ์ฌ์ฉํ๋๋ผ๋ ๋ด๋ถ์ ๋ค์ด๊ฐ์ง์ง ์์ | |
docker start [CONTAINER] | ์์ฑํ ์ปจํ ์ด๋๋ฅผ ์์ | ||
docker attach [CONTAINER] | ์์ํ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ | ||
docker inspect [CONTAINER] | ์ปจํ ์ด๋์ ๊ณ ์ ํ ID๋ฅผ ํ์ธ | ||
docker port [CONTAINER] | ์ปจํ ์ด๋์ PORTS ํญ๋ชฉ์ ํ์ธ | ||
docker run [OPTIONS] [IMAGE] |
์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ณ ์ปจํ ์ด๋๋ฅผ ์์ฑ | ๋์ปค pull, create, start ๋ช ๋ น์ด ์คํ ํ, attach๊ฐ ๊ฐ๋ฅํ ์ปจํ ์ด๋๋ผ๋ฉด ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ ํ๋ฒ์ ํด์ค | |
-i | interactive ๋ชจ๋ | ||
-t | tty ํฐ๋ฏธ๋ ํ์ฑํ | ||
--name | ์์ฑํ ์ปจํ ์ด๋์ ์ด๋ฆ ์ ์ | ||
--hostname | ์์ฑํ ์ปจํ ์ด๋์ ํธ์คํธ ์ด๋ฆ ์ค์ ์ด ๊ฐ๋ฅํจ | ||
docker ps | ์คํ์ค์ธ ์ปจํ ์ด๋๋ฅผ ์ถ๋ ฅ | ||
-a | ์ ์ง๋ ์ปจํ ์ด๋๊น์ง ๋ชจ๋ ์ถ๋ ฅ | STATUS ๊ฐ์ ์๋ ๊ฒ๋ค ์ค 'Exited'๋ ์ข ๋ฃ๋ ์ํ๋ฅผ, 'Up, seconds'๋ ์คํ ์ค์ธ ์ํ๋ฅผ ์๋ฏธ | |
--format "Go template" | ์ถ๋ ฅ ์ ๋ณด๋ฅผ Go template์ ํ์ฉํด์ ์ํ๋ ํํ๋ก ์ถ๋ ฅ | ||
-q | ์ปจํ ์ด๋ ID๋ง ์ถ๋ ฅ | ||
docker exec [OPTIONS] [CONTAINER] [COMMAND] | ํด๋น ์ปจํ ์ด๋๊ฐ detached ๋ชจ๋๋ก ์คํ๋์์ด๋ ํด๋น ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ช ๋ น์ด๋ฅผ ์คํํ ๋ค ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ ํ ์ ์์ | ||
docker rename [As-is NAME] [To-be NAME] | ์ปจํ ์ด๋์ ์ด๋ฆ์ ๋ณ๊ฒฝ |
์ ์ docker ps ๋ช ๋ น์ด๋ฅผ ์คํํ์ ๋ ๋์ค๋ ๊ฒฐ๊ณผ ํ๋ฉด์ ๋์ค๋ ๋ด์ฉ์ ๋ํด์ ์์๋ณด๊ณ ๊ฐ์. ์๋ ํ๋ฉด์ ์ฐธ๊ณ ํด์ ํ๋์ฉ ์์๊ฐ๋ณด๋๋ก ํ์.
- CONTAINER ID : ์ปจํ ์ด๋์๊ฒ ์๋์ผ๋ก ํ ๋น๋๋ ๊ณ ์ ํ ID
- IMAGE : ์ปจํ ์ด๋ ์์ฑ ์ ํ์ฉํ ์ด๋ฏธ์ง ์ด๋ฆ
- COMMAND : ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํ๋ ๋ช ๋ น์ด. ์ปค๋งจ๋๋ ๋๋ถ๋ถ ์ด๋ฏธ์ง์ ๋ฏธ๋ฆฌ ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ์ค์ ํ ํ์๋ ์๋ค. ์ ์์์์๋ /bin/bash ๋ผ๋ bash ์ ธ์ ํ์ฑํ์ํค๋ ๋ช ๋ น์ด๊ฐ ์ ๋ ฅ๋์ด ์๋ค. ์ด ์ปค๋งจ๋๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ฐ, docker run, create ๋ช ๋ น์ด์ ๋งจ ๋์ ์ ๋ ฅํด์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ๋ฎ์ด์ธ ์ ์๋ค.
- CREATED: ์ปจํ ์ด๋๊ฐ ์์ฑ๋๊ณ ๋ ๋ค ํ๋ฅธ ์๊ฐ์ ์๋ฏธ
- STATUS : ์ปจํ ์ด๋์ ์ํ๋ฅผ ์๋ฏธ. Up์ ์คํ ์ค์, Exited๋ ์ข ๋ฃ๋์์์, Pause๋ ์ผ์ ์ค์ง๋ ์ํ๋ฅผ ์๋ฏธ
- PORTS: ์ปจํ ์ด๋์ ํธ์คํธ๋ฅผ ์ฐ๊ฒฐํ ํฌํธ๋ค์ด ๋์ด๋จ. ์๋ฌด๊ฒ๋ ์์ผ๋ฉด ์ฐ๊ฒฐ๋์ด ์๋ ํฌํธ๊ฐ ์์์ ์๋ฏธ
- NAMES : ์ปจํ ์ด๋์ ๊ณ ์ ํ ์ด๋ฆ. --name ์ต์ ์ผ๋ก ์์ฑ ์ ์ด๋ฆ์ ๋ช ์ํด์ฃผ์ง ์์ผ๋ฉด ๋์ปค๊ฐ ์์๋ก ๋๋คํ ํ์ฉ์ฌ์ ๋ช ์ฌ๋ฅผ ๋ฌด์์๋ก ์กฐํฉํด ์ค์ . ์ ์์์๋ competent_johnson ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ช ์ํด์ค ๊ฒ์ ๋ณผ ์ ์์. ์ปจํ ์ด๋ ID์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ณต๋ ์ ์์
2. ์ปจํ ์ด๋ ์ญ์ ํ๊ธฐ
์ด๋ฒ์ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ ๋ช ๋ น์ด์ ๋ํด ์์๋ณด์. ํ ๋ฒ ์ญ์ ํ ์ปจํ ์ด๋๋ ๋ณต๊ตฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋๋ฅผ ์ญ์ ์, ๋ฐ๋์ ํด๋น ์ปจํ ์ด๋๋ฅผ ์ ์งํ๊ณ ์ญ์ ์์ผ์ผ ํ๋ค. ๋ฌผ๋ก ๊ฐ์ ๋ก ์ญ์ ํ๋ ์ต์ ์ ์ทจํด์ค ์๋ ์๋ค. ๊ทธ ์ด์ธ ์ถ๊ฐ์ ์ธ ์ญ์ ๊ด๋ จ ๋ช ๋ น์ด๋ ์๋ ํ๋ฅผ ์ฐธ์กฐํ์.
๋ช ๋ น์ด | ์ต์ | ์๋ฏธ | ํน์ง |
docker stop [CONTAINER] | ์ปจํ ์ด๋๋ฅผ ์ ์ง | ||
docker rm [CONTAINER] | ์ ์ง๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ | ๋ช
๋ น์ด ์นํ์ ์ฌ์ฉํด์ ๊ฐ๋ฅ ex) docker rm $(docker ps -a -q) |
|
-f | ์ ์ง ๋๋ ์คํ ์ค์ธ ์ปจํ ์ด๋๋ ๊ฐ์ (force) ์ญ์ | ||
docker container prune | ์ ์ง๋ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ |
3. ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ๊ธฐ
VirtualBox์์ VM์ ์๋ก ํ ๋น๋ฐ์ผ๋ฉด ๊ฐ์ IP ์ฃผ์๊ฐ ํ ๋น๋๋ค. ์ด๋ ๋์ปค์ ์ปจํ ์ด๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค๋ ์ปจํ ์ด๋์ $172.17.0.x$ ๋ผ๋ IP ์ฃผ์๋ฅผ ํ ๋น๋ฐ๋๋ค. ๋์ $x$ ์ซ์๊ฐ ์ฆ๊ฐํ๋ฉด์ ์์ฐจ์ ์ผ๋ก ์์ฑ๋๋ ์ปจํ ์ด๋์ IP ์ฃผ์๋ฅผ ํ ๋นํ๋ค. ์ฐ์ ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ์์ฑํ ํ, ํด๋น ๋ด๋ถ ์ปจํ ์ด๋๋ก ๋ค์ด๊ฐ ifconfig ๋ช ๋ น์ด๋ฅผ ํตํด ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ดํด๋ณด์.(์ฐธ๊ณ ๋ก ubuntu:20.04 ์ด๋ฏธ์ง์๋ ifconfig ๋ช ๋ น์ด ํ์ผ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ubuntu:14.04 ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ค)
์ฐ์ ํฌ๊ฒ 2๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ๊ฐ ์๋ค. eth0 ๊ณผ lo ๋ผ๋ ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ๋ค. eth0์ ๋์ปค ์ปจํ ์ด๋์ NAT IP์ธ 172.17.0.2 ๋ผ๋ ์ฃผ์๋ฅผ ํ ๋น๋ฐ์์์ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ฆฌ๊ณ VM์ centOS ์ฆ, ๋ก์ปฌ ํธ์คํธ๋ 127.0.0.1 ์ด๋ผ๋ IP ์ฃผ์๋ฅผ ํ ๋น ๋ฐ์์์ ์๋ ค์ฃผ๋ ๊ฒ์ด lo ๋ผ๋ ์ธํฐํ์ด์ค์ด๋ค. ๋ง์ฝ ์๋ฌด๋ฐ ์ค์ ์ ํด์ฃผ์ง ์์๋ค๋ฉด ์ธ๋ถ(๋์ปค ์์ง์ด ์ค์น๋ CentOS ๋ก์ปฌ ํธ์คํธ๊ฐ ์๋ ๋ค๋ฅธ ์ธ๋ถ)์์ ๋์ปค ์ปจํ ์ด๋๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ์ด ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๊ธฐ ์ํด์, ๋ค์ ๋งํด ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์์ผ์ฃผ๊ธฐ ์ํด์ eth0์ IP๋ฅผ lo(๋ก์ปฌ ํธ์คํธ)์ IP์ ํฌํธ์ ๋ฐ์ธ๋ฉ ํด์ฃผ์ด์ผ ํ๋ค. ์ด ๋ฐ์ธ๋ฉ์ docker run ๋ช ๋ น์ด์ -p ๋ผ๋ ์ต์ (์ผ๋ช ํฌํธ ํฌ์๋ฉ์ด๋ผ๋ ๊ธฐ๋ฅ)์ ํตํด ์ค์ ํด์ค ์ ์๋ค. ์ฐ์ -p ๋ผ๋ ์ต์ ์ ์ฌ์ฉํ๋ ๋ช ๋ น์ด ํ์์ ์๋์ ๊ฐ๋ค.
์ฐธ๊ณ ๋ก ๋์ปค ์์ง์ด ์ค์น๋ ๋ก์ปฌ ํธ์คํธ๊ฐ Mac์ธ ๊ฒฝ์ฐ(Docker Desktop for Mac ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ๋์ปค ์์ง์ด ์ค์น๋์ด์๋ ๋ก์ปฌ ํธ์คํธ๋ผ๋ ์ปจํ ์ด๋์ IP๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ์ ๋ ์ฐธ๊ณ ํด๋์.
$ docker run -it -p {HOST IP}:[HOST PORT]:[CONTAINER PORT]
ํ๋์ฉ ์ดํด๋ณด์. ์ฐ์ ๋ก์ปฌ ํธ์คํธ์ ํฌํธ๋ฒํธ๋ฅผ ์๋ฏธํ๋ HOST PORT ์ ์ปจํ ์ด๋์ ํฌํธ๋ฒํธ๋ฅผ ์๋ฏธํ๋ CONTAINER PORT ์ด๋ค. ๋ก์ปฌ ํธ์คํธ์ IP ์ฃผ์์ธ HOST IP๋ ์๋ตํด๋ ๋๋ ์๋ต ์์๋ ๋ก์ปฌ ํธ์คํธ IP๊ฐ ์๋์ผ๋ก ์ค์ ๋๋ค. ๋ง์ฝ ์๋ก์ด ํน์ IP ์ฃผ์๋ฅผ ๋ช ์ํ๊ณ ์ถ๋ค๋ฉด HOST IP์ ํด๋น ์ฃผ์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ๋ํ HOST PORT๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค. ๋จ, ์๋ตํ๊ฒ ๋๋ฉด ์์์ ์๋์ผ๋ก ๋ก์ปฌ ํธ์คํธ์ ๋น์ด์๋ ํฌํธ์ ์ฐ๊ฒฐ์ ํด์ฃผ๋๋ฐ, ์ฐ๊ฒฐ ํ ๋ก์ปฌ ํธ์คํธ์ ์ด๋ค ํฌํธ๋ก ์ฐ๊ฒฐํ๋์ง ์ดํด๋ณด๊ธฐ ์ํด์๋ docker ps ๋ช ๋ น์ด๋ฅผ ํตํด ๋์จ ๊ฒฐ๊ณผ ํ๋ฉด์ค PORTS ํญ๋ชฉ์ ํ์ธํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ํฌํธ๋ฅผ ์ฌ๋ฌ๊ฐ ์ฐ๊ฒฐํด์ฃผ๊ณ ์ถ๋ค๊ณ ํ๋ค๋ฉด -p ์ต์ ์ ์ฌ๋ฌ๋ฒ ์จ์ฃผ์ด ๋ช ์ํด์ฃผ๋ฉด ๋๋ค. ์๋์ฒ๋ผ ๋ง์ด๋ค.
$ docker run -it -p 80:80 -p 127.0.0.1:8080:3306
๊ทธ๋ฌ๋ฉด ์ด์ ์ํ์น ์น์๋ฒ๋ฅผ ๋์๋์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์ปจํ ์ด๋ ํฌํธ์ ๋ก์ปฌ ํธ์คํธ์ ํฌํธ๋ฅผ ์ฐ๊ฒฐ์์ผ๋ณด์. ๊ทธ๋ฆฌ๊ณ ๋ก์ปฌ ํธ์คํธ์์ ์ํ์น ์น์๋ฒ์ ์ ๊ทผ์ด ์๋๋์ง๋ ์ดํด๋ณด์. ์ฐ์ ๋ก์ปฌ ํธ์คํธ(CentOS)์์ ์๋ ๋ช ๋ น์ด๋ค์ ์ ๋ ฅํด ์ปจํ ์ด๋ ์์ฑํ๊ณ ๊ทธ ๋ด๋ถ๋ก ๋ค์ด๊ฐ์ ์ํ์น ์น์๋ฒ๋ฅผ ์ค์น ๋ฐ ๊ตฌ๋์์ผ๋ณด์.
$ docker run -it --name mywebserver -p 127.0.0.1:3333:80
$ apt-get update
$ apt-get install apache2 -y
$ echo "ServerName localhost" >> /etc/apache2/apache2.conf
$ service apache2 start
์ํ์น ์น์๋ฒ๋ ํน์ดํ๊ฒ ๋ฌด์กฐ๊ฑด 80 ํฌํธ ๋ฒํธ๋ง ์ฌ์ฉํ๊ธฐ๋ก ๋์ด ์์ผ๋ฏ๋ก, ๋ฐ๋์ ์ปจํ ์ด๋ ํฌํธ ๋ฒํธ๋ฅผ ์ง์ ํด์ค ๋ 80๋ฒ์ ์ง์ ํด์ฃผ์ด์ผ ํจ์ ์์ง๋ง์. ์ ๋ช ๋ น์ด๋ฅผ ๋ชจ๋ ์คํํ๊ณ ์ ์ ๋์ํ๋ฉด ์๋์ ๊ฐ์ด ์น์๋ฒ๊ฐ ๊ตฌ๋๋๊ณ ์๋ค๋ ํ์ค์ถ๋ ฅ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ์น์๋ฒ๊ฐ ๋์์ ธ์๋ ์ปจํ ์ด๋์์ ๋์ ๋ก์ปฌ ํธ์คํธ์์ ์ปจํ ์ด๋์ ๋์์ ธ ์๋ ์ํ์น ์น์๋ฒ์ ์ ๊ทผํด๋ณด๋๋ก ํ์. ํ์ฌ ๋ก์ปฌ ํธ์คํธ์ IP ์ฃผ์์ 3333 ํฌํธ๋ฒํธ๋ก ์ฐ๊ฒฐํ์ผ๋ฏ๋ก HTTP ํ๋กํ ์ฝ์ ํ์ฉํด์ ์๋์ฒ๋ผ ์ ์ํด๋ณด๋ฉด ์ํ์น ์น์๋ฒ ํ๋ฉด์ด ๋ณด์ฌ์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค.(HTTPS๋ฅผ ํ์ฉํ๋ฉด ์ ๋จ์ ์ฃผ์)
๋ง์ฝ CentOS GUI๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ์ ํ ์คํธ๋ฅผ ํด๋ณด๊ณ ์ถ๋ค๋ฉด ์ฐ์ ์ปจํ ์ด๋์์ ๋ก์ปฌ ํธ์คํธ๋ก ๋น ์ ธ ๋์์ผ ํ๋ค. ์ด ๋, ์ปจํ ์ด๋๋ก ๋์ฌ ๋ ๋ฐ๋์ Ctrl + P + Q๋ฅผ ์ด์ฉํด ์ปจํ ์ด๋๊ฐ ์คํ ์ค์ธ ์ํ๋ฅผ ์ ์งํ๋ฉด์ ๋์์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ์ฒ๋ผ curl ๋ก ํ ์คํธ๋ฅผ ํด๋ณด๋ฉด ์ํ์น์น์๋ฒ์ HTML ์์ค์ฝ๋๊ฐ ์ ์ ๋ฐํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.(less ๋ช ๋ น์ด๋ฅผ ํ์ฉํด ์คํฌ๋กค๋ก ๋ณผ ์ ์๋ ๋ช ๋ น์ด๋ก ์ ์ด๋์๋ค)
$ curl http://127.0.0.1:3333 | less
์ด๋ ๊ฒ ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์์ผ ๋ก์ปฌ ํธ์คํธ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ ๊ฒ๋ ํ์ธํ์๋ค. ๊ฒฐ๊ตญ, ํฌํธํฌ์๋ฉ์ ํตํ ์ปจํ ์ด๋์ ๋ก์ปฌ ํธ์คํธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋์ํ ํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
4. ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ
์ ๋ชฉ์ฐจ์์๋ ์ํ์น ์น์๋ฒ๋ฅผ ๋์๋๋ ์ปจํ ์ด๋ 1๊ฐ๋ง ์์ฑ ํ ๋ก์ปฌ ํธ์คํธ์ ์ฐ๊ฒฐํด๋ณด์๋ค. ํ์ง๋ง ์ค์ ์๋น์ค๋ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ๊ณ ์ด์ํ๋ค. ์๋ฅผ ๋ค์ด, ์น์๋ฒ๋ฅผ ๋์๋๋ ์ปจํ ์ด๋ 1๊ฐ, DB ์๋ฒ๋ฅผ ๋์๋๋ ์ปจํ ์ด๋ 1๊ฐ, ๋จธ์ ๋ฌ๋์ ๋์๋๋ ์ปจํ ์๋ 1๊ฐ ๋ฑ๋ฑ..์ด๋ฐ ์๋น์ค๋ฅผ ์ปจํ ์ด๋ํ๋ ์๋น์ค๋ผ๊ณ ๋ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋์ ์ปจํ ์ด๋์ ์ฌ๋ฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ๋ณด๋ค ์ผํ ์ด๋ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๋ฉด์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ์ ๊ด๋ฆฌ, ์์ค ์ฝ๋ ๋ชจ๋ํ๊ฐ ์ฝ๊ฒ ๊ฐ๋ฅํด์ง๋ค. ์ด๋ฐ ๊ตฌ์กฐ๋ ํ ์ปจํ ์ด๋์๋ ํ๋์ ํ๋ก์ธ์ค(์ ํ๋ฆฌ์ผ์ด์ )๋ง ์คํํ๋ ๋์ปค์ ์ฒ ํ๊ณผ ๋ง๋ฟ์ ์๋ค. ๋ง์น ํ๋์ ๊ธฐ๋ฅ์ ์ต์ํ์ 1๊ฐ ๊ธฐ๋ฅ๋ง ๋ด๋ ์ฒ ํ์ ๊ฐ๊ณ ์๋ ๋ฆฌ๋ ์ค์ ๋น์ทํ๋ค.
์ด๋ฒ ๋ชฉ์ฐจ์์๋ ์ํ์น ์น์๋ฒ๋ฅผ ์ํ ์ปจํ ์ด๋, MySQL DB๋ฅผ ์ํ ์ปจํ ์ด๋ ์ด 2๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ ๋ก์ปฌ ํธ์คํธ, 2๊ฐ์ ์ปจํ ์ด๋๋ค ๊ฐ์ ์ฐ๊ฒฐ์ํค๋ ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ์. ์ฐ์ ์คํํด์ผ ํ๋ ๋ช ๋ น์ด 2๊ฐ ์ ์ฒด๋ฅผ ๋ณด๋ฉด์ ๋ช ๋ น์ด์ ์์ฑ๋ ์ต์ ํ๋ํ๋๋ฅผ ๋ฏ์ด๋ณด๋ฉฐ ํด์ํด๋ณด์.
$ docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
mysql:5.7
$ docker run -d \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress \
--link wordpressdb:mysql \
-p 80 \
wordpress
๊ทธ๋ฌ๋ฉด ์ด์ ์ ๋ช ๋ น์ด์ ์ต์ ์ ๋ํด ํ๋์ฉ ์์๋ณด์. ์ฃผ์ํ ์ ์ ๋ฐ๋์ ์์ ๋ช ๋ น์ด(MySQL ์๋ฒ ์ปจํ ์ด๋ ์์ฑ ๋ช ๋ ์ด)๋ถํฐ ์คํํด์ผ ํ๋ค. ์๋ํ๋ฉด ๋ ๋ฒ์งธ ๋ช ๋ น์ด(wordpress ์น์๋ฒ ์์ฑ ๋ช ๋ น์ด)์์ MySQL ์๋ฒ์ ์ฐ๋ํด์ผ ํ๋ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ต์ | ์๋ฏธ |
-d | - ์ปจํ
์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ์ง ์๋ ์
์ถ๋ ฅ์ด ์๋ ์ํ ์ฆ, detached ๋ชจ๋๋ก ์ปจํ
์ด๋๋ฅผ ์คํ. ์ด์ ์ ๋ฐฐ์ ๋ -it ์ต์
์ attached ์ํ๋ก ์ปจํ
์ด๋๋ฅผ ์คํํ ๊ฒ์. detached ๋ชจ๋๋ ์ปจํ
์ด๋๋ฅผ ๋ก์ปฌ ํธ์คํธ ์
์ฅ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ก์ผ๋ก ์คํ์ํค๋ ๊ฒ์(๋ฆฌ๋
์ค์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ก์ ๋ํด ๋ชจ๋ฅธ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐ) - detached ๋ชจ๋๋ ๋ฐ๋์ ์ปจํ ์ด๋ ์์์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ํ์ฌ์ผ ํ๋ฉฐ, ์ปจํ ์ด๋ ์ ์ฅ์์ ํฌ๊ทธ๋ผ์ด๋ ์ก์ผ๋ก ์คํ๋๋ ํ๋ก๊ทธ๋จ์ด ๋ง์ฝ ์๋ค๋ฉด ์ฆ์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋จ |
-e | - ์ปจํ
์ด๋ ๋ด๋ถ์ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ - ๋จ, ์ ์์์์๋ DB ๋น๋ฐ๋ฒํธ ๊ฐ์ ๋ฏผ๊ฐํ ๊ฐ์ ํ๊ฒฝ๋ณ์๋ก ์ค์ ํ์ง๋ง, ์ค์ ๋ก๋ ์ด๋ฌํ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ฑ๋กํด์ ์๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ์ถํ์ ๋ฐฐ์ธ ๋์ปค ์ค์ ๋ชจ๋์ secret ์ด๋ ์ฟ ๋ฒ๋คํฐ์ค์ secret ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฉํด์ผ ํจ |
--link | - ์ปจํ
์ด๋ A โ B๋ก ์ ๊ทผํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค ์์ง์ NAT๋ก ํ ๋น ๋ฐ์ ๋ด๋ถ IP ์ฃผ์(172.17.0.x๋ก ๋์ด ์๋ ์ฃผ์)๋ฅผ ํ์ฉํ ์ ์์. ํ์ง๋ง ์ด๋ฌํ ์ฃผ์๋ ์ปจํ
์ด๋๊ฐ ์์ฑ๋ ๋๋ง๋ค ๊ณ์ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ๋ฐ๋๋ IP ์ฃผ์๋ฅผ ์ค์ ํด์ฃผ๊ธฐ ๊น๋ค๋ก์ - ๊ทธ๋์ ๋ด๋ถ IP ์ฃผ์๋ฅผ ์ ํ์ ์์ด ์ปจํ ์ด๋์ IP ์ฃผ์๋ฅผ ์ผ์ข ์ ๋ณ๋ช (alias)์ผ๋ก ๋ถ์ฌ์ฃผ์ด ์ ๊ทผํ ์ ์๋๋ก ์ค์ ํจ. ์ ์์์์๋ wordpressdb ๋ผ๋ ์ปจํ ์ด๋์ ๋ด๋ถ IP ์ฃผ์๋ฅผ mysql ์ด๋ผ๋ ๋ณ๋ช ์ผ๋ก ์ค์ ํ์์. ๋ค์ ๋งํด, mysql ๋ณ์นญ์ ์ฌ์ฉํ๋ฉด wordpressdb ๋ด๋ถ IP๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ๋จ - ๋จ, --link ์ต์ ์ ๋ช ์ํด์ค ์ปจํ ์ด๋๊ฐ ์คํ๋๊ณ ์๋ ์ํ๊ฐ ์๋๋ผ๋ฉด ๋์ํ์ง ์์. ์ฆ ์ปจํ ์ด๋ ์คํ ์์์ ์์กด์ฑ๋ ์ ์ํด์ฃผ๋ ์ - ์ฐธ๊ณ ๋ก --link ์ต์ ์ deprecated๋ ์ต์ ์ด๋ฉฐ ์ถํ์ ์ญ์ ๋ ์์ ์. ๋ฐ๋ผ์ ์ถํ์ ๋ฐฐ์ธ ๋์ปค ๋ธ๋ฆฌ์ง(bridge) ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์(์ถํ์ ๋ฐฐ์ธ ์์ ) |
5. ๋์ปค ๋ณผ๋ฅจ
๋์ปค ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์ด๋ฏธ์ง๋ ์ฝ๊ธฐ ์ ์ฉ์ด ๋์ด์ ์ปจํ ์ด๋์ ๋ณ๊ฒฝ ์ฌํญ๋ง ๋ณ๋๋ก ์ ์ฅํด์ ๊ฐ ์ปจํ ์ด๋์ ์ ๋ณด๋ฅผ ๋ณด์กดํ๋ค๊ณ ๋ฐฐ์ ๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด MySQL ์ด๋ฏธ์ง๋ฅผ ํตํด ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค๊ณ ํด๋ณด์.
์์ฒ๋ผ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์ปจํ ์ด๋ ๋ ์ด์ด์ ์๋ณธ ์ด๋ฏธ์ง์์ ๋ณ๊ฒฝ๋ ํ์ผ์์คํ , ์๋น์ค๋ฅผ ์ด์ํ๋ฉด์ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ์ฌ๋๋ ๋ฐ์ดํฐ ๋ฑ์ด ์ ์ฌ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ์น๋ช ์ ์ธ ๋จ์ ์ด ์กด์ฌํ๋ค. ๋ง์ฝ์ ์์ ๊ฐ์ ๊ตฌ์กฐ์ ์ปจํ ์ด๋๋ฅผ ํ์ฐฝ ์ด์ํ๋ค๊ฐ ์ค์๋ก ํด๋น ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๊ฒ ๋๋ค๋ฉด ๊ทธ ๋ ์ปจํ ์ด๋์ ๋ด๊ธด ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ด ์ญ์ ๋๊ฒ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด ์ปจํ ์ด๋์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์์์ (persistent)์ผ๋ก ๋ณด๊ดํ๊ณ ์ ์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋ช๊ฐ์ง๊ฐ ์๋๋ฐ, ๊ทธ ์ค ๋ณผ๋ฅจ(volume)์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๋ ๋ณผ๋ฅจ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์๋ 3๊ฐ์ง๊ฐ ์กด์ฌํ๋๋ฐ, ๋ค์ ๋ชฉ์ฐจ๋ถํฐ ํ๋์ฉ ์์๊ฐ๋ณด๋๋ก ํ์.
5-1. ํธ์คํธ์ ์ปจํ ์ด๋๋ฅผ ์ง์ ์ฐ๊ฒฐํ์, ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์
ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋, ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ(๋๋ ํ์ผ)๋ฅผ ์ปจํ ์ด๋์ ๋๋ ํฐ๋ฆฌ์ ์ฐ๊ฒฐํด ๊ณต์ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฐ์ ์ด์ ๋ชฉ์ฐจ์์ ์ฌ์ฉํ ๋ช ๋ น์ด์ ๋น์ทํ๊ฒ MySQL DB ์ปจํ ์ด๋๋ฅผ ์์ฑํด๋ณด์. ์ฃผ๋ชฉํ ์ ์ MySQL DB ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด์์ ๋ณผ๋ฅจ(-v ์ต์ )์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
$ docker run -d \
--name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \
mysql:5.7
์ ๋ณผ๋ฅจ(-v ์ต์ ) ์์ ๋ช ์๋๋ ํ์์ ์๋์ ๊ฐ๋ค.
-v [HOST ๋๋ ํฐ๋ฆฌ]:[CONTAINER ๋๋ ํฐ๋ฆฌ]
์ด๋ ๊ฒ ๋ช ์ํด์ค์ผ๋ก์จ ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ์ ์ปจํ ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋ก ๊ณต์ ํ ์ ์๊ฒ ๋๋ค. ์ ๋ช ๋ น์ด์์ /var/lib/mysql ๋๋ ํฐ๋ฆฌ๋ ์ค์ MySQL ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ฉด MySQL์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ๋ก ์๊ฒจ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ผ ์ ๋ ๊ฒ ๋ณผ๋ฅจ์ ํตํด ์ฐ๊ฒฐํ์ ๊ฒฝ์ฐ, ํธ์คํธ์ /home/wordpress_db ๋๋ ํฐ๋ฆฌ์ ์ด๋ค ํ์ผ์ด ์๊ฒผ๋์ง ์๋์ฒ๋ผ ์ดํด๋ณด์.(์ฐธ๊ณ ๋ก, ๋ณผ๋ฅจ์ ํตํด ์ฐ๊ฒฐํ๊ธฐ ์ , ํธ์คํธ์ wordpress_db ๋ผ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ง ์์๋ ๋๋ค. ์๋ํ๋ฉด ๋ณผ๋ฅจ๋ก ์ฐ๊ฒฐํ ๋ ๋์ปค ์์ง์ด ์๋์ผ๋ก ์ด๋ฅผ ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ)
๊ทธ๋ฌ๋ฉด ์ ํ์ผ๋ค์ ์ถ์ฒ์ธ MySQL ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ํธ์คํธ์ wordpressdb ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ๋ค์ด ์ญ์ ๊ฐ ๋ ๊น? ์๋ ๋ช ๋ น์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ, ํธ์คํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ฌ์ ํ ํ์ผ์ด ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์๋ค.
$ docker stop wordbressdb_hostvolume
$ docker rm wordbressdb_hostvolume
$ ls /home/wordpressdb
์ด๊ฒ์ด ๋ฐ๋ก ์ปจํ ์ด๋์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๋ก์ ํธ์คํธ์ ์ปจํ ์ด๋๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ์ฐ๊ฒฐํด ํน์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ 'ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ '์ด๋ค. ์ฐธ๊ณ ๋ก ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ ์์์ ํด๋ณธ ์์์ฒ๋ผ ๋๋ ํฐ๋ฆฌ ๋จ์ ๋ฟ๋ง ์๋๋ผ ํน์ ํ์ผ ๋จ์๊น์ง๋ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ -v ์ต์ ์ ์ฐ์์ ์ผ๋ก ๋์ด์ ์ฌ๋ฌ๊ฐ์ ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ณต์ ํ ์ ์๋ค.
$ docker run -it \
--name file_share_container \
-v /home/host_share.txt:/container_share.txt \
-v /home/host_dir:/container_dir \
ubuntu:14.04
๊ทธ๋ฐ๋ฐ, MySQL ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ๋ณผ๋ฅจ์ ํ์ฉํ ์์๋ ๋ฐ์ดํฐ๊ฐ ํธ์คํธ์๋ ์๊ณ ์ปจํ ์ด๋์๋ง ์๋ ์์์ด๋ค. ์ฆ, ์ด ๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ [์ปจํ ์ด๋ โ ํธ์คํธ] ๋ก ๋ณต์ฌ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ง์ฝ์ ํธ์คํธ์๋ ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด -v ์ต์ ์ ํตํ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ ๋ง ๊ทธ๋๋ก ํธ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ปจํ ์ด๋๋ก ๋ง์ดํธํ๊ฒ ๋๋ค. ์ฆ, ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ค์ด ์๊ณ , ๋ง์ดํธ์ ์ฃผ์ฒด๊ฐ ๋ค์๊ณผ ๊ฐ๋ค. ์ฐธ๊ณ ๋ก ์ด๋ ๊ฒ ํธ์คํธ ๋ณผ๋ฅจ์ ํ์ฉํด ๊ณต์ ๋๋ ํธ์คํธ์ ์ปจํ ์ด๋์ ๋ ๋๋ ํ ๋ฆฌ๋ ๋๊ธฐํ๋๋ ๊ฒ์ด ์๋๋ผ ์์ ํ ๊ฐ์ ๋๋ ํฐ๋ฆฌ์ด๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ฑ ์์์ ์ด ๋ฌธ์ฅ์ด ์ ์ดํด๊ฐ ์๋์ด์ ์ฑ ์ ์๋ถ๊ป ์ง์ ์ง๋ฌธ๋๋ ค ๋ต๋ณ์ ๋ฐ์๋๋ฐ, ์ฌ๊ธฐ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค
5-2. ์ด๋ฏธ ๋ณผ๋ฅจ์ผ๋ก ์ฐ๊ฒฐ๋ ์ปจํ ์ด๋๋ก๋ถํฐ ๋ณผ๋ฅจํ์, ๋ณผ๋ฅจ ์ปจํ ์ด๋
๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ด๋ฏธ -v ์ต์ ์ผ๋ก ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋ ์ฆ, [๋ชฉ์ฐจ 5-1]์์ -v ์ต์ ์ผ๋ก ํธ์คํธ์ ์ฐ๊ฒฐ๋ ์ปจํ ์ด๋๋ฅผ ์ผ์ข ์ ๋ถ๋ชจ๋ก ํ์ฌ ๋ ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์์ฑ๋, ๋ง์น ์์(Child) ๊ฐ์ ์ปจํ ์ด๋๋ ๋ถ๋ชจ๊ฐ ์ด๋ฏธ ๋ณผ๋ฅจ์ผ๋ก ํธ์คํธ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์์ ์ปจํ ์ด๋ ๋ํ ๋ณผ๋ฅจ์ผ๋ก ํธ์คํธ์ ์ด๋ฏธ ์ฐ๊ฒฐ๋์ด ์๋ ์ํ์ด๋ค. ๊ทธ๋์ ๋ช ๋ น์ด๋ --volumes-from ์ด๋ผ๋ 'from' ์ ์น์ฌ๊ฐ ๋ค์ด๊ฐ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ์ด๋ ์ง์ ๋ณผ๋ฅจ์ ๊ณต์ ํ๋ ๊ฒ์ด ์๋๋ผ ์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ์ด๋ฏธ -v ์ต์ ์ด ์ ์ฉ๋ ์ปจํ ์ด๋๋ฅผ ํตํด ๊ณต์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ณผ๋ฅจ ๊ณต์ ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด๋ฐ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๊ฐ ๋์ผํ ์ปจํ ์ด๋์ --volumes-from ์ต์ ์ ์ฌ์ฉํจ์ผ๋ก์จ ๋ณผ๋ฅจ์ ๊ณต์ ํด ์ฌ์ฉํ ์ ์๋ค. ๊ฒฐ๊ตญ, ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ ์ผ๋ก ๊ณต์ ๋ฐ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฅผ ๋์ํํ๋ฉด ์๋์ ๊ฐ๋ค.
5-3. ๋์ปค ์์ฒด์์ ์ ๊ณตํ๋ ๋ณผ๋ฅจ ๊ธฐ๋ฅ, docker volume ๋ช ๋ น์ด
๋ณผ๋ฅจ์ ํ์ฉํ๋ ์ธ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋์ปค ์์ฒด์์ ์ ๊ณตํ๋ ๋ณผ๋ฅจ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๊ฒ์ด๋ค. docker volume ๋ช ๋ น์ด๋ก ๋ณผ๋ฅจ์ ๋ค๋ฃฐ ์ ์๋ค. ๋จผ์ ๋ณผ๋ฅจ์ ํ๋ฒ ์์ฑํด๋ณด๊ณ ์์ฑ๋ ๋ณผ๋ฅจ๋ค์ ์ถ๋ ฅํด๋ณด์.
$ docker create volume --name my_volume
$ docker volume ls
2๊ฐ์ ํด์ฌ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ ๋ค๋ฅธ ๋ถ๋ฅจ๋ค์ด ์กด์ฌํ๋๋ฐ, ์ด๋ ์ด์ ์ ํ์๊ฐ ์ค์ตํ๋ฉด์ ์์ฑํ๋ ๋ณผ๋ฅจ์ด๋ ์ ๊ฒฝ์ฐ์ง๋ง์. ํด์ฌ๊ฐ์ผ๋ก ๋์ด ์๋ ๋ณผ๋ฅจ์ด๋ฆ์ ์๋ฏธ๋ ์๋์์ ์๊ฒ๋๋ค. ์ด์จ๊ฑด my_volume ์ด๋ผ๋ ์๋ก์ด ๋ณผ๋ฅจ์ด ์์ฑ๋์๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํด๋ณด์. ์ฐ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ปจํ ์ด๋๋ฅผ ๋ง๋ ํ, ๋ด๋ถ๋ก ๋ค์ด๊ฐ ํน์ dummy ํ์ผ์ ์์ฑ์์ผ๋ณด์.
$ docker run -it --name volume_container_1 \
-v myvolume:/testdir/ \
ubuntu:14.04
$ echo "Hello zedd" >> /testdir/zedd.txt
์ฃผ์ํ ์ ์ ์ฌ๊ธฐ์๋ -v ์ต์ ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ฐฉ๋ฒ์์๋ -v ์ต์ ์ ์ฌ์ฉํ์ง๋ง, ๋ช ์ํ๋ ์ธ์์ ์๋ฏธ๋ ๊ทธ ๋์ ๋ค๋ฅด๋ค.
# ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ์
-v [HOST ๋๋ ํฐ๋ฆฌ]:[CONTAINER ๋๋ ํฐ๋ฆฌ]
# ๋ณผ๋ฅจ ํ์ฉ ์
-v [VOLUME ์ด๋ฆ]:[CONTAINER ๋๋ ํฐ๋ฆฌ]
์ฐธ๊ณ ๋ก -v ์ต์ ์ ์ค ๋ ๋ช ์ํ๋ ํธ์คํธ, ์ปจํ ์ด๋ ๋๋ ํฐ๋ฆฌ ๋ชจ๋ ์กด์ฌํ์ง ์๋๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ฉด์ ์๋์ผ๋ก ์์ฑํด์ค๋ค. ์ด์จ๊ฑด ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด /testdir/zedd.txt ๋ผ๋ ํ์ผ์ด ์๊ธด๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ ํธ์คํธ๋ก ๋์๋ณด์. ์ด ๋ volume_container1 ์ปจํ ์ด๋๋ก๋ถํฐ ๋น ์ ธ๋์ฌ ๋ ํด๋น ์ปจํ ์ด๋๋ฅผ ์คํ์ํจ ์ฑ๋ก ๋์ค๋ ์ค์ง์ํค๊ณ ๋์ค๋ ์๊ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ myvolume์ด๋ผ๋ ๋ณผ๋ฅจ์ ํ์ฉํ๋ ๋ ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ์์ฑํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ด๋ถ๋ก ๋ค์ด๊ฐ zedd.txt ๋ผ๋ ํ์ผ์ด ์๋์ง ์ดํด๋ณด์.
$ docker run -it --name volume_container2 \
-v myvolume:/testdir2/ \
ubuntu:14.04
$ cat < /testdir2/zedd.txt
์ด๋ ๊ฒ ๋ณผ๋ฅจ์ ํ์ฉํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋์ ๊ณต์ ํ์ฌ ํ์ฉํ ์ ์๊ฒ ๋๋ค. ์ฐธ๊ณ ๋ก ๋ณผ๋ฅจ์ ๋๋ ํฐ๋ฆฌ ํ๋์ ์์ํ๋ ๋จ์๋ก์ ๋์ปค ์์ง์์ ๊ด๋ฆฌํ๊ฒ ๋๋ค. ๋ง์ฝ ๋ณผ๋ฅจ์ ํ์ฉํ ๋ ํน์ ํ์ผ(์๋ฅผ ๋ค์ด, txt ํ์ผ ํ์ฅ์๋ฅผ ๋ฃ๋๋ค๊ณ ํด๋)์ ๋ช ์ํ๋ค๊ณ ํด๋ ๋๋ ํฐ๋ฆฌ๋ก ๊ฐ์ฃผํ๊ฒ ๋๋ค.(์์ฌ์ด๊ฐ์ ์ง์ ํด๋ด..)
๊ทธ๋ฌ๋ฉด ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ์ ๋ณผ๋ฅจ์ ํ์ฉํ๋ ๊ฒ ๊ฐ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น? ๋ฐ๋ก ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ์ด๋์ ์ ์ฅ๋๋์ง ์ ํ์๊ฐ ์๋์๋๋ ๊ฒ์ด๋ค. ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ -v ์ต์ ์ ์ฌ์ฉํ ๋ ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ๋ช ์ํ๋ค. ๋ฐ๋ผ์ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ ๊ณต์ ๋๋ ๋ฐ์ดํฐ๊ฐ ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ์์ ์ด๋์์ ์ ์ฅ๋๊ณ ์๋์ง ๋ฐ๋ก ์ ์ ์๋ค. ํ์ง๋ง ๋ณผ๋ฅจ์ ํ์ฉํ ๋๋ ๋จ์ง ๋ณผ๋ฅจ๊ณผ ์ปจํ ์ด๋ ๋๋ ํฐ๋ฆฌ๋ง ๋ช ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํ์ผ์ด ํธ์คํธ์์ ์ค์ ๋ก ์ด๋์ ์ ์ฅ๋๋์ง ์ ํ์๊ฐ ์๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ณผ๋ฅจ์ ํ์ฉํ ๋ ๋ฐ์ดํฐ ํ์ผ์ด ์ค์ ๋ก ํธ์คํธ์ ์ด๋์ ์ ์ฅ๋๋์ง ์ ์ ์๋๊ฑธ๊น? ์๋๋ค. docker inspect ๊ด๋ จ ๋ช ๋ น์ด๋ฅผ ํ์ฉํด์ ์ฌ์ฉํ๋ ๋ณผ๋ฅจ์ ๋ช ์์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณผ ์ ์๋ค.
$ docker inspect --type volume myvolume
์ ์ถ๋ ฅํ๋ฉด์์ Driver๋ ๋ณผ๋ฅจ์ด ์ฐ๋ ํ๋ฌ๊ทธ์ธ ๋๋ผ์ด๋ฒ๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ ํ๋ฌ๊ทธ์ธ ๋๋ผ์ด๋ธ๋, ์ฌ๋ฌ ์ข ๋ฅ์ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋๋ฅผ ์ธ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค. ํ์ฌ ๋ก์ปฌ ํธ์คํธ ์คํ ๋ฆฌ์ง๋ฅผ ์ฐ๊ธฐ ๋๋ฌธ์ local๋ก ๋ช ์๋ ๋ฏ ํ๋ค. ๋ค์์ Label์ด๋ค. Label์ ๋ณผ๋ฅจ์ ๊ตฌ๋ถํ๋ ์ผ์ข ์ ํ๊ธฐ๋ฅผ ์๋ฏธํ๋ฉฐ Mountpoint๊ฐ ๋ฐ๋ก ํด๋น ๋ณผ๋ฅจ์ด ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ํธ์คํธ์ ์ด๋์ ์ ์ฅํ๋์ง๋ฅผ ์๋ฏธํ๋ค. ์ค์ ๋ก ํธ์คํธ์์ ํด๋น ๊ฒฝ๋ก๋ก ๊ฐ๋ณด๋ฉด zedd.txt ํ์ผ์ด ์๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณผ๋ฅจ์ ํ์ฉํ ๋ ๊ตณ์ด docker volume create ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ๋ณ๋๋ก ๋ช ์ํด์ฃผ์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ณผ๋ฅจ์ ์์ฑํด์ค๋ค. ๋ค๋ง, ๊ทธ๋ ๊ฒ ์์ฑํด์ค ๋ณผ๋ฅจ์ ์ด๋ฆ์ 16์ง์ ํด์ฌ๊ฐ์ผ๋ก ์์ฑ๋๋ค. ํด๋น ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ณผ๋ฅจ์ด ๋ฌด์์ธ์ง ๋ณด๋ ค๋ฉด ์ปจํ ์ด๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด์ฃผ๋ inspect ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ํ ๋์ค๋ ์ถ๋ ฅ์์ Source ๋ถ๋ถ์ ํ์ธํ๋ฉด ๋๋ค.
$ docker run -it --name auto_volume \
-v /autodir/ \
ubuntu:14.04
ํธ์คํธ๋ก ๋์จ ๋ค
$ docker container inspect auto_volume | grep "Source"
์ด๋ ๊ฒ ์ฌ๋ฌ๊ฐ์ง ๋ณผ๋ฅจ์ ์์ฑํ๊ณ ํ์ฉํ ๋ค ๋ณผ๋ฅจ์ด ์ ์ฉ๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ค๊ณ ํด๋ ๊ทธ ๋ณผ๋ฅจ์ ์๋์ผ๋ก ์ญ์ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๋์ด์ ์ฌ์ฉํ์ง ์๋ ๋ณผ๋ฅจ์ ์๋ ๋ช ๋ น์ด๋ก ์ญ์ ํด์ค ์ ์๋ค.
$ docker volume prune
์ฐธ๊ณ ๋ก ๋์ปค ๋ณผ๋ฅจ์ ํ์ฉํ ๋ -v ์ต์ ์ด ์๋ --mount ์ต์ ์ ์ฌ์ฉํ ์๋ ์๋๋ฐ, mount ์ต์ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ช ์ํ๋ ๋ฐฉ์์ด ์ฝ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ง์น ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํจ์ ์ธ์์ฒ๋ผ ์ ๋ฌํด์ฃผ์ด์ผ ํ๋๋ฐ, type์๋ ๋ง์ดํธํ ์ข ๋ฅ ์ฆ, ์ฌ๊ธฐ์๋ '๋ณผ๋ฅจ'์ ๋ช ์ํ๊ณ source์๋ ํ์ฉํ ๋ณผ๋ฅจ ์ด๋ฆ, target์ ์ปจํ ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ช ์ํด์ค๋ค. mount ์ต์ ์ ํ์ฉํ ์์๋ ์๋์ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ mount ์ต์ ์ ๊ฐ์ง๊ณ ํธ์คํธ ๋ณผ๋ฅจ ๊ณต์ ๋ฅผ ํ๋ ค๊ณ ํ๋ค๋ฉด type์ bind ๋ฅผ ๋ช ์ํด์ฃผ๋ฉด ๋๋ค.
$ docker run -it --name mount_container \
--mount type=volume,source=mount_volume,target=/mountdir/ \
ubuntu:14.04
$ docker run -it --name bind_container \
--mount type=bind,source=/host/dir/,taget=/container/dir/ \
ubuntu:14.04
(* ์ ๋ช ๋ น์ด์์ ์ฝค๋ง ๋ค์ ๊ณต๋ฐฑ ์์ด์ ์๋จ์ ์ฃผ์!)
์ง๊ธ๊น์ง ์ปจํ ์ด๋๊ฐ ์๋ ๋ค๋ฅธ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ทธ ์ปจํ ์ด๋๋ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฉด์ ๋์ํ๋๋ก ํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค. ์ด๋ฌํ ์ค๊ณ๋ฅผ Stateless ํ๋ค๊ณ ๋งํ๋ค. ์ฆ, ์ปจํ ์ด๋ ์์ฒด๋ ์ํ(State)๊ฐ ์๊ณ ๊ทธ ์ํ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ์ดํฐ๋ ์ธ๋ถ๋ก๋ถํฐ ์ ๊ณต๋ฐ๋๋ค๋ ์๋ฏธ์ด๋ค. ์ด๋ฌํ Stateless ์ค๊ณ๋ ๋์ปค๋ฅผ ์ฌ์ฉํ ๋ ๋งค์ฐ ๊ถ๊ณ ๋๋ ๋ฐฉ์์ด๋ค. ์ด์ ๋ฐ๋๋ก ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๊ฒฝ์ฐ, ์ํ๊ฐ ์๋ค๊ณ ํ์ฌ Stateful ํ๋ค๊ณ ํ๋ ์ ๋ ์์๋์.
6. ๋์ปค ๋คํธ์ํฌ
๋ค์ ๋ชฉ์ฐจ์์ ์์๋ณผ ๋ด์ฉ์ ๋์ปค ๋คํธ์ํฌ์ด๋ค. ๋ชฉ์ฐจ [3.์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ๊ธฐ] ๋ฅผ ์์์ ๋ฐฐ์ฐ๋ฉด์ ํฌํธ ํฌ์๋ฉ(-p ์ต์ )์ ํตํด ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ์ ํต์ ์ ๊ฐ๋ฅ์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ [4.์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ] ๋ชฉ์ฐจ์์ MySQL ์ปจํ ์ด๋์ ์๋ํ๋ ์ค ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ ๋ --link ์ต์ ์ ์ฌ์ฉํ์๋ค. ์ฌ๊ธฐ์์๋ ํฌํธ ํฌ์๋ฉ์ ์ด์ฉํ์ง ์๊ณ , ๋ --link ์ต์ ์ ์ฌ์ฉํ์ง ์๊ณ ๋์ปค ๋คํธ์ํธ ๊ธฐ๋ฅ์ ํ์ฉํด์ ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์ํค๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ์. ๊ทธ ์ฒซ ์์๋ก ๋์ปค ๋คํธ์ํฌ์ ๊ตฌ์กฐ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์๋ณด๋๋ก ํ์.
6-1. ๋์ปค ๋คํธ์ํฌ ๊ตฌ์กฐ ํํค์น๊ธฐ
๋์ปค๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋๋ง๋ค ๋ด๋ถ IP๋ฅผ ์์ฐจ์ ์ผ๋ก ํ ๋นํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด IP๋ ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ ๋๋ง๋ค ๋ณ๊ฒฝ๋๋ค๊ณ ํ๋ค. ์ด ๋ด๋ถ IP๋ '์ธ๋ถ'์ ํด๋นํ๋ ํธ์คํธ(VM ๋จธ์ )๊ณผ ํต์ ์ ํ ํ์๊ฐ ์๋ค. ๊ทธ๋์ ์ปจํ ์ด๋๋ ์์ํ ๋๋ง๋ค ํธ์คํธ์ 'veth' ๋ก ์์ํ๋ ๊ฐ์(v=virtual) ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋๋ฐ, ์ด๋ฅผ ํตํด ์ธ๋ถ(ํธ์คํธ)์ ํต์ ํ ์ ์๊ฒ ๋์์ค๋ค.
์๋ ๋ช ๋ น์ด๋ก ํธ์คํธ์์ ๋์ปค ์ปจํ ์ด๋๋ฅผ ์์ฑํ ํ, ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ถ๋ ฅํด๋ณด์.(๋จ, ๋ฐ๋์ ์์ฑํ ๋์ปค ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ ์ํ์ฌ์ผ๋ง ํธ์คํธ์ 'veth'๋ก ์์ํ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์๊ธด๋ค)
$ docker run -i -t -d --name container_test ubuntu:14.04
$ ifconfig
์ ์ถ๋ ฅํ๋ฉด์ ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ด๋ค. ์ด๋๋ท์ ์๋ฏธํ๋ enp0s3๋ผ๊ณ (CentOS์์์ eth0๊ณผ ํ๊ธฐ๋ฒ๋ง ๋ฌ๋ผ์ง. ์์ธํ ๊ฒ์ ์ฌ๊ธฐ์ ํ์ธ) ์๋๋ฐ, ์ด๊ฒ์ด ๊ณต์ธ IP ๋๋ ๋ด๋ถ IP๊ฐ ํ ๋น๋์ด ์ค์ ๋ก ์ธ๋ถ(ํธ์คํธ์ ์ ์ฅ์์ ์ธ๋ถ๋๊น ์ปจํ ์ด๋ ๋ด๋ถ IP๊ฐ ๋ ์ ์๊ฒ ์)์ ํต์ ํ ์ ์๋ ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ด๋ค. ๋ฐ๋ฉด์ veth๋ก ์์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ณด๋ฉด ์ด๋๋ท๊ณผ ์ฐ๊ฒฐ๋์ด ์์์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก ๋ณผ ํ์๊ฐ ์๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์๋๋ฐ, docker0 ๋ผ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ๋คํธ์ํฌ ๋ธ๋ฆฌ์ง์ ๋ํด์๋ ์๋์์ ์์ธํ ์์๋ณธ๋ค. ์ด์จ๊ฑด ์ด docker0๊ฐ ํ๋ ์ญํ ์ veth๋ก ์์ํ๋ ์ธํฐํ์ด์ค์ ๋ฐ์ธ๋ฉ๋์ด ํธ์คํธ์ enp0s3 ์ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ค. enp0s3 ์ veth๋ก ์์ํ๋ ์ธํฐํ์ด์ค, docker0 ๊ฐ์ ๊ด๊ณ๋ฅผ ๋์ํ ํ๋ฉด ์๋์ ๊ฐ๋ค.
์ค์ ๋ก veth๋ก ์์ํ๋ ์ปจํ ์ด๋๊ฐ docker0 ๋ธ๋ฆฌ์ง์ ๋ฐ์ธ๋ฉ ๋์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ฆฌ๋ ์ค์ ๋ธ๋ฆฌ์ง ์ค์ ๊ด๋ จ ๋ช ๋ น์ด์ธ brctl๋ฅผ ์ฌ์ฉํด์ ํ์ธํ ์๋ ์๋ค.
$ sudo apt-get install brctl-utils
$ brctl show docker0
interfaces ํญ๋ชฉ์ ์๋ ๊ฐ์ด ํด๋น ๋ธ๋ฆฌ์ง์ ๋ฐ์ธ๋ฉ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋๋ฐ, ์ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด docker0 ๋ผ๋ ๋ธ๋ฆฌ์ง๊ฐ veth๋ก ์์ํ๋ ์ด๋ฆ์ ์ธํฐํ์ด์ค์ ๋ฐ์ธ๋ฉ ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ๋์ปค ๋คํธ์ํฌ์ ๊ธฐ๋ฅ์ ํ์ฉํด์ ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์์ผ๋ณด๋๋ก ํ์. ์ฌ๊ธฐ์ ๋คํธ์ํฌ์ ๋๋ผ์ด๋ฒ๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ ์๊ฐ ์๋๋ฐ, ๋ํ์ ์ธ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ก๋ ๋ธ๋ฆฌ์ง, ํธ์คํธ, ๋ ผ(none), ์ปจํ ์ด๋, ์ค๋ฒ๋ ์ด๊ฐ ์์ผ๋ฉฐ ์๋ํํฐ ๋๋ผ์ด๋ฒ๋ก๋ weave, flannel, openvswitch ๋ฑ์ด ์๋ค๊ณ ํ๋ค. ํด๋น ์ฑ ์์๋ ๋์ปค ์์ฒด๋ง์ผ๋ก ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ธ๋ฆฌ์ง, ํธ์คํธ, ๋ ผ, ์ปจํ ์ด๋์ ๋ํด ๋ฐฐ์ด๋ค. ์์์ ๋ฐฐ์ด docker0๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ์ ํด๋นํ๋ฉฐ ๊ธฐ๋ณธ์ ์ธ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ก ์ค์ ๋๋ค. ๋์ปค์์ ์ฌ์ฉํ ์ ์๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๊ฐ ๋ฌด์์ด ์๋์ง ์ถ๋ ฅํด๋ณด์.
6-2. ๋๋ง์ ๋ธ๋ฆฌ์ง๋ฅผ ์์ฑํด ์ฐ๊ฒฐํด๋ณด์. ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ
๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ ์ฌ์ฉ์๊ฐ docker0 ์ฒ๋ผ ๋ด๊ฐ ์ง์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ์์ฑํด ๊ฐ ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๋ ๋คํธ์ํฌ ๊ตฌ์กฐ์ด๋ค. ์ด๋ ๊ฒ ์์ฑํ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ํ์ฉํ๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๋ฉด ์ด ์ปจํ ์ด๋๋ค ๊ฐ์ ํต์ ์ด ๊ฐ๋ฅํด์ง๋ค. ์ฐ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.(๋จ, ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ ์์ฑ ์ ์๋ธ๋ท, IP ๋ฒ์, ๊ฒ์ดํธ์จ์ด๋ ๋ง๋๋ก ์ค์ ์ด ๊ฐ๋ฅํ๋ค)
$ docker network create --driver bridge [BRIDGE NAME]
$ docker network create --driver bridge zedd_bridge
์ด์ --net ์ต์ ์ผ๋ก ๋ด๊ฐ ๋ง๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ฅผ ์๋์ฒ๋ผ ์์ฑํด๋ณด์.
$ docker run -it --name zedd_bridge_container \
--net zedd_bridge \
ubuntu:14.04
$ ifconfig
๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์์ ํ ๊ฐ์ง ๋ ์์๋ณผ ๊ฒ์ด ์๋ค. ๋ฐ๋ก --net-alias ์ต์ ์ ํ์ฉํ๋ ๊ฒ์ด๋ค. ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์ ํด๋น ์ต์ ์ ํจ๊ป ์ฌ์ฉํ๋ฉด alias๋ก ๋ณ๋ช ์ ์ง์ด์ค ํธ์คํธ ์ด๋ฆ์ผ๋ก ์ปจํ ์ด๋ ์ฌ๋ฌ๊ฐ์ ํต์ ํ ์๊ฐ ์๋ค. ์ฐ์ alias_bridge ๋ผ๋ ์ด๋ฆ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ๋ณ๋๋ก ํ๋ ๋ ์์ฑํด๋ณด์.
$ docker network create --driver bridge alias_bridge
์ดํ, --net-alias ์ต์ ๊ณผ alias_bridge ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ปจํ ์ด๋ 3๊ฐ๋ฅผ ์์ฑํด๋ณด์. ์ฌ๊ธฐ์๋ alias ๊ฐ์ผ๋ก zedd ๋ผ๋ ํธ์คํธ ์ด๋ฆ์ผ๋ก ๋ช ์ํ์๋ค.
$ docker run -it -d --name alias_container_v1 \
--net alias_bridge \
--net-alias zedd \
ubuntu:14.04
$ docker run -it -d --name alias_container_v2 \
--net alias_bridge \
--net-alias zedd \
ubuntu:14.04
$ docker run -it -d --name alias_container_v3 \
--net alias_bridge \
--net-alias zedd \
ubuntu:14.04
์ ๋ช ๋ น์ด๋ก ๋ง๋ 3๊ฐ์ ์ปจํ ์ด๋ ๊ฐ๊ฐ์ ์๋ก ๋ค๋ฅธ IP์ฃผ์(๋์๋ฆฌ๋ง ๊ฐ์ด ๋ฐ๋ ์ฑ)๊ฐ ํ ๋น๋ ๊ฒ์ ์ ์ ์๋ค. ์ง์ ๋ณด๋ ค๋ฉด docker container inspect [CONTAINER] ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค, alias_bridge ์ด๋ฆ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ฅผ ๋ ํ๋ ์์ฑํ ๋ค, ๋ด๋ถ๋ก ๋ค์ด๊ฐ ์ 3๊ฐ์ ์ปจํ ์ด๋ ๊ฐ๊ฐ์ ๋ํ์ฌ ์์ ๋ฐ๋ ์ปดํจํฐ์ ๋์ ์ฌ๋ถ ๋ฐ ๋คํธ์ํฌ ์ํ๋ฅผ ํ์ ํ ์ ์๋ ping ์์ฒญ์ ์ ์กํด๋ณด์.
$ docker run -it --name test_alias_container \
--net alias_bridge \
ubuntu:14.04
$ ping -c 1 zedd
$ ping -c 1 zedd
$ ping -c 1 zedd
์์์ ์ฌ์ฉํ ping ๋ช ๋ น์ด๋ ํจํท์ 1๋ฒ(c=count) zedd ๋ผ๋ ๋๋ฉ์ธ ๋ค์์ ๊ฐ๋ IP ์ฃผ์๋ฅผ ๊ฐ๋ ์๋ฒ์ ๋ณด๋ด๋ณด๋ ๊ฒ์ด๋ค.
3๋ฒ์ ํ ์คํธ ํ์ ๋, 1๋ฒ์ v2์ ์ปจํ ์ด๋์, 2๋ฒ์ v1์ ์ปจํ ์ด๋์ ์์ฒญ์ ๋ณด๋๋ค. v3์ ์ปจํ ์ด๋๋ ํ๋ฅ ์ ์ผ๋ก ์ ํ๋ฐ์ง ์์ ๊ฒ์ด๋ค. zedd๋ผ๋ ํธ์คํธ ์ด๋ฆ์ ์ด 3๊ฐ์ ์ปจํ ์ด๋ IP ์ฃผ์๊ฐ ์ฐ๊ฒฐ๋์ด ์๋๋ฐ, ์ด ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง๋ ํน์ ์ฐ์ ์์ ์์ด ๋์๊ฐ๋ฉฐ ํ ๋น๋๋ ๋ผ์ด๋ ๋ก๋น ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ๋๋ค๊ณ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด zedd ๋ผ๋ ์ด๋ฆ์ผ๋ก alias๋ฅผ ์์ผฐ๋๋ฐ ๋์ฒด ์ด๋ป๊ฒ ์์์ ๊ทธ IP ์ฃผ์ 3๊ฐ๋ฅผ ์ฐพ์์ฌ ์ ์์๋ ๊ฑธ๊น? ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ๋์ปค DNS ์๋ฒ๊ฐ ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋์ปค DNS๋ฅผ ์ด์ฉํ๋ ๋ ๋ค๋ฅธ ์ฌ๋ก๋ [๋ชฉ์ฐจ 4.์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถํ๊ธฐ]์์ ์์๋ณธ --link ์ต์ ์ ์ฌ์ฉํ๋ฉด alias๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ด ์๋ค. ๋จ, --net-alias ์ต์ ๊ณผ --link ์ต์ ๊ฐ์ ์ฐจ์ด๋ผ๊ณ ํ๋ค๋ฉด ์ด๋ค ๋์ปค DNS๋ฅผ ์ฌ์ฉํ๋๋์ ์ฐจ์ด๊ฐ ์๋ค. --link ์ต์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์ ์ปจํ ์ด๋ DNS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ , --net-alias๋ ์ฌ์ฉ์๊ฐ ๋ง๋ค์๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ(์ ์์์์๋ alias_bridge๊ฐ ๋๊ฒ ์)์ ์ปจํ ์ด๋ DNS๋ฅผ ์ฌ์ฉํ๋ค.
--net-alias์์ ์ฌ์ฉํ๋ ๋์ปค DNS ์๋ฒ์ IP ์ฃผ์๋ $127.0.0.11$ ์ด๋ค. ๊ทธ๋ผ ์ด์ ๊ด๊ณ๋ฅผ ์ ๋ฆฌํด๋ณด์. ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ, --net-alias ์ต์ , ๋์ปค DNS ์๋ฒ ๊ฐ์ ๊ด๊ณ๋ ์๋์ ๊ฐ๋ค.
๋ง์ฝ ๋์ปค ๋ด์ฅ DNS ์๋ฒ ๋ด์ ์๋ ํธ์คํธ ๋ค์๊ณผ ๋งคํ๋ IP ์ฃผ์๋ฅผ ๋์ผ๋ก ์ง์ ํ์ธํด๋ณด๊ณ ์ถ๋ค๋ฉด dig ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ํ์ธํ ์ ์๋ค. dig ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด dnsutils ํจํค์ง๋ฅผ ์ค์นํ ํ, ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ํ์ธํด๋ณด์.
$ apt-get update; apt-get install dnstutils
$ dig zedd
6-3. ํธ์คํธ์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ทธ๋๋ก ๊ฐ๋ค ์ฐ์. ํธ์คํธ ๋คํธ์ํฌ
์ด๋ฒ์ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ํธ์คํธ๋ก ์ค์ ํ๋ ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ํ์ฉํด๋ณด์. ํธ์คํธ ๋คํธ์ํฌ๋, ํธ์คํธ์ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ปจํ ์ด๋์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ๋๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ ๋์ฒ๋ผ docker network create ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ณ๋๋ก ์์ฑํ์ง ์๊ณ --net ์ต์ ์ 'host' ๋ผ๋ ๋ฌธ์๋ฅผ ์ ๋ ฅํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
$ docker run --it --name zedd_host_container \
--net host \
ubuntu:14.04
์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ํ์ฉํ๋ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋๋ฐ, ํน์ดํ๊ฒ ์ปจํ ์ด๋์ ํธ์คํธ ์ด๋ฆ์ด ํธ์คํธ์ ํธ์คํธ์ด๋ฆ๊ณผ ๋์ผํ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ ๋ ๊ฐ๋จํ๋ค. ์ปจํ ์ด๋๊ฐ ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ๊ทธ๋๋ก ๊ฐ๋ค ์ฌ์ฉํ๊ธฐ ๋๋ฌธ!
์ด๋ ๊ฒ ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ปจํ ์ด๋ ์์ฑ ์ ํฌํธํฌ์๋ฉ(-p ์ต์ )์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ ์ ์๋ค. ์ ๋ชฉ์ฐจ์์ ํฌํธ ํฌ์๋ฉ์ ๋ฐฐ์ธ๋ ํด๋ณด์๋ ์ค์ต์ ๋๊ฐ์ด ์ํํด๋ณด์.
์ฐ์ , ์๋ ๋ช ๋ น์ด๋ก ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ํ์ฉํ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ํ, ํด๋น ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ ์ํ์น ์น์๋ฒ๋ฅผ ์ค์นํ ๋ค ์น์๋ฒ๋ฅผ ์คํ์์ผ๋ณด์.
$ docker run -it --name host_network_container \
--net host \
ubuntu:14.04
$ docker run -it --name mywebserver -p 127.0.0.1:3333:80
$ apt-get update
$ apt-get install apache2 -y
$ echo "ServerName localhost" >> /etc/apache2/apache2.conf
$ service apache2 start
๊ทธ๋ฆฌ๊ณ Ctrl+P,Q๋ฅผ ๋๋ฌ ์ํ์น ์น์๋ฒ๊ฐ ๋์๊ฐ๊ณ ์๋ ์ปจํ ์ด๋๋ฅผ ์คํ์์ผ๋ ์ํ๋ก ๋น ์ ธ๋์ ํธ์คํธ์์ ์ปจํ ์ด๋๋ก curl ํ ์คํธ๋ฅผ ๋ ๋ ค๋ณด์. ๊ทธ๋ฌ๋ฉด HTML ์ฝ๋๊ฐ response๋ก ๋ฐํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.(์๋ ๋ช ๋ น์ด์ 10.0.0.2.15๋ ํธ์คํธ์ IP ์ฃผ์์ด๋ฉฐ 80ํฌํธ๋ฒํธ๋ ์ํ์น ์น์๋ฒ์ ์ ํด์ง ํฌํธ ๋ฒํธ์ด๋ค)
$ curl http://10.0.0.2.15:80
6-4. ์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์ ๋จ์ ์ํค๊ธฐ, ๋ ผ(none) ๋คํธ์ํฌ
๋ ผ ๋คํธ์ํฌ๋ ๋ง ๊ทธ๋๋ก ์๋ฌด๋ฐ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ ์์ฑํ ์ปจํ ์ด๋์ ์ธ๋ถ๊ฐ์ ํต์ ์ ์ฐจ๋จํ๋ ์ ์ด๋ค. --net ์ต์ ์ none ๋ฌธ์๋ฅผ ๋ช ์ํด์ค์ผ๋ก์จ ์ค์ ํ ์ ์๋ค. ๋ ผ ๋คํธ์ํฌ๋ฅผ ํ์ฉํด์ ๋ง๋ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ ifconfig ๋ช ๋ น์ด๋ฅผ ์ณ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ดํด๋ณด๋ฉด ๋ก์ปฌ ํธ์คํธ๋ฅผ ์๋ฏธํ๋ lo ๋ฐ์ ์กด์ฌํ์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
$ docker run -it --name non_container \
--net none
ubuntu:14.04
$ ifconfig
6-5. ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ทธ๋๋ก ๊ฐ๋ค ์ฐ์. ์ปจํ ์ด๋ ๋คํธ์ํฌ
์ด๋ฒ์ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค ํ๊ฒฝ(๋ด๋ถ IP ์ฃผ์, Mac์ฃผ์ ๋ฑ)์ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋ ๋คํธ์ํฌ๋ฅผ ํ์ฉํ ์ ์๋ค. --net ์ต์ ์๋ container ๋ผ๋ ๋ฌธ์์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ปจํ ์ด๋ ์ด๋ฆ์ ๋ช ์ํด์ค๋ค. ์ฐ์ ์ผ๋ฐ์ ์ธ ์ปจํ ์ด๋๋ฅผ detached ๋ชจ๋๋ก 1๊ฐ ์์ฑํ ํ, ํด๋น ์ปจํ ์ด๋์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ๋คํธ์ํฌ๋ฅผ ์์ฑํด๋ณด์.
$ docker run -it -d --name container_network_orig \
ubuntu:14.04
$ docker run -it --name container_network \
--net container:container_networkd_orig \
ubuntu:14.04
์์ ๊ฐ์ด ์ปจํ ์ด๋ ๋คํธ์ํฌ๋ฅผ ํ์ฉํ๋ฉด, container_network ์ด๋ฆ์ ์ปจํ ์ด๋ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ์๋ก์ด ๋ด๋ถ IP๋ฅผ ํ ๋น๋ฐ์ง ์๋๋ค. ๋ํ ์๋๋๋ก๋ผ๋ฉด ์ปจํ ์ด๋๋ฅผ ํ๋ ๋ ์์ฑํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ์ ํ ๋น๋๋ veth๋ก ์์ํ๋ ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ ํธ์คํธ์ ํ๋ ๋ ์์ฑ๋์ด์ผ ํ๋๋ฐ ์ด๊ฒ๋ ์์ฑ๋์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์๋ํ๋ฉด container_network ์ด๋ฆ์ ์ปจํ ์ด๋container_network_orig ๋ผ๋ ์ปจํ ์ด๋์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
7. ์ปจํ ์ด๋ ๋ก๊น ํ๊ธฐ
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์ปจํ ์ด๋์์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์ ์๋น์ค๋ฅผ ์ด์ํ๋ ์ธก๋ฉด์์๋ ์ค์ํ ์์์ด๋ค. ๋์ปค ์ปจํ ์ด๋๋ ์์ฒด์ ์ผ๋ก ํ์ค ์ฒ ๋ ฅ๊ณผ ํ์ค ์๋ฌ ๋ก๊ทธ๋ฅผ ๋ณ๋์ ๋ฉํ๋ฐ์ดํฐ์ธ json ํฌ๋งท ํํ ํ์ผ๋ก ์ ์ฅ์ ํ๊ณ , ์ด๋ฅผ ํ์ธํ๋ ๋ช ๋ น์ด๋ ์ ๊ณตํ๋ค. ๊ด๋ จ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ช ๋ น์ด | ์ต์ | ์๋ฏธ |
docker logs [CONTAINER] | ํน์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ฐ์ํ๋ ๋ก๊ทธ๋ฅผ ํ์ธ | |
--tail [N] | ๋ก๊ทธ์ ๋ง์ง๋ง N์ค๋ง ํ์ธ | |
--since [unix timestamp|timestamp|Go time] | ๋ช ์ํ ์๊ฐ ์ดํ์ ๋ก๊ทธ๋ง ํ์ธ(์์ธํ ๊ฒ์ ์ฌ๊ธฐ) | |
--timestamps ๋๋ -t [timestamp] | ๋ช ์ํ ์๊ฐ ์ดํ์ ๋ก๊ทธ๋ง ํ์ธ | |
-f | ๋ก๊ทธ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธ |
๊ทธ๋ฌ๋ฉด MySQL ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ปจํ ์ด๋๋ฅผ detached ๋ชจ๋๋ก ์คํ์์ผ๋ณด์. ์ด ๋, MySQL ์ด๋ฏธ์ง ํน์ฑ ์ ๋ฐ๋์ ํ๊ฒฝ๋ณ์ ์ต์ ์ ๋ฃ์ด์ฃผ์ด์ผ ์คํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด์.
$ docker run -d --name mysql_container \
-e MYSQL_ROOT_PASSWORD=1111 \
mysql:5.7
$ docker logs --tail 10 mysql_container
์ด๋ ๊ฒ ํ์ธํ ์ ์๋ ๋ก๊ทธ์ json ์๋ณธ์ ํธ์คํธ ํ์ผ์์คํ ์ ์๋ ๊ฒฝ๋ก์์ ํ์ธํ ์ ์๋ค.
$ cat < /var/lib/docker/containers/[CONTAINER ID]/[CONTAINER ID]-json.log
์ฐธ๊ณ ๋ก ์ด๋ฌํ ๋ก๊ทธ ํ์ผ์ด ๋๋ฌด๋ ์ปค์ง๊ฑฐ๋ ์์ด ๋ง์์ง๋ฉด ํธ์คํธ์ ํ์ผ ์์คํ ์ ๋งค์ฐ ํฌ๊ฒ ์ฐจ์งํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด ์ปจํ ์ด๋ ์์ฑ ์ --log-opt ์ต์ ์ ์ฃผ์ด ์์ฑํ ๋ก๊ทธ ํ์ผ์ ํฌ๊ธฐ ๋ฐ ๊ฐ์๋ฅผ ์ ํํ ์ ์๋ค.
๋ช ๋ น์ด | ์ต์ | ์๋ฏธ |
docker run [CONTAINER] | --log-opt max-size=10k | ๋ก๊ทธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ 10 ํฌ๋ก๋ฐ์ดํธ๋ก ์ค์ (k๋ ํฌ๋ก๋ฐ์ดํธ, m๋ ๋ฉ๊ฐ๋ฐ์ดํธ, g๋ ๊ธฐ๊ฐ๋ฐ์ดํธ๋ก ์ค์ ๊ฐ๋ฅ) |
--log-opt max-file=3 | ๋ก๊ทธ ํ์ผ์ ๊ฐ์๋ฅผ ์ต๋ํ 3๊ฐ๋ก ์ ํ |
์ด๋ฌํ json-file ํํ๋ก ๋ก๊น ํ๋ ๊ฒ์ ๋ณ๋ค๋ฅธ ๋ก๊น ๋๋ผ์ด๋ฒ๋ฅผ ์ค์ ํ์ง ์์๋ค๋ฉด ๋ํดํธ๋ก ์ ์ฉ๋๋ ๋ก๊น ๋ฐฉ๋ฒ์ด๋ค. ๋ํ์ ์ธ ๋ก๊น ๋๋ผ์ด๋ฒ๋ก๋ syslog, journald, fluentd, awslogs ๋ฑ์ด ์๋ค๊ณ ํ๋ค. ๋ก๊น ๋๋ผ์ด๋ฒ๋ฅผ ํ์ฉํ ์์ ๋ ์๋ณธ ์ฑ ์ ์ฐธ๊ณ ํ๋๋ก ํ์.
์ง๊ธ๊น์ง ํด์ ๋์ปค์์ง์์ ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์๋ณด์๋ค. ๋ค์ ํฌ์คํ ์์๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋ณด๋๋ก ํ์.