Skip to content

Commit d561442

Browse files
authored
Merge pull request #32 from Pseudo-Lab/docs/docker-tutorial
Docs/docker tutorial ์ž๋ฃŒ ์ถ”๊ฐ€
2 parents 38ef724 + 15e6a2d commit d561442

21 files changed

Lines changed: 1873 additions & 0 deletions

โ€Žbook/_toc.ymlโ€Ž

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,20 @@ parts:
1010
title: "Github.dev ํŽธ์ง‘๊ธฐ๋กœ ์ž‘์—…ํ•˜๊ธฐ"
1111
- file: docs/pr-ground
1212
title: "์ง์ ‘ํ•ด๋ณด๊ธฐ"
13+
14+
- caption: "๋‚˜๋งŒ์˜ local ChatGPT ๋งŒ๋“ค๊ธฐ: Docker ์‹ค์Šต ํŠœํ† ๋ฆฌ์–ผ"
15+
chapters:
16+
- file: docker_tutorial/00.pytorch_example
17+
title: "Pytorch example"
18+
- file: docker_tutorial/01.what_is_docker
19+
title: "Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€?"
20+
- file: docker_tutorial/02.image_and_container
21+
title: "Docker ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์‹ค์Šต"
22+
- file: docker_tutorial/03.docker-compose
23+
title: "Docker Compose ๊ฐœ๋… & ์‹ค์Šต"
24+
- file: docker_tutorial/04.ollama
25+
title: "Ollama๋กœ ๋กœ์ปฌ LLM ์‹คํ–‰"
26+
- file: docker_tutorial/05.webui
27+
title: "Open-WebUI ์‹คํ–‰"
28+
- file: docker_tutorial/06.ollama_and_webui
29+
title: "Ollama + WebUI (Docker Compose)"
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Pytorch example code
2+
3+
## ์˜ˆ์ œ ์ฝ”๋“œ ์‹คํ–‰ํ•ด๋ณด๊ธฐ
4+
์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ˜„์žฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์‹œ์ผœ๋ด…์‹œ๋‹ค.
5+
6+
```python
7+
# -*- coding: utf-8 -*-
8+
import numpy as np
9+
import math
10+
11+
# ๋ฌด์ž‘์œ„๋กœ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
12+
x = np.linspace(-math.pi, math.pi, 2000)
13+
y = np.sin(x)
14+
15+
# ๋ฌด์ž‘์œ„๋กœ ๊ฐ€์ค‘์น˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค
16+
a = np.random.randn()
17+
b = np.random.randn()
18+
c = np.random.randn()
19+
d = np.random.randn()
20+
21+
learning_rate = 1e-6
22+
for t in range(2000):
23+
# ์ˆœ์ „ํŒŒ ๋‹จ๊ณ„: ์˜ˆ์ธก๊ฐ’ y๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค
24+
# y = a + b x + c x^2 + d x^3
25+
y_pred = a + b * x + c * x ** 2 + d * x ** 3
26+
27+
# ์†์‹ค(loss)์„ ๊ณ„์‚ฐํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค
28+
loss = np.square(y_pred - y).sum()
29+
if t % 100 == 99:
30+
print(t, loss)
31+
32+
# ์†์‹ค์— ๋”ฐ๋ฅธ a, b, c, d์˜ ๋ณ€ํ™”๋„(gradient)๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์—ญ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.
33+
grad_y_pred = 2.0 * (y_pred - y)
34+
grad_a = grad_y_pred.sum()
35+
grad_b = (grad_y_pred * x).sum()
36+
grad_c = (grad_y_pred * x ** 2).sum()
37+
grad_d = (grad_y_pred * x ** 3).sum()
38+
39+
# ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
40+
a -= learning_rate * grad_a
41+
b -= learning_rate * grad_b
42+
c -= learning_rate * grad_c
43+
d -= learning_rate * grad_d
44+
45+
print(f'Result: y = {a} + {b} x + {c} x^2 + {d} x^3')
46+
```
47+
48+
## ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ
49+
1. Python ๋ฏธ์„ค์น˜
50+
```bash
51+
bash: python: command not found
52+
```
53+
54+
2. NumPy ๋ฏธ์„ค์น˜
55+
```vbnet
56+
Traceback (most recent call last):
57+
File "example.py", line 1, in <module>
58+
import numpy as np
59+
ModuleNotFoundError: No module named 'numpy'
60+
```
61+
62+
3. ์ฝ”๋“œ ์‹คํ–‰
63+
```bash
64+
Step 100 โ€” loss: 1234.56
65+
Step 200 โ€” loss: 789.01
66+
โ€ฆ
67+
์ตœ์ข… ๋ชจ๋ธ: y = 0.0012 + 1.0003 x + โ€ฆ
68+
```
69+
์ด์ฒ˜๋Ÿผ ํ™˜๊ฒฝ ์ฐจ์ด๋กœ ์ธํ•ด ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
70+
์ด๋Ÿฐ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด, **๋™์ผํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ**์„ ๊ฐ–์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
71+
72+
### Ref.
73+
PyTorch Tutorials โ€œPyTorch with Examplesโ€, https://tutorials.pytorch.kr/beginner/pytorch_with_examples.html
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Docker์˜ ๊ฐœ๋…๊ณผ ํ•„์š”์„ฑ
2+
## Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
3+
Docker์˜ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ๋Š” Docker๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
4+
5+
> Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ, ๋ฐฐํฌ ๋ฐ ์‹คํ–‰์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
6+
> Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ธํ”„๋ผ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
7+
> ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ ๋ฐฉ์‹๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
8+
> ์ฝ”๋“œ ๋ฐฐํฌยทํ…Œ์ŠคํŠธยท๋ฐฐํฌ ๋ฐฉ๋ฒ•๋ก ์„ ํ™œ์šฉํ•ด ์ฝ”๋“œ ์ž‘์„ฑ๋ถ€ํ„ฐ ํ”„๋กœ๋•์…˜ ์‹คํ–‰๊นŒ์ง€์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
9+
10+
์—ฌ๊ธฐ์„œ ์ง‘์ค‘ํ•ด์•ผํ•  ๋ถ€๋ถ„์€ **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ธํ”„๋ผ๋ฅผ ๋ถ„๋ฆฌ**ํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ฐฐํฌํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.
11+
12+
### ํ•ต์‹ฌ ๊ฐœ๋…
13+
- **์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™”** ๊ธฐ์ˆ 
14+
- ํ˜ธ์ŠคํŠธ ์ปค๋„์„ ๊ณต์œ ํ•˜๋ฉด์„œ๋„ ํ”„๋กœ์„ธ์Šคยท๋„คํŠธ์›ŒํฌยทํŒŒ์ผ์‹œ์Šคํ…œ์„ ๊ฒฉ๋ฆฌ
15+
- ์ „ํ†ต์  VM ๋Œ€๋น„ ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„
16+
17+
- **์ด๋ฏธ์ง€(Image)**
18+
- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผยท๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šค๋ƒ…์ƒท
19+
- Dockerfile๋กœ ์ •์˜ํ•˜๊ณ , ๊ณ„์ธต(layer) ๋‹จ์œ„๋กœ ์บ์‹œ ํ™œ์šฉ
20+
21+
- **์ปจํ…Œ์ด๋„ˆ(Container)**
22+
- ์ด๋ฏธ์ง€์˜ ์‹คํ–‰ ์ธ์Šคํ„ด์Šค
23+
- ์ƒ์„ฑยท์‹œ์ž‘ยท์ค‘์ง€ยท์‚ญ์ œ๊ฐ€ ์ž์œ ๋กญ๊ณ , ์ผ๊ด€๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ณด์žฅ
24+
25+
## ์™œ Docker๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?
26+
#### ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ๋ณด์žฅ
27+
- "์ œ PC์—์„œ๋Š” ์ž˜ ๋˜๋Š”๋ฐ์š”?" ๋ฌธ์ œ ํ•ด๊ฒฐ
28+
- ๊ฐœ๋ฐœ ยท ํ…Œ์ŠคํŠธ ยท ํ”„๋กœ๋•์…˜ ์ „ ๋‹จ๊ณ„์—์„œ ๋™์ผํ•œ ํ™˜๊ฒฝ ์ œ๊ณต
29+
30+
#### ๋†’์€ ์ด์‹์„ฑ(Portability)
31+
- ๋กœ์ปฌ ๋…ธํŠธ๋ถ, ์˜จํ”„๋ ˆ๋ฏธ์Šค ์„œ๋ฒ„, ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ **์–ด๋””์„œ๋‚˜ ์‹คํ–‰**
32+
- ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(Docker Hub, Private Registry)์— ์ด๋ฏธ์ง€๋ฅผ ์ค‘์•™ํ™”
33+
34+
#### ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐ ์Šค์ผ€์ผ๋ง
35+
- ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„๋กœ ์„œ๋น„์Šค ํ™•์žฅยท์ถ•์†Œ
36+
- ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Kubernetes, Docker Swarm)๊ณผ ์—ฐ๋™ํ•ด ์ž๋™ ์Šค์ผ€์ผ๋ง
37+
38+
#### ๋ฆฌ์†Œ์Šค ํšจ์œจ์„ฑ
39+
- VM ๋Œ€๋น„ ์˜ค๋ฒ„ํ—ค๋“œ ์ ์Œ โ†’ ๋™์ผ ํ•˜๋“œ์›จ์–ด์—์„œ ๋” ๋งŽ์€ ์›Œํฌ๋กœ๋“œ ์‹คํ–‰
40+
- cgroups๋ฅผ ํ†ตํ•œ CPUยท๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ๊ฐ€๋Šฅ
41+
42+
#### ํ˜‘์—… ๋ฐ CI/CD ์ตœ์ ํ™”
43+
- ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ฒ„์ „ ๊ด€๋ฆฌ
44+
- ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด `docker build` โ†’ `docker push` โ†’ `docker run`์„ ํ†ตํ•œ ์ž๋™ํ™”
45+
46+
## Image & Container
47+
### ์ด๋ฏธ์ง€(Image)
48+
49+
- **์ •์˜**
50+
์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ(์Šค๋ƒ…์ƒท)์œผ๋กœ, ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œยท๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌยท์„ค์ • ํŒŒ์ผ์„ **๋ ˆ์ด์–ด(layer)** ๋‹จ์œ„๋กœ ์ €์žฅ
51+
- **ํŠน์ง•**
52+
- **๋ถˆ๋ณ€(Immutable)**: ํ•œ ๋ฒˆ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ
53+
- **๋ ˆ์ด์–ด ์บ์‹œ**: ๋ณ€๊ฒฝ ์—†๋Š” ๋ ˆ์ด์–ด๋Š” ์žฌ๋นŒ๋“œํ•˜์ง€ ์•Š์•„ ๋นŒ๋“œ ์†๋„ ๋ฐ ์ €์žฅ ํšจ์œจ ์ฆ๊ฐ€
54+
- **๊ณต์œ  ๊ฐ€๋Šฅ**: ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๊ฐ€ ๋™์ผํ•œ ๋ ˆ์ด์–ด๋ฅผ ์ฐธ์กฐ
55+
- **์ฃผ์š” ๋ช…๋ น์–ด**
56+
- `docker build -t <์ด๋ฆ„>:<ํƒœ๊ทธ> .` โ†’ Dockerfile๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
57+
- `docker images` โ†’ ๋กœ์ปฌ ์ด๋ฏธ์ง€ ๋ชฉ๋ก
58+
- `docker pull <์ด๋ฏธ์ง€>` / `docker push <์ด๋ฏธ์ง€>` โ†’ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋™๊ธฐํ™”
59+
60+
### ์ปจํ…Œ์ด๋„ˆ(Container)
61+
62+
- **์ •์˜**
63+
์ด๋ฏธ์ง€์— **์ฝ๊ธฐ-์“ฐ๊ธฐ ๋ ˆ์ด์–ด**๋ฅผ ๋”ํ•ด ์‹ค์ œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ธ์Šคํ„ด์Šค
64+
65+
- **ํŠน์ง•**
66+
- **๊ฒฉ๋ฆฌ(Isolation)**: ๋„คํŠธ์›Œํฌ, ํ”„๋กœ์„ธ์Šค, ํŒŒ์ผ์‹œ์Šคํ…œ์ด ๋ถ„๋ฆฌ
67+
- **๋ผ์ดํ”„์‚ฌ์ดํด**: ์ƒ์„ฑ(create) โ†’ ์‹œ์ž‘(start) โ†’ ์ค‘์ง€(stop) โ†’ ์‚ญ์ œ(rm)
68+
- **์ผ๊ด€์„ฑ**: ์–ด๋””์„œ ์‹คํ–‰ํ•ด๋„ ๋™์ผ ๋™์ž‘ ๋ณด์žฅ
69+
70+
- **์ฃผ์š” ๋ช…๋ น์–ด**
71+
- `docker run <์ด๋ฏธ์ง€>` โ†’ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑยท์‹œ์ž‘
72+
- `docker ps` / `docker ps -a` โ†’ ์‹คํ–‰ ์ค‘/์ „์ฒด ์ปจํ…Œ์ด๋„ˆ
73+
- `docker exec -it <์ปจํ…Œ์ด๋„ˆ>` โ†’ ๋‚ด๋ถ€ ๋ช…๋ น ์‹คํ–‰
74+
- `docker stop/start/rm <์ปจํ…Œ์ด๋„ˆ>` โ†’ ์ค‘์ง€ยท์žฌ์‹œ์ž‘ยท์‚ญ์ œ
75+
76+
์ง€๊ธˆ๊นŒ์ง€ Docker์˜ ๊ฐœ๋…๊ณผ ํ•„์š”์„ฑ์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
77+
๋‹ค์Œ ์„ธ์…˜์—์„œ๋Š” Docker ๊ธฐ๋ณธ ๋ช…๋ น์–ด(`docker run`, `docker ps`, `docker exec`, `docker logs` ๋“ฑ)๋ฅผ ์ง์ ‘ ์‹ค์Šตํ•˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ด…๋‹ˆ๋‹ค.

0 commit comments

Comments
ย (0)