.
๋์ปค(Docker)๋?
1. Docker ์ ์
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋(Container)๋ผ๋ ๋จ์๋ก ํจํค์งํ์ฌ ๋ฐฐํฌํ๊ณ ์คํํ ์ ์๋ ๊ฐ์ํ ํ๋ซํผ์ด๋ค.
OS ๋ ๋ฒจ ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ, ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ด์ ํ๊ฒฝ ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ ์ผ๋ก ๋ฐฐํฌํ ์ ์๋ค.
โ Docker์ ํน์ง
- ๊ฒฝ๋ ์ปจํ ์ด๋: VM๋ณด๋ค ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์คํ๋จ
- ์ด์์ฑ(Portability): ์ด๋์๋ ๋์ผํ ํ๊ฒฝ์์ ์คํ ๊ฐ๋ฅ
- ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐ ์คํ: ์ปจํ ์ด๋ ์์ฑ ๋ฐ ๋ฐฐํฌ ์๋๊ฐ ๋น ๋ฆ
- ํ๊ฒฝ ๊ฒฉ๋ฆฌ: ์ปจํ ์ด๋ ๊ฐ ๋ ๋ฆฝ์ ์ธ ์คํ ๊ฐ๋ฅ
- ํ์ฅ์ฑ(Scalability): ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌ ๊ฐ๋ฅ
2. Docker์ ์ฃผ์ ๊ฐ๋
1๏ธโฃ ์ปจํ ์ด๋(Container)
์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ์คํ ํ๊ฒฝ(๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์กด์ฑ ๋ฑ)์ ํฌํจํ๋ ๋ ๋ฆฝ์ ์ธ ์คํ ๋จ์์ด๋ค.
docker run hello-world # ๊ฐ๋จํ ์ปจํ
์ด๋ ์คํ ์์
2๏ธโฃ ์ด๋ฏธ์ง(Image)
์ด๋ฏธ์ง๋ ์ปจํ ์ด๋ ์คํ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ ๋ถ๋ณ(Immutable) ํ์ผ ์์คํ ์ด๋ค.
docker pull nginx # nginx ์ด๋ฏธ์ง ๋ค์ด๋ก๋
docker images # ๋ก์ปฌ์ ์ ์ฅ๋ ์ด๋ฏธ์ง ํ์ธ
3๏ธโฃ ๋์ปค ํ์ผ(Dockerfile)
์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ์คํฌ๋ฆฝํธ๋ก, `Dokerfile`์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ ํ๊ฒฝ์ ์ค์ ํ ์ ์๋ค.
# ์์ : ๊ฐ๋จํ Python ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ Dockerfile
FROM python:3.9 # ๊ธฐ๋ฐ ์ด๋ฏธ์ง
WORKDIR /app # ์์
๋๋ ํ ๋ฆฌ ์ค์
COPY . . # ํ์ฌ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ปจํ
์ด๋๋ก ๋ณต์ฌ
RUN pip install -r requirements.txt # ํจํค์ง ์ค์น
CMD ["python", "app.py"] # ์คํํ ๋ช
๋ น์ด
docker build -t my-python-app . # ์ด๋ฏธ์ง ๋น๋
4๏ธโฃ ๋ณผ๋ฅจ(Volumes)
์ปจํ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ง์์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์คํ ๋ฆฌ์ง ๋ฐฉ์.
docker volume create myvolume # ๋ณผ๋ฅจ ์์ฑ
docker run -v myvolume:/data ubuntu # ๋ณผ๋ฅจ์ ์ปจํ
์ด๋์ ๋ง์ดํธ
5๏ธโฃ ๋คํธ์ํฌ(Network)
์ปจํ ์ด๋ ๊ฐ์ ํต์ ์ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ.
docker network create mynetwork # ๋คํธ์ํฌ ์์ฑ
docker network ls # ๋คํธ์ํฌ ๋ชฉ๋ก ํ์ธ
3. Docker ๊ธฐ๋ณธ ๋ช ๋ น์ด
์ปจํ ์ด๋ ์คํ & ๊ด๋ฆฌ
docker run -d --name my_container nginx # ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ
docker ps # ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ชฉ๋ก ๋ณด๊ธฐ
docker stop my_container # ์ปจํ
์ด๋ ์ค์ง
docker rm my_container # ์ปจํ
์ด๋ ์ญ์
์ด๋ฏธ์ง ๊ด๋ฆฌ
docker images # ์ ์ฅ๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ํ์ธ
docker rmi nginx # ์ด๋ฏธ์ง ์ญ์
docker tag myimage myrepo/myimage:v1 # ์ด๋ฏธ์ง ํ๊ทธ ์ถ๊ฐ
docker push myrepo/myimage:v1 # Docker Hub์ ์ด๋ฏธ์ง ์
๋ก๋
4. Docker Compose
Docker Compose๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์ ์ํ๊ณ ์คํํ ์ ์๋๋ก ๋๋ ๋๊ตฌ์ด๋ค.
๐ `docker-compose.yml` ์์
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
docker-compose up -d # ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ
docker-compose down # ๋ชจ๋ ์ปจํ
์ด๋ ์ค์ง ๋ฐ ์ ๊ฑฐ
5. Docker Hub & ์ด๋ฏธ์ง ๋ฐฐํฌ
Docker Hub๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์ ์๋ ์จ๋ผ์ธ ์ ์ฅ์๋ค.
docker login # Docker Hub ๋ก๊ทธ์ธ
docker tag my-app myrepo/my-app:v1 # ํ๊ทธ ์ถ๊ฐ
docker push myrepo/my-app:v1 # ์ด๋ฏธ์ง ์
๋ก๋
6. Docker์ Kubernetes ๋น๊ต
ํญ๋ชฉ | Docker | Kubernetes |
๊ฐ๋ | ์ปจํ ์ด๋ ์คํ ๋ฐ ๊ด๋ฆฌ | ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ |
์ญํ | ๋จ์ผ ์ปจํ ์ด๋ ๊ด๋ฆฌ | ์ฌ๋ฌ ์ปจํ ์ด๋์ ์๋ ํ์ฅ ๋ฐ ๊ด๋ฆฌ |
ํ์ฅ์ฑ | ๊ฐ๋ณ ์ปจํ ์ด๋ ๋ฐฐํฌ | ํด๋ฌ์คํฐ ๊ธฐ๋ฐ ์ด์ |
๋์ปค ์ ๋ฆฌ:
1. Docker๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ฐ์ํ ํ๋ซํผ์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ์ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ํด์ค๋ค~
2. ์ด๋ฏธ์ง(Image)์ ์ปจํ ์ด๋(Container)์ ๊ฐ๋ ์ ์ดํดํ๊ณ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค~
3. ๋ณผ๋ฅจ(Volumes)๊ณผ ๋คํธ์ํฌ(Network)๋ฅผ ํ์ฉํ๋ฉด ์ปจํ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌ๊ฐ๋ฅํ๋ค~
4. Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค~
5. Docker Hub๋ฅผ ํ์ฉํ๋ฉด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ๊ณ ๋ฐฐํฌํ ์ ์๋ค~
์ข๋ค~~~~