ํค์ด ํ๋ธ๋ฅด! ๋๋ ๊ธฐ์ฌ์ ๋ฒ์ญ์ ๋น์ ์ ๊ด์ฌ์ ์ ์ํฉ๋๋ค
์ค๋ ์ฐ๋ฆฌ๋ Docker๊ฐ ํธ์คํธ ๋จธ์ ์ ๋์คํฌ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด ์ด์ผ๊ธฐํ๊ณ , ์ฌ์ฉํ์ง ์๋ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋์ ์คํฌ๋ฉ์์ ์ด ๊ณต๊ฐ์ ํ๋ณดํ๋ ๋ฐฉ๋ฒ๋ ์์๋ณผ ๊ฒ์ ๋๋ค.
์ด ์๋น๋
Docker๋ ๋ฉ์ง ๊ฒ์ ๋๋ค. ์๋ง๋ ์ค๋๋ ์์ฌํ๋ ์ฌ๋์ ๊ฑฐ์ ์์ ๊ฒ์ ๋๋ค. ๋ถ๊ณผ ๋ช ๋ ์ ๋ง ํด๋ ์ด ์ ํ์ ์ฐ๋ฆฌ์๊ฒ ๋ชจ๋ ํ๊ฒฝ์ ๊ตฌ์ถ, ์ ๊ณต ๋ฐ ์คํํ ์ ์๋ ์์ ํ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ CPU ๋ฐ RAM ๋ฆฌ์์ค๋ฅผ ํฌ๊ฒ ์ ์ฝํ ์ ์๊ฒ ํด์ฃผ์์ต๋๋ค. ์ด ์ธ์๋(์ผ๋ถ์๊ฒ๋ ์ด๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ค) Docker๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋์ ํ๊ฒฝ์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ๋๋ผ์ธ ์ ๋๋ก ๋จ์ํํ๊ณ ํตํฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ๋ ์ํ์ ์ด๋ฌํ ๋ชจ๋ ์ฆ๊ฑฐ์์๋ ๋๊ฐ๊ฐ ๋ฐ๋ฆ ๋๋ค. ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ , ์์ฒด ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์์ฑํ๊ณ , ๋ณต์กํ ์ํ๊ณ๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด ๋น์ฉ์ ์ง๋ถํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ฌด์๋ณด๋ค๋ ๋์คํฌ ๊ณต๊ฐ์ผ๋ก ๋น์ฉ์ ์ง๋ถํฉ๋๋ค.
Docker๊ฐ ์ค์ ๋ก ์ปดํจํฐ์์ ์ผ๋ง๋ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๋์ง ์๊ฐํด ๋ณธ ์ ์ด ์๋ค๋ฉด ๋ค์ ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ถ์พํ๊ฒ ๋๋ ์๋ ์์ต๋๋ค.
$ docker system df
์ด๋ ๋ค์ํ ์ํฉ์์ Docker์ ๋์คํฌ ์ฌ์ฉ๋์ ๋ณด์ฌ์ค๋๋ค.
- ์ด๋ฏธ์ง โ ์ด๋ฏธ์ง ์ ์ฅ์์์ ๋ค์ด๋ก๋๋์ด ์์คํ ์ ๊ตฌ์ถ๋ ์ด๋ฏธ์ง์ ์ด ํฌ๊ธฐ์ ๋๋ค.
- ์ปจํ ์ด๋ โ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋์คํฌ ๊ณต๊ฐ์ ์ด๋(๋ชจ๋ ์ปจํ ์ด๋์ ์ฝ๊ธฐ-์ฐ๊ธฐ ๋ ์ด์ด์ ์ด ๋ณผ๋ฅจ์ ์๋ฏธ)
- ๋ก์ปฌ ๋ณผ๋ฅจ โ ์ปจํ ์ด๋์ ํ์ฌ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ณผ๋ฅจ
- ๋น๋ ์บ์ โ ์ด๋ฏธ์ง ๋น๋ ํ๋ก์ธ์ค์์ ์์ฑ๋ ์์ ํ์ผ์ ๋๋ค(Docker ๋ฒ์ 18.09๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ BuildKit ๋๊ตฌ ์ฌ์ฉ).
์ด ๊ฐ๋จํ ์ ์ก ํ์ ๊ทํ๋ ๋์คํฌ์์ ์ฐ๋ ๊ธฐ๋ฅผ ์ฒญ์ํ๊ณ ๊ท์คํ ๊ธฐ๊ฐ๋ฐ์ดํธ๋ฅผ ๋ค์ ํ์ฑํํ๊ณ ์ถ์ดํ ๊ฒ์ ๋๋ค(์ฐธ๊ณ : ํนํ ๋งค์ ์ด ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ํ ์๋๋ฃ๋ฅผ ์ง๋ถํ๋ ๊ฒฝ์ฐ).
์ปจํ ์ด๋๋ณ ๋์คํฌ ์ฌ์ฉ๋
ํธ์คํธ ์์คํ ์์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋๋ง๋ค /var/lib/docker ๋๋ ํฐ๋ฆฌ์ ์ฌ๋ฌ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ฑ๋๋ฉฐ, ๊ทธ์ค ๋ค์ ์ฌํญ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
- ๋๋ ํ ๋ฆฌ /var/lib/docker/containers/container_ID โ ํ์ค ๋ก๊น ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฒคํธ ๋ก๊ทธ๊ฐ JSON ํ์์ผ๋ก ์ ์ฅ๋๋ ์์น์ ๋๋ค. ๋๋ฌด ์์ธํ ๋ก๊ทธ์ ์๋ฌด๋ ์ฝ๊ฑฐ๋ ์ฒ๋ฆฌํ์ง ์๋ ๋ก๊ทธ๋ก ์ธํด ๋์คํฌ๊ฐ ๊ฐ๋ ์ฐจ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- /var/lib/docker/overlay2 ๋๋ ํฐ๋ฆฌ์๋ ์ปจํ ์ด๋ ์ฝ๊ธฐ-์ฐ๊ธฐ ๊ณ์ธต์ด ํฌํจ๋์ด ์์ต๋๋ค(overlay2๋ ๋๋ถ๋ถ์ Linux ๋ฐฐํฌํ์์ ์ ํธ๋๋ ๋๋ผ์ด๋ฒ์ ๋๋ค). ์ปจํ ์ด๋๊ฐ ํ์ผ ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ ์ด ๋๋ ํฐ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
์ปจํ ์ด๋๋ฅผ ์คํํ๊ฑฐ๋ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ ํ ๊ด์ฌํ ์ ์ด ์๋ ๊นจ๋ํ Docker๊ฐ ์ค์น๋ ์์คํ ์ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋ ๋ณด๊ณ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
์๋ฅผ ๋ค์ด NGINX์ ๊ฐ์ ์ผ๋ถ ์ปจํ ์ด๋๋ฅผ ์์ํ๊ฒ ์ต๋๋ค.
$ docker container run --name www -d -p 8000:80 nginx:1.16
๋์คํฌ๋ ์ด๋ป๊ฒ ๋๋์?
- ์ด๋ฏธ์ง๋ 126MB๋ฅผ ์ฐจ์งํ๋ฉฐ ์ด๋ ์ปจํ ์ด๋์์ ์์ํ ๊ฒ๊ณผ ๋์ผํ NGINX์ ๋๋ค.
- ์ปจํ ์ด๋๋ ํฐ๋ฌด๋์๋ 2๋ฐ์ดํธ๋ฅผ ์ฐจ์งํฉ๋๋ค.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 126M 0B (0%)
Containers 1 1 2B 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
๊ฒฐ๋ก ์ ์ผ๋ก ํ๋จํ๋ฉด ์์ง ํ๋ณดํ ์ ์๋ ๊ณต๊ฐ์ด ์์ต๋๋ค. 2๋ฐ์ดํธ๋ ์์ ํ ๋ฌด์๋ฏธํ๋ฏ๋ก NGINX๊ฐ ์๊ธฐ์น ์๊ฒ ์ด๋๊ฐ์ 100MB์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ๋ด๋ถ์ ์ ํํ ์ด ํฌ๊ธฐ์ test.img ํ์ผ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
$ docker exec -ti www
dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]
ํธ์คํธ์ ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ์ปจํ ์ด๋(์ปจํ ์ด๋)๊ฐ 100MB๋ฅผ ์ฐจ์งํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 126M 0B (0%)
Containers 1 1 104.9MB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
๋น์ ์ ํธ๊ธฐ์ฌ ๋ง์ ๋๋๋ ์ด๋ฏธ test.img ํ์ผ์ด ์ด๋์ ์๋์ง ๊ถ๊ธํดํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ ์ฐพ์๋ณด์:
$ find /var/lib/docker -type f -name test.img
/var/lib/docker/overlay2/83f177...630078/merged/test.img
/var/lib/docker/overlay2/83f177...630078/diff/test.img
์์ธํ ์ค๋ช ํ์ง ์๊ณ ๋ test.img ํ์ผ์ ์ค๋ฒ๋ ์ด2 ๋๋ผ์ด๋ฒ์ ์ํด ์ ์ด๋๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ค์ ํธ๋ฆฌํ๊ฒ ์์นํ๋ค๋ ์ ์ ์ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๋ฅผ ์ค์งํ๋ฉด ํธ์คํธ๋ ์์น์ ์ผ๋ก ์ด ๊ณต๊ฐ์ ๋น์ธ ์ ์๋ค๊ณ ์๋ ค์ค๋๋ค.
# Stopping the www container
$ docker stop www
# Visualizing the impact on the disk usage
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 126M 0B (0%)
Containers 1 0 104.9MB 104.9MB (100%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
์ด๋ป๊ฒ ํ ์ ์๋์? ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ฉด ์ฝ๊ธฐ-์ฐ๊ธฐ ์์ค์์ ํด๋น ๊ณต๊ฐ์ด ์ง์์ง๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ์ค์น๋ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ํ ๋ฒ์ ์ ๊ฑฐํ๊ณ ํด๋น ์ปจํ ์ด๋์์ ์์ฑ๋ ๋ชจ๋ ์ฝ๊ธฐ-์ฐ๊ธฐ ํ์ผ์ ๋์คํฌ์์ ์ง์ธ ์ ์์ต๋๋ค.
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5e7f8e5097ace9ef5518ebf0c6fc2062ff024efb495f11ccc89df21ec9b4dcc2
Total reclaimed space: 104.9MB
๋ฐ๋ผ์ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ์ฌ 104,9MB๋ฅผ ํ๋ณดํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ์ ๋ค์ด๋ก๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ด๋ฏธ์ง๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ํด์ ํ ํ๋ณด๊ฐ ๋ฉ๋๋ค.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 0 126M 126M (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
์ฐธ๊ณ : ํ๋ ์ด์์ ์ปจํ ์ด๋์์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ํ ์ด ํธ๋ฆญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์์ ์ฌ์ฉํ prune ํ์ ๋ช ๋ น์ ์ค์ง๋ ์ปจํ ์ด๋์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ค์ง๋ ์ปจํ ์ด๋๋ฟ๋ง ์๋๋ผ ์คํ ์ค์ธ ์ปจํ ์ด๋๋ ์ญ์ ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น ์ค ํ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
# Historical command
$ docker rm -f $(docker ps โaq)
# More recent command
$ docker container rm -f $(docker container ls -aq)
์ฐธ๊ณ ์ฌํญ: ์ปจํ ์ด๋๋ฅผ ์์ํ ๋ -rm ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋๊ฐ ์ค์ง๋๋ฉด ์ปจํ ์ด๋๊ฐ ์ฐจ์งํ๋ ๋ชจ๋ ๋์คํฌ ๊ณต๊ฐ์ด ํด์ ๋ฉ๋๋ค.
๋์คํฌ ์ด๋ฏธ์ง ์ฌ์ฉ
๋ช ๋ ์ ์๋ ์๋ฐฑ ๋ฉ๊ฐ๋ฐ์ดํธ์ ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์์ ํ ์ ์์ด์์ต๋๋ค. Ubuntu ์ด๋ฏธ์ง์ ๋ฌด๊ฒ๋ 600MB์ด๊ณ Microsoft .Net ์ด๋ฏธ์ง์ ๋ฌด๊ฒ๋ ์ ๊ธฐ๊ฐ๋ฐ์ดํธ์์ต๋๋ค. ๊ทธ๋ฐ ํผ๋์ค๋ฌ์ด ์์ ์๋ ์ด๋ฏธ์ง ํ๋๋ง ๋ค์ด๋ก๋ํ๋ฉด ์ด๋ฏธ์ง ๊ฐ์ ๋ ๋ฒจ์ ๊ณต์ ํ๋๋ผ๋ ์ฌ์ ๋์คํฌ ๊ณต๊ฐ์ ํฐ ํ๊ฒฉ์ ์ค ์ ์์ต๋๋ค. ์ค๋๋ โ ์๋ํจ์ ์ฐฌ์ํฉ๋๋ค โ ์ด๋ฏธ์ง์ ๋ฌด๊ฒ๋ ํจ์ฌ ๊ฐ๋ฒผ์์ง์ง๋ง, ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ช ๊ฐ์ง ์๋ฐฉ ์กฐ์น๋ฅผ ์ทจํ์ง ์์ผ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ๋น ๋ฅด๊ฒ ์ฑ์ธ ์ ์์ต๋๋ค.
์ต์ข ์ฌ์ฉ์์๊ฒ ์ง์ ํ์๋์ง ์๋ ์ฌ๋ฌ ์ ํ์ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค.
- ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ์์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ค๊ฐ ์ด๋ฏธ์ง - ์ด๋ฌํ "๊ธฐํ" ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋น ์ด๋ฏธ์ง๋ ์ญ์ ํ ์ ์์ต๋๋ค.
- ๋๊ธ๋ง ์ด๋ฏธ์ง๋ ์คํ ์ค์ธ ์ปจํ ์ด๋์์ ์ฐธ์กฐ๋์ง ์๋ ์ค๊ฐ ์ด๋ฏธ์ง์ด๋ฏ๋ก ์ญ์ ํ ์ ์์ต๋๋ค.
- ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ์์คํ ์ ๋งค๋ฌ๋ฆฐ ์ด๋ฏธ์ง๊ฐ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
$ docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
none none 21e658fe5351 12 minutes ago 71.3MB
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ฑฐํ ์ ์์ต๋๋ค.
$ docker image rm $(docker image ls -f dangling=true -q)
prune ํ์ ๋ช ๋ น์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค:
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cda
deleted: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5cc
deleted: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347
deleted: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197
deleted: sha256:5945bb6e12888cf320828e0fd00728947104da82e3eb4452f
Total reclaimed space: 12.9kB
ํ๋์ ๋ช ๋ น์ผ๋ก ๊ฐ์๊ธฐ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ (๋จ์ง ๋งค๋ฌ๋ฆฐ ๊ฒ์ด ์๋๋ผ) ๋ชจ๋ ์ญ์ ํ๋ ค๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
$ docker image rm $(docker image ls -q)
๋ณผ๋ฅจ๋ณ ๋์คํฌ ์ฌ์ฉ๋
๋ณผ๋ฅจ์ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ค๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
MongoDB ์ปจํ ์ด๋๋ฅผ ์์ํ๊ณ , ์ปจํ ์ด๋ ์ธ๋ถ์ ๋ณผ๋ฅจ์ ํ์ฌํ๊ณ , ์ฌ๊ธฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ ์ ๋ณต์ํด ๋ณด๊ฒ ์ต๋๋ค(bck.json ํ์ผ์์ ์ฌ์ฉ ๊ฐ๋ฅ).
# Running a mongo container
$ docker run --name db -v $PWD:/tmp -p 27017:27017 -d mongo:4.0
# Importing an existing backup (from a huge bck.json file)
$ docker exec -ti db mongoimport
--db 'test'
--collection 'demo'
--file /tmp/bck.json
--jsonArray
๋ฐ์ดํฐ๋ ํธ์คํธ ์์คํ ์ /var/lib/docker/volumes ๋๋ ํฐ๋ฆฌ์ ์์นํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ปจํ ์ด๋์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ค์ด ์๋๊ฐ? MongoDB ์ด๋ฏธ์ง์ Dockerfile์์ /data/db ๋๋ ํฐ๋ฆฌ(MongoDB๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋๋ ํฐ๋ฆฌ)๊ฐ ๋ณผ๋ฅจ์ผ๋ก ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฐธ๊ณ ์ฌํญ: ๋ฐ์ดํฐ๋ฅผ ์์ฑํด์ผ ํ๋ ๋ง์ ์ด๋ฏธ์ง๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ณผ๋ฅจ์ ์ฌ์ฉํฉ๋๋ค.
MongoDB๋ฅผ ์ถฉ๋ถํ ์ฌ์ฉํ๊ณ ์ปจํ ์ด๋๋ฅผ ์ค์ง(๋๋ ์ญ์ )ํด๋ ๋ณผ๋ฅจ์ ์ญ์ ๋์ง ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ์ญ์ ํ ๋๊น์ง ๊ท์คํ ๋์คํฌ ๊ณต๊ฐ์ ๊ณ์ ์ฐจ์งํฉ๋๋ค.
$ docker volume rm $(docker volume ls -q)
์๋๋ฉด ์ด๋ฏธ ์ฐ๋ฆฌ์๊ฒ ์น์ํ prune ํ์ ๋ช ๋ น์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
d50b6402eb75d09ec17a5f57df4ed7b520c448429f70725fc5707334e5ded4d5
8f7a16e1cf117cdfddb6a38d1f4f02b18d21a485b49037e2670753fa34d115fc
599c3dd48d529b2e105eec38537cd16dac1ae6f899a123e2a62ffac6168b2f5f
...
732e610e435c24f6acae827cd340a60ce4132387cfc512452994bc0728dd66df
9a3f39cc8bd0f9ce54dea3421193f752bda4b8846841b6d36f8ee24358a85bae
045a9b534259ec6c0318cb162b7b4fca75b553d4e86fc93faafd0e7c77c79799
c6283fe9f8d2ca105d30ecaad31868410e809aba0909b3e60d68a26e92a094da
Total reclaimed space: 25.82GB
luc@saturn:~$
์ด๋ฏธ์ง ๋น๋ ์บ์์ ๋์คํฌ ์ฌ์ฉ
Docker 18.09์์๋ BuildKit ๋๊ตฌ ๋๋ถ์ ์ด๋ฏธ์ง ์์ฑ ํ๋ก์ธ์ค๊ฐ ์ผ๋ถ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ์๋๊ฐ ํฅ์๋๊ณ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋ณด์ ๊ด๋ฆฌ๊ฐ ์ต์ ํ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ด ํ๋ฅญํ ๋๊ตฌ์ ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ๊ณ ๋ คํ์ง ์๊ณ ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์๋ง ์ค์ ์ ๋ ๊ฒ์ ๋๋ค.
์์ ํ ๊ฐ๋จํ Node.Js ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- index.js ํ์ผ์ ์์ ๋ ๊ฐ ์์ฒญ์ ๋ํด ํ ์ค๋ก ์๋ตํ๋ ๊ฐ๋จํ HTTP ์๋ฒ๋ฅผ ์์ํฉ๋๋ค.
- package.json ํ์ผ์ HTTP ์๋ฒ๋ฅผ ์คํํ๋ ๋ฐ expressjs๋ง ์ฌ์ฉ๋๋ ์ข ์์ฑ์ ์ ์ํฉ๋๋ค.
$ cat index.js
var express = require('express');
var util = require('util');
var app = express();
app.get('/', function(req, res) {
res.setHeader('Content-Type', 'text/plain');
res.end(util.format("%s - %s", new Date(), 'Got Request'));
});
app.listen(process.env.PORT || 80);
$ cat package.json
{
"name": "testnode",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.14.0"
}
}
์ด๋ฏธ์ง ๋น๋๋ฅผ ์ํ Dockerfile์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FROM node:13-alpine
COPY package.json /app/package.json
RUN cd /app && npm install
COPY . /app/
WORKDIR /app
EXPOSE 80
CMD ["npm", "start"]
BuildKit์ ์ฌ์ฉํ์ง ์๊ณ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํด ๋ณด๊ฒ ์ต๋๋ค.
$ docker build -t app:1.0 .
๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋์ ํ์ธํ๋ฉด ๊ธฐ๋ณธ ์ด๋ฏธ์ง(node:13-alpine)์ ๋์ ์ด๋ฏธ์ง(app:1.0)๋ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 0 109.3MB 109.3MB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
BuildKit์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ฒ์งธ ๋ฒ์ ์ ๋น๋ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด DOCKER_BUILDKIT ๋ณ์๋ฅผ 1๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
$ DOCKER_BUILDKIT=1 docker build -t app:2.0 .
์ด์ ๋์คํฌ ์ฌ์ฉ๋์ ํ์ธํ๋ฉด ๋น๋ ์บ์(buid-cache)๊ฐ ์ฌ๊ธฐ์ ํฌํจ๋์ด ์์์ ์ ์ ์์ต๋๋ค.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 0 109.3MB 109.3MB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 11 0 8.949kB 8.949kB
์ด๋ฅผ ์ง์ฐ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ญ์์ค.
$ docker builder prune
WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y
Deleted build cache objects:
rffq7b06h9t09xe584rn4f91e
ztexgsz949ci8mx8p5tzgdzhe
3z9jeoqbbmj3eftltawvkiayi
Total reclaimed space: 8.949kB
๋ชจ๋ ์ง์ฐ์ธ์!
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ปจํ ์ด๋, ์ด๋ฏธ์ง, ๋ณผ๋ฅจ์ด ์ฐจ์งํ๋ ๋์คํฌ ๊ณต๊ฐ์ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค. prune ํ์ ๋ช ๋ น์ด ์ด๋ฅผ ๋์์ค๋๋ค. ๊ทธ๋ฌ๋ Docker ์์คํ ์์ค์์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ ์ ๋ฆฌํฉ๋๋ค.
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N]
์ด๋ค ์ด์ ๋ก Docker ๋จธ์ ์ ๋์คํฌ ๊ณต๊ฐ์ ์ ์ฝํ๋ ค๋ ๊ฒฝ์ฐ ์ ๊ธฐ์ ์ผ๋ก ์ด ๋ช ๋ น์ ์คํํ๋ ๊ฒ์ด ์ต๊ด์ด ๋์ด์ผ ํฉ๋๋ค.
์ถ์ฒ : habr.com