๋ชฉ์ฐจ
ย File System
๋์ปค(Docker)๊ฐ ์ค์น๋๋ฉด /var/lib/docker ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋๋ค. ์ด ํด๋๋ ๋์ปค๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณณ์ผ๋ก, aufs, containers, image, volumes ๋ฑ์ ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋๋ค.
ย Layered Architecture
ย Image Layer
๋์ปค๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ๋ ์ด์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. Dockerfile์ ๊ฐ ๋ช
๋ น์ด๋ ์ด์ ๋ ์ด์ด์ ๋ณ๊ฒฝ ์ฌํญ๋ง ํฌํจํ์ฌ ๋์ปค ์ด๋ฏธ์ง์ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
FROM Ubuntu
RUN apt-get update && apt-get -y install python
RUN pip install flask flask-mysql
COPY . /opt/source-code
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask fun
Docker
๋ณต์ฌ
โข
Layer 1 - ๊ธฐ๋ณธ Ubuntu ์ด์ ์ฒด์
โข
Layer2 - apt ํจํค์ง ์ค์น
โข
Layer3 - python ํจํค์ง ์ค์น
โข
Layer4 - ์์ค ์ฝ๋ ๋ณต์ฌ
โข
Layer5 - ์ํธ๋ฆฌํฌ์ธํธ ์
๋ฐ์ดํธ
๊ฐ ๋ ์ด์ด๋ ์ด์ ๋ ์ด์ด์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ์ฅํ๋ค. ์ด๋ฌํ ๊ตฌ์กฐ ๋์ ์ ์ฒด ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ค.
ย Container Layer
์ด๋ฏธ์ง ๋ ์ด์ด๋ docker build ๋ช
๋ น์ด๋ฅผ ํตํด ๋น๋๊ฐ ์๋ฃ๋๋ฉด ์์ ํ ์ ์๋ ์ฝ๊ธฐ ์ ์ฉ(read-only)์ด๋ค. ๋ ์ด์ด๋ฅผ ์์ ํ๊ธฐ ์ํด์๋ ์๋ก ๋น๋ํด์ผ ํ๋ค. ์ด ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ผ๋ก docker run ๋ช
๋ น์ด๋ฅผ ํตํด ์ปจํ
์ด๋๋ฅผ ์คํํ๋ค. ์ปจํ
์ด๋๋ ์ด ์ด๋ฏธ์ง ๋ ์ด์ด ์์ ์ฐ๊ธฐ ๊ฐ๋ฅํ(Writable) ํ์ผ ์์คํ
์ ์ถ๊ฐํ์ฌ ์คํ๋๋ฉฐ, ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ณ๊ฒฝํ ์ ์๋ค.
ํด๋น ์ฐ๊ธฐ ๊ฐ๋ฅ ๋ ์ด์ด๋ฅผ ์ปจํ
์ด๋ ๋ ์ด์ด๋ผ๊ณ ํ์. ์ปจํ
์ด๋ ๋ ์ด์ด๋ ํด๋น ์ปจํ
์ด๋๋ง ๊ฐ๋ ๋ ์ด์ด๋ก, ์ปจํ
์ด๋์ ๊ฐ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค. ๋ฐ๋ผ์ ์ปจํ
์ด๋์์์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํด๋น ์ปจํ
์ด๋์๋ง ์ ์ฉ๋๋ฉฐ, ๊ธฐ๋ณธ ์ด๋ฏธ์ง ๋ ์ด์ด๋ ์ ์ง๋๋ค. ์ด๋ก ์ธํด ์ฌ๋ฌ ์ปจํ
์ด๋๊ฐ ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ๋ฉด์๋ ๋
๋ฆฝ์ ์ผ๋ก ์๋ํ ์ ์๋ค.
ย Copy-On-Write Mechanism
์ฝ๊ธฐ ์ ์ฉ์ธ ์ด๋ฏธ์ง ๋ ์ด์ด์ ์ฝ๋๋ฅผ ์์ ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ฝ๊ธฐ ์ ์ฉ์ด๋ฏ๋ก ์์ ์ด ๋ถ๊ฐ๋ฅํ๊ฐ?
๋์ปค๋ ์ด๋ฏธ์ง ๋ ์ด์ด์ ํ์ผ์ ์๋์ผ๋ก ์ปจํ
์ด๋ ๋ ์ด์ด๋ก ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด ๋๋๋ค. ์ด ๋ณต์ฌ๋ณธ์ ์์ ํจ์ผ๋ก์จ ์ปจํ
์ด๋์์์ ๋์์ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ์ด๋ก ์ธํด ์ด๋ฏธ์ง ์์ฒด๊ฐ ์์ ๋์ง ์์ผ๋ฉฐ, ํด๋น ์ปจํ
์ด๋์์๋ง ๋ณํ๋ฅผ ์ค ์ ์๋ค.
ย Volumes
๋์ปค์ ์ฐ๊ธฐ ๊ฐ๋ฅ ๋ ์ด์ด, ์ฆ ์ปจํ
์ด๋ ๋ ์ด์ด๋ ์ปจํ
์ด๋์ ์๋ช
์ฃผ๊ธฐ์ ๊ฐ๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ Copy-On-Write Mechanism์ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ์ฃผ๋๋ผ๋ ์ปจํ
์ด๋๋ฅผ ์ญ์ ๋๋ ์ฌ์์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๋ค. ๋ฐ์ดํฐ ์ ์ง๋ฅผ ์ํด ๋ณผ๋ฅจ์ ์ฌ์ฉํ ์ ์๋ค.
Create Volume
# docker volume create <volume_name>
docker volume create data_volume
Docker
๋ณต์ฌ
๋จผ์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๊ธฐ ์ํด ์์ฑ์ ํด์ค๋ค. ๋ณผ๋ฅจ์ ์์ฑํ๋ฉด /var/lib/docker/volume ๋๋ ํ ๋ฆฌ ํ์์ ์์ฑํ ๋ณผ๋ฅจ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
# docker run -v <volume_name>:<container_dir_for_mount> <image_name>
docker run -v data_volume:/var/lib/mysql mysql
Docker
๋ณต์ฌ