728x90
λ°μν
6μ₯ λ컀 λ³Όλ₯¨μ μ΄μ©ν νΌμμ€ν΄νΈ μ€ν 리μ§
6.1 컨ν μ΄λ μ λ°μ΄ν°κ° μ¬λΌμ§λ μ΄μ
- 컨ν μ΄λμ λμ€ν¬ μμ μ΄λ―Έμ§ λ μ΄μ΄λ₯Ό μμλλ‘ ν©μ³ λ§λ κ°μ νμΌ μμ€ν μ΄λ€.
- λͺ¨λ 컨ν μ΄λλ λ 립λ νμΌ μμ€ν μ κ°λλ€.
- μ¦, ν 컨ν μ΄λμμ νμΌ μμ€ν μ ν΅ν΄ νμΌμ μμ νλλΌλ λ€λ₯Έ 컨ν μ΄λλ μν₯μ λ°μ§ μλλ€.
- 컨ν μ΄λλ₯Ό μ’ λ£ν΄λ νμΌ μμ€ν μ μμ λμ§ μλλ€.
$ docker container run --name rn1 diamol/ch06-random-number
$ docker container run --name rn2 diamol/ch06-random-number
$ docker container cp rn1:/random/number.txt number1.txt
$docker container cp rn2:/random/number.txt number2.txt
$ cat number1.txt
12370
$ cat number2.txt
254
- 컨ν μ΄λμ νμΌ μμ€ν μ λ¨μΌ λμ€ν¬λ€. (Linux: /dev/sda1, Window: C:\)
- μ΄ λμ€ν¬λ λμ»€κ° μ¬λ¬ μΆμ²λ‘λΆν° ν©μ³ λ§λ€κ³ 컨ν μ΄λμ μ λ¬ν κ°μ νμΌ μμ€ν μ΄λ€.
- μ΄ μΆμ²λ κΈ°λ³Έμ μΌλ‘ μ΄λ―Έμ§ λ μ΄μ΄μ 컨ν μ΄λμ κΈ°λ‘ κ°λ₯ λ μ΄μ΄λ‘ ꡬμ±λλ€.
- μ΄λ―Έμ§ λ μ΄μ΄λ λͺ¨λ 컨ν μ΄λκ° κ³΅μ νμ§λ§ κΈ°λ‘ κ°λ₯ λ μ΄μ΄λ 컨ν μ΄λλ§λ€ λ€λ₯΄λ€.
- μ΄λ―Έμ§ λ μ΄μ΄λ μ½κΈ°μ μ©μ΄κ³ , κ° μ»¨ν μ΄λκ° λ°λ‘ κ°λ κΈ°λ‘ κ°λ₯ λ μ΄μ΄λ 컨ν μ΄λμ κ°μ μμ μ£ΌκΈ°λ₯Ό κ°λλ€.
- μ΄λ―Έμ§ λ μ΄μ΄λ μ΄λ―Έμ§λ₯Ό λ΄λ €λ°λ μκ°λΆν° μμ ν λκΉμ§ λ‘컬 μ»΄ν¨ν°μ μ΄λ―Έμ§ λ μ΄μ΄μ μ‘΄μ¬νλ€.
- μ°κΈ° κ°λ₯ λ μ΄μ΄λ 컨ν μ΄λλ₯Ό μ€νν λ μμ±λλ©° 컨ν μ΄λλ₯Ό μμ ν λ ν¨κ» μμ λλ€. μ¦, 컨ν μ΄λλ₯Ό μ’ λ£νλ κ²μΌλ‘λ μμ λμ§ μλλ€.
λ컀μ κΈ°λ‘ μ€ λ³΅μ¬ (copy-on-write)
- λ컀μ μ΄λ―Έμ§ λ μ΄μ΄λ μ½κΈ° μ μ©μ΄λ€.
- κ·Έλ¬λ, λ컀λ κΈ°λ‘ μ€ λ³΅μ¬(copy-on-write) λΌλ λ°©λ²μ μ¬μ©ν΄μ μ½κΈ° μ μ© λ μ΄μ΄μ νμΌμ μμ ν μ μλ€.
- μμ ν νμΌμ μ°κΈ° κ°λ₯ λ μ΄μ΄λ‘ 볡μ¬ν ν, μ°κΈ° κ°λ₯ λ μ΄μ΄μμ μμ νλ€.
- μ΄ λ°©λ²μ΄ λμ»€κ° μ€ν 리μ§λ₯Ό λ§€μ° ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ λΉλ²μ΄λ€.
$ docker container run --name f1 diamol/ch06-file-display
...
<https://www.manning.com/books/learn-docker-in-a-month-of-lunches>
$ echo “<http://eltonstoneman.com>” > url.txt
$ docker container cp url.txt f1:/input.txt
$ docker container start --attach f1
<http://eltonstoneman.com>
- λ‘컬 μ»΄ν¨ν°μμ 컨ν μ΄λλ‘ νμΌμ 볡μ¬νμ¬ μ¬ μ€νμ μΆλ ₯κ°μ΄ λ³κ²½λμλ€.
- 컨ν μ΄λ μ νμΌμ μμ νλ©΄ 컨ν μ΄λμ λμμ μν₯μ λ―ΈμΉλ€.
- κ·Έλ¬λ, μ΄λ―Έμ§λ₯Ό 곡μ νλ λ€λ₯Έ 컨ν μ΄λλ μ΄λ―Έμ§λ μν₯μ λ°μ§ μλλ€.
- μμ λ νμΌμ ν΄λΉ 컨ν μ΄λμ κΈ°λ‘ κ°λ₯ λ μ΄μ΄μλ§ μ‘΄μ¬νκΈ° λλ¬Έμ΄λ€.
- λν, μλ‘μ΄ μ»¨ν μ΄λλ μ΄λ―Έμ§λ‘λΆν° λ°μ μ΅μ΄μ λ΄μ©μ λ΄μ νμΌμμ€ν μ κ°μ§λ©°, f1 컨ν μ΄λκ° μμ λλ©΄ μμ λ νμΌλ μ¬λΌμ§λ€.
$ docker container run --name f2 diamol/ch06-file-display
# κΈ°μ‘΄ μ΄λ―Έμ§μ νμΌλ΄μ©μΈ κ²μ νμΈ κ°λ₯.
<https://www.manning.com/books/learn-docker-in-a-month-of-lunches>
$ docker container rm -f f1
$ docker container cp f1:/input.txt .
# 컨ν
μ΄λ μμ μ νμΌ μμ€ν
μ λ΄μ©λ μμ λ κ²μ νμΈ κ°λ₯.
Error response from daemon: No such container: f1
- 컨ν μ΄λ νμΌ μμ€ν μ 컨ν μ΄λμ κ°μ μμ μ£ΌκΈ°λ₯Ό κ°λλ€.
- 컨ν μ΄λκ° μμ λλ©΄ μ΄ μ»¨ν μ΄λμ κΈ°λ‘ κ°λ₯ λ μ΄μ΄μ μμ λ λ°μ΄ν°λ ν¨κ» μμ λλ€.
- λ컀 μ¬μ©μ μμ΄ μ»¨ν μ΄λ μμ λ λΉλ²νκ² μΌμ΄λλ€.
- λ°λΌμ, 컨ν μ΄λ λ΄λΆ λ°μ΄ν°λ₯Ό μμμ μΌλ‘ κ΄λ¦¬νκΈ° μν΄μλ λ컀 λ³Όλ₯¨(Docker Volume), λ§μ΄νΈ(Mount) λ₯Ό νμ©ν΄μΌ νλ€.
- λ컀 λ³Όλ₯¨κ³Ό λ§μ΄νΈλ 컨ν μ΄λμλ λ³κ°μ μμ μ£ΌκΈ°λ₯Ό κ°μΌλ―λ‘ μ»¨ν μ΄λκ° λ체λλλΌλ λ°μ΄ν°λ₯Ό μ§μμ μΌλ‘ κ΄λ¦¬ν μ μλ€.
6.2 λ컀 λ³Όλ₯¨μ μ¬μ©νλ 컨ν μ΄λ μ€ννκΈ°
- λ컀 λ³Όλ₯¨μ λ컀μμ μ€ν 리μ§λ₯Ό λ€λ£¨λ λ¨μλ€.
- λ³Όλ₯¨μ 컨ν μ΄λμ λ 립μ μΌλ‘ μ‘΄μ¬νλ©°, λ³λμ μμ μ£ΌκΈ°λ₯Ό κ°λλ€.
- νΌμμ€ν΄μκ° νμν μ ν리μΌμ΄μ μ 컨ν μ΄λλ‘ μ€ννλ €λ©΄ λ³Όλ₯¨μ μ¬μ©ν΄μΌ νλ€.
- μ ν리μΌμ΄μ μ μλ‘μ΄ μ»¨ν μ΄λλ‘ μμ±ν΄λ λ€μ λ³Όλ₯¨μ μ°κ²°νλ©΄ λ°μ΄ν°λ₯Ό μ μ§ν μ μλ€.
컨ν μ΄λμμ λ³Όλ₯¨μ μ¬μ©νλ λ°©λ²
- μλμΌλ‘ μ§μ λ³Όλ₯¨ μμ±ν΄μ 컨ν μ΄λμ μ°κ²° νλ λ°©λ²κ³Ό Dockerfile μ€ν¬λ¦½νΈμμ VOLUME μΈμ€νΈλμ μ μ¬μ©νλ λ°©λ²μ΄ μλ€.
- VOLUME μΈμ€νΈλμ κ³Ό docker container --volume νλκ·Έλ λ³κ°μ κΈ°λ₯μ΄λ€.
- VOLUME μΈμ€νΈλμ μ νμ μλ‘μ΄ λ³Όλ₯¨μ ν¨κ» μμ±νλ€.
- --volume νλκ·Έλ μ΄λ―Έμ§μ λ³Όλ₯¨μ΄ μ μλμ΄ μλλΌλ νμ μ§μ λ λ³Όλ₯¨μ 컨ν μ΄λμ λ§μ΄νΈνλ€.
- --volume-from [container-name] μ΄λΌλ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ νλμ λ³Όλ₯¨μ μ¬λ¬κ°μ 컨ν μ΄λκ° κ³΅μ ν μ μλ€.
- μ¦, μ΄λ―Έμ§μ VOLUME μΈμ€νΈλμ μ΄ μ μλμ΄ μλλΌλ --volume νλκ·Έλ₯Ό μ¬μ©ν κ²½μ°, μλ‘μ΄ λ³Όλ₯¨μ μμ±νμ§ μκ³ μ§μ λ λ³Όλ₯¨μ μ¬μ©νλ€.
- λ³Όλ₯¨μ 컨ν μ΄λ κ° νμΌ κ³΅μ 보λ€λ μ λ°μ΄νΈ κ° μνλ₯Ό 보쑴νκΈ° μν μ©λλ‘ μ¬μ©λμ΄μΌ νλ€.
- λν, μ΄λ―Έμ§μμ μ μνλ κ²λ³΄λ€λ λͺ μμ μΌλ‘ κ΄λ¦¬νλ νΈμ΄ λ λ«λ€.
FROM diamol/dotnet-aspnet
WORKDIR /app
ENTRYPOINT ["dotnet", "ToDoList.dll"]
# /data λλ ν 리μ λ΄μ©μ λ³Όλ₯¨μ μꡬμ μΌλ‘ μ μ₯.
VOLUMN /data
COPY --from=builder /out/ .
$ docker container run --name todo1 -d -p 8010:80 diamol/ch06-todo-list
$ docker container inspect --format '{{.Mounts}}' todo1
[{volume 4441e43e17902fb5792ebdfa8c643b4bada7c81eaa7e501f84fc86fbb599c7df /var/lib/docker/volumes/4441e43e17902fb5792ebdfa8c643b4bada7c81eaa7e501f84fc86fbb599c7df/_data /data local true }]
$ docker volume ls
DRIVER VOLUME NAME
local 4441e43e17902fb5792ebdfa8c643b4bada7c81eaa7e501f84fc86fbb599c7df
...
# μλ‘μ΄ λ³Όλ₯¨κ³Ό ν¨κ» μμ±
$ docker container run --name todo2 -d diamol/ch06-todo-list
$ docker container exec todo2 ls /data
# todo1 컨ν
μ΄λμ λ³Όλ₯¨μ 곡μ
$ docker container run -d --name t3 --volumes-from todo1 diamol/ch06-todo-list
$ docker container exec t3 ls /data
# λ³΅μ¬ λμ κ²½λ‘ νκ²½λ³μ μ μ
$ target='/data'
# λ³Όλ₯¨ μμ±
$ docker volume create todo-list
# 컨ν
μ΄λ μ€ν
$ docker container run -d -p 8011:80 -v todo-list:$target --name todo-v1 diamol/ch06-todo-list
# <http://localhost:8011> λ°μ΄ν° μΆκ°
# v1 컨ν
μ΄λ μμ
$ docker container rm -f todo-v1
# v1 μ΄ μ¬μ©νλ λ³Όλ₯¨ μ°κ²°
$ docker container run -d -p 8011:80 -v todo-list:$target --name todo-v2 diamol/ch06-todo-list:v2
6.3 νμΌ μμ€ν λ§μ΄νΈλ₯Ό μ¬μ©νλ 컨ν μ΄λ μ€ννκΈ°
- λ³Όλ₯¨μ νΈμ€νΈ μ»΄ν¨ν°μ μ‘΄μ¬νμ§λ§, 컨ν μ΄λμλ λΆλ¦¬λμ΄ μλ€.
- λ³Όλ₯¨μ μ₯μ μ 컨ν μ΄λμ μ€ν 리μ§μ μμ μ£ΌκΈ°λ₯Ό λΆλ¦¬νλ©΄μλ λ컀λ₯Ό μ¬μ©νλ λ°©μ κ·Έλλ‘ μ€ν 리μ§λ₯Ό λ€λ£° μ μλ€λ μ μ΄λ€.
λ°μΈλ λ§μ΄νΈ(bind mou)λ?
- λ°μ΄λ λ§μ΄νΈλ νΈμ€νΈ μ»΄ν¨ν° νμΌ μμ€ν μ λλ ν°λ¦¬λ₯Ό 컨ν μ΄λ νμΌ μμ€ν μ λλ ν°λ¦¬λ‘ λ§λ λ€.
- λ°μ΄λ λ§μ΄νΈλ₯Ό μ¬μ©νλ©΄ νΈμ€νΈ μ»΄ν¨ν°μ νμΌ μμ€ν μ λͺ μμ μΌλ‘ μ§μ ν΄ μ»¨ν μ΄λ λ°μ΄ν°λ‘ μ¬μ©ν μ μλ€.
- λ°μΈλ λ§μ΄νΈλ μλ°©ν₯μΌλ‘ λμνλ€.
- 컨ν μ΄λμμ λ§λ νμΌμ νΈμ€νΈμμ μμ ν μλ μκ³ , νΈμ€νΈμμ λ§λ νμΌμ 컨ν μ΄λμμ μμ ν μ μλ€.
$ source="$(pwd)/databases" && target='/data'
$ mkdir ./databases
$ docker container run --mount type=bind,source=$source,target=$target -d -p 8012:80 diamol/ch06-todo-list
$ curl <http://localhost:8012>
$ ls ./databases
- 컨ν μ΄λλ λ³΄ν΅ νΈμ€νΈ μμ€ν μ λν μν₯λ ₯μ μ΅μννκΈ° μν΄ λ£¨νΈ κΆνμ΄ μλ μΌλ° μ¬μ©μλ‘ μ€νλλ€.
- κ·Έλ¬λ, λ°μΈλ λ§μ΄νΈλ₯Ό μ¬μ©νλ©΄ νΈμ€νΈ μ»΄ν¨ν° νμΌμ μ κ·ΌνκΈ° μν΄ κΆν μμΉ νμνλ€.
- κ·Έλμ, Dockerfile μ€ν¬λ¦½νΈμμ USER μΈμ€νΈλμ μ μ¬μ©ν΄ 컨ν μ΄λμ κ΄λ¦¬μ κΆνμ λΆμ¬νλ€.
- νμΌμ μ°κΈ° μμ μ ν νμκ° μλ€λ©΄ νΈμ€νΈ μ»΄ν¨ν°μ λλ ν°λ¦¬λ₯Ό μ½κΈ° μ μ©μΌλ‘ 컨ν μ΄λμ μ°κ²°ν μλ μλ€.
- μ΄ λ°©λ²μ μ£Όλ‘ conf κ°μ΄ μ€μ νμΌμ νΈμ€νΈμ λ§μ΄νΈν΄λκ³ , μ΄λ―Έμ§μ λ³κ²½μμ΄ νΈμ€νΈμ conf νμΌ μμ λ§μΌλ‘ 컨ν μ΄λλ₯Ό μ€μ μ λ³κ²½νκΈ° μν΄ λ§μ΄ μ¬μ©λλ€.
$ cd ./ch06/exercises/todo-list
# κ²½λ‘ λ¬Έμμ΄μ νκ²½ λ³μλ‘ μ μ
$ source="$(pwd)/config" && target='/app/config' # 리λ
μ€
# λ°μΈλ λ§μ΄νΈλ₯Ό μ μ©ν΄ 컨ν
μ΄λ μ€ν
$ docker container run --name todo-configured -d -p 8013:80 --mount type=bind,source=$source,target=$target,readonly diamol/ch06-todo-list
# μ ν리μΌμ΄μ
μλ μ¬λΆ νμΈ
$ curl <http://localhost:8013>
# 컨ν
μ΄λ λ‘κ·Έ νμΈ
# νΈμ€νΈμ λ‘κ·Έ λ 벨 μ€μ νμΌμ μ½μ΄μ DEBUG λ‘κ·Έκ° μΆλ ₯λ¨
$ docker container logs todo-configured
- νΈμ€νΈ μ»΄ν¨ν°κ° μ κ·Όν μ μλ μ€ν 리μ§λΌλ©΄ 무μμ΄λ λ°μ΄λ λ§μ΄νΈλ₯Ό ν΅ν΄ 컨ν μ΄λμ μ°κ²°ν μ μλ€.
- μλ₯Ό λ€μ΄ /mnt/nfs μ κ°μ΄ NFS μμ€ν κ²½λ‘λ₯Ό λ§μ΄νΈνμ¬ λΆμ° μ€ν 리μ§λ₯Ό 컨ν μ΄λμ μ°κ²°ν΄ μ¬μ©νμ¬ μ λ’°μ±μ ν¬κ² κ°μ ν μ μλ€.
6.4 νμΌ μμ€ν λ§μ΄νΈμ νκ³μ
- λ°μΈλ λ§μ΄νΈμ λ³Όλ₯¨μ ν¨μ¨μ μΌλ‘ νμ©νλ €λ©΄ κ° μμμ ν΅μ¬ μ¬μ© μλ리μ€μ νκ³μ μ μ΄ν΄ν΄μΌ νλ€.
첫 λ²μ§Έ μλλ¦¬μ€ - 컨ν μ΄λμ λ§μ΄νΈ λμ λλ ν°λ¦¬κ° μ΄λ―Έ μ‘΄μ¬νκ³ μ΄λ―Έμ§ λ μ΄μ΄μ μ΄ λλ ν°λ¦¬μ νμΌμ΄ ν¬ν¨λΌ μλ κ²½μ°.
# νκ²½λ³μ μ§μ
$ source="$(pwd)/new" && target='/init'
# 컨ν
μ΄λ μ€ν
$ docker container run diamol/ch06-bind-mount
abc.txt
def.txt
# λ§μ΄νΈ κ²½λ‘ λ³κ²½
$ # docker container run --mount type=bind,source=$source,target=$target diamol/ch06-bind-mount
._123.txt
._456.txt
123.txt
456.txt
- μ΄λ―Έ μ‘΄μ¬νλ λμ λλ ν°λ¦¬μ λ§μ΄νΈνλ©΄, λ§μ΄νΈμ μλ³Έ λλ ν°λ¦¬κ° κΈ°μ‘΄ λλ ν°λ¦¬λ₯Ό μμ ν λ체νλ€.
- μ¦, μ΄λ―Έμ§μ ν¬ν¨λΌ μλ μλ νμΌμ μ¬μ©ν μ μλ€.
- μ²μ μ€νμμλ abc.txt , def.txt λ₯Ό μΆλ ₯λμλ€,
- μ΄ νμΌμ μ΄λ―Έμ§ λ μ΄μ΄μμ 컨ν μ΄λλ‘ μ λ¬λ νμΌμ΄λ€.
- λ λ²μ§Έ 컨ν μ΄λλ μ΄λ―Έμ§ λ μ΄μ΄μμ λ°λ νμΌμ΄ λ§μ΄νΈλ νμΌλ‘ λ체λμμΌλ©°, νμΌ λͺ©λ‘μ΄ 123.txt , 456.txt λ‘ λ°λμλ€.
λλ²μ§Έ μλλ¦¬μ€ - νΈμ€νΈ νμΌ νλλ₯Ό 컨ν μ΄λ μ΄λ―Έ μ‘΄μ¬νλ λλ ν λ¦¬λ‘ λ§μ΄ν κ²½μ°
- μ΄λ―Έμ§ λ μ΄μ΄ λΆν°μ νμΌκ³Ό νΈμ€νΈ λ§μ΄νΈ λ κ²½λ‘μ νμΌμ΄ λͺ¨λ λνλλ€.
- λ¨, μλμ° μ»¨ν μ΄λλ ν΄λΉ κΈ°λ₯μ μ 곡νμ§ μλλ€.
- μλμ° μ»¨ν μ΄λμ 리λ μ€ μ»¨ν μ΄λμ λμμ΄ μΌμΉνμ§ μλ λͺ μλλ μμμ΄λ€.
# νΈμ€νΈ λ§μ΄νΈ κ²½λ‘μ 컨ν
μ΄λ λ΄λΆ κ²½λ‘ νμΌ λͺ¨λ μΆλ ₯λ¨.
$ docker container run --mount type=bind,source="$(pwd)/new/123.txt",target=/init/123.txt diamol/ch06-bind-mount
123.txt
abc.txt
def.txt
μΈ λ²μ§Έ μλλ¦¬μ€ - λΆμ° νμΌ μμ€ν μ 컨ν μ΄λμ λ°μ΄λ λ§μ΄νΈ νλ κ²½μ°.
- λΆμ° νμΌ μμ€ν μ μ¬μ©νλ©΄ λ€νΈμν¬μμ λͺ¨λ μ»΄ν¨ν°μμ λ°μ΄ν°μ μ κ·Όν μ μλ€.
- λΆμ° νμΌ μμ€ν μ 컨ν μ΄λμ λ§μ΄νΈνλ©΄ μΌλ°μ μΈ νμΌ μμ€ν μ μΌλΆμ²λΌ 보μ΄μ§λ§, μ§μνμ§ μλ λμμ΄ μμ μ μλ€.
- μλ₯Όλ€μ΄, Azure Files λ νλ λ§ν¬ κΈ°λ₯μ μ 곡νμ§ μκΈ° λλ¬Έμ, PostgreSQL κ° ν΄λΉ Azure Files λ₯Ό λ§μ΄νΈνμ¬ μ¬μ©ν κ²½μ° μ€λ₯κ° λ°μν μ μλ€.
- μ΄λ¬ν κ²½μ°λ λ§€μ° λλ¬Έ κ²½μ°μ΄μ§λ§, νλ² λ°μνλ©΄ ν΄κ²°μ΄ νλ€λ€.
- λν, λ§μ 컨ν μ΄λκ° λΆμ° μμ€ν μ λ§μ΄νΈλμ΄ μκ³ , ν΄λΉ 컨ν μ΄λλ€μ΄ λ§μ File IO κ° μΌμ΄λ κ²½μ°κ° μλ€.
- λ°λΌμ, 컨ν μ΄λμ λΆμ° μ€ν 리μ§λ₯Ό λ§μ΄νΈν κ³νμ΄λΌλ©΄, 컨ν μ΄λλ€μ λ§μ΄νΈ λͺ©μ κ³Ό 컨ν μ΄λμ λΆμ° μμ€ν μ κ΄κ³λ₯Ό μΆ©λΆν κ³ λ €ν΄μΌ νλ€
6.5 컨ν μ΄λμ νμΌ μμ€ν μ μ΄λ»κ² λ§λ€μ΄μ§λκ°?
- λͺ¨λ 컨ν μ΄λλ λμ»€κ° λ€μν μΆμ²λ‘λΆν° λͺ¨μ λ§λ λ¨μΌ κ°μ λμ€ν¬λ‘ ꡬμ±λ νμΌ μμ€ν μ κ°λλ€.
- μ΄ νμΌ μμ€ν μ μ λμΈ νμΌ μμ€ν (Union File System) μ΄λΌ νλ€.
- μ λμΈ νμΌ μμ€ν μ OS λ§λ€ λ€λ₯Έ λ°©μμΌλ‘ ꡬνλμ΄ μμ§λ§, λ컀λ νΈμ€νΈμ μ΄μ체μ μ λ§κ² μ΅μ μ ꡬνμ μ νν΄μ£ΌκΈ° λλ¬Έμ μ΄κ²μ λν΄μλ μ κ²½ μΈ νμκ° μλ€.
- 컨ν μ΄λλ μ λμΈ νμΌ μμ€ν μ ν΅ν΄ 물리μ μμΉκ° μλ‘ λ€λ₯Έ νμΌκ³Ό λλ ν 리μ λ§μΉ λ¨μΌ λμ€ν¬λ₯Ό μ¬μ©νλ― μ κ·Όν μ μλ€.
- 컨ν μ΄λ λ΄λΆ μ ν리μΌμ΄μ μ μ μ₯μμλ λ¨μΌ λμ€ν¬λ§μ λ°λΌλ³΄μ§λ§, λ컀μ κ²½μ° μ¬λ¬ λ μ΄μ΄(μ΄λ―Έμ§, λ§μ΄νΈ λ³Όλ₯¨)λ₯Ό ν΅ν΄ ꡬμ±λ κ²μ΄λ€.
- κ·Έλ¬λ, κΈ°λ‘ κ°λ₯ λ μ΄μ΄λ λ¨ νλμ΄λ€.
κΈ°λ‘ κ°λ₯ λ μ΄μ΄
λΉμ©μ΄ λΉμΌ κ³μ°μ΄λ λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ₯ν΄μΌ νλ λ°μ΄ν°μ μΊμ± λ± λ¨κΈ° μ μ₯μ μ ν©νλ€.
κ° μ»¨ν μ΄λλ§λ€ λ 립μ μΈ κΈ°λ‘ κ°λ₯ λ μ΄μ΄λ₯Ό κ°μ§λ©°, 컨ν μ΄λκ° μμ λλ©΄ μ μ₯λ λ°μ΄ν°λ μ μ€λλ€.
- λ‘컬 λ°μΈλ λ§μ΄νΈ
- νΈμ€νΈ μ»΄ν¨ν°μ 컨ν μ΄λ κ° λ°μ΄ν°λ₯Ό 곡μ νκΈ° μν΄ μ¬μ©νλ€.
- νΈμ€νΈμ μ€μ νμΌμ 곡μ νμ¬ μ¬μ©ν¨μΌλ‘μ¨, μ΄λ―Έμ§ λΉλ μμ΄ μ¦μ 컨ν μ΄λλ‘ μ λ¬ν μ μλ€.
- λΆμ° λ°μΈλ λ§μ΄νΈ:
- λ€νΈμν¬ μ€ν 리μ§μ 컨ν μ΄λ κ°μ λ°μ΄ν°λ₯Ό 곡μ νκΈ° μν΄ μ¬μ©νλ€.
- κ°μ©μ±μ΄ λμ§λ§ λ‘컬 λμ€ν¬μ λΉκ΅ν΄ μ§μνμ§ μλ νμΌ μμ€ν κΈ°λ₯μ΄ μκ±°λ μ±λ₯ λ©΄μμ μ°¨μ΄κ° μμ μ μλ€.
- μ½κΈ° μ μ©μΌλ‘ μ€μ νμΌμ μ λ¬νκ±°λ 곡μ μΊμλ‘ νμ©ν μ μμΌλ©°, μ½κΈ° μ°κΈ° κ°λ₯μΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯ν΄ λμΌ λ€νΈμν¬μμ λͺ¨λ 컨ν μ΄λλ μ»΄ν¨ν°μ λ°μ΄ν°λ₯Ό 곡μ νλ λ° μ ν©νλ€.
- λ³Όλ₯¨ λ§μ΄νΈ
- 컨ν μ΄λμ λ컀 κ°μ²΄μΈ λ³Όλ₯¨ κ°μ λ°μ΄ν°λ₯Ό 곡μ νκΈ° μν΄ μ¬μ©λλ€.
- λ³Όλ₯¨ λ§μ΄νΈλ₯Ό μ¬μ©νλ©΄ μ ν리μΌμ΄μ μ΄ λ³Όλ₯¨μ λ°μ΄ν°λ₯Ό μꡬμ μΌλ‘ μ μ₯νλ€.
- 컨ν μ΄λλ₯Ό κ΅μ²΄νλ λ°©μμΌλ‘ μ ν리μΌμ΄μ μ μ λ°μ΄νΈν΄λ, μ΄μ λ²μ 컨ν μ΄λμ λ°μ΄ν°λ₯Ό κ·Έλλ‘ μ μ§ν μ μλ€.
μ΄λ―Έμ§ λ μ΄μ΄
- μ΄λ―Έμ§ λ μ΄μ΄λ 컨ν μ΄λμ μ΄κΈ° νμΌ μμ€ν μ ꡬμ±νλ€.
- λ μ΄μ΄λ μ μΈ΅ ꡬ쑰λ₯Ό κ°λλ°, νμ λ μ΄μ΄μ μ΄μ λ μ΄μ΄μ λ΄μ©μ΄ μλ‘ μΆ©λνλ κ²½μ° νμ λ μ΄μ΄μ λ΄μ©μ΄ μ μ©λλ€.
- λ μ΄μ΄λ μ½κΈ° μ μ©μ΄λ©° μ¬λ¬ 컨ν μ΄λκ° κ³΅μ νλ€.
6.6 μ°μ΅λ¬Έμ
- λ¬Έμ : κΈ°μ‘΄μ ν μΌμ΄ λ±λ‘λ μνλ‘ μμλλ 컨ν μ΄λλ₯Ό, μ΄κΈ°νλ μνλ‘ μμνλλ‘ μ€μ .
- ν΄κ²° λ°©μ: 컨ν μ΄λ λ΄λΆμ μ€μ νμΌμ μΈλΆμμ κ΄λ¦¬νκ³ , 컨ν μ΄λ μ€ν μ μ΄ νμΌμ λ§μ΄νΈνμ¬ μ΄κΈ°νλ μνλ‘ λ§λ€μ΄μΌ νλ€.
# μ€νμ€μΈ λͺ¨λ 컨ν
μ΄λ μμ
$ docker rm -f $(docker ps -aq)
# 컨ν
μ΄λ μ€ν
$ docker container run -d -p 8081:80 diamol/ch06-lab
# <http://host:8081> μ μ ν todo list 4κ° λ±λ‘λμ΄μλκ±° νμΈ
# 컨ν
μ΄λ λ΄λΆ μ μ
$ docker exec -it d6ef8f670f7f /bin/bash
# μ΄λ―Έμ§ λ μ΄μ΄μμ κ°μ Έμ¨ μ€μ νμΌ νμΈ.
$ cat appsettings.json
{
"ConnectionStrings": {
"ToDoDb": "Filename=/init-data/todo-list.db"
}
}
$ exit
# λ¬Έμ μ€μ νμΌ κ²½λ‘ μ΄λ
$ cd /ch06/lab/solution
# λ¬Έμ μ€μ νμΌ νμΈ
$ cat config.json
{
"ConnectionStrings": {
"ToDoDb": "Filename=/new-data/todo-list.db"
}
$ cd ..
# λ³Όλ₯¨ μμ±
$ docker volume create ch06-lab
# λ§μ΄νΈ κ²½λ‘ νκ²½ λ³μ λ±λ‘
$ configSource="$(pwd)/solution" && configTarget='/app/config' && dataTarget='/new-data'
# 컨ν
μ΄λ μ€ν
$ docker container run -d -p 8016:80 --mount type=bind,source=$configSource,target=$configTarget,readonly --volume ch06-lab:$dataTarget diamol/ch06-lab
728x90
λ°μν