π» Microsoft Docker Compose μ¬μ©
μ¬λ¬ κ°μ 컨ν μ΄λκ° νλμ μ ν리ν€μμ μΌλ‘ λμν λ μ΄λ₯Ό ν μ€νΈνλ €λ©΄ κ° μ»¨ν μ΄λλ₯Ό νλμ© μμ±ν΄μΌ νλ€. μλ₯Ό λ€μ΄ μΉ μ ν리μΌμ΄μ μ ν μ€νΈνλ €λ©΄ μΉ μλ² μ»¨ν μ΄λμ λ°μ΄ν°λ² μ΄μ€ 컨ν μ΄λλ₯Ό μμ±ν΄μΌ νλ€.
μ΄μ²λΌ μ¬λ¬κ°μ 컨ν μ΄λλ‘ κ΅¬μ±λ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν΄ run λͺ λ Ήμ΄λ₯Ό μ¬λ¬ λ² μ¬μ©ν μ μμ§λ§ κ° μ»¨ν μ΄λκ° μ λλ‘ λμνλμ§ νμΈνλ ν μ€νΈ λ¨κ³μμλ μ΄λ κ² νκΈ° λ²κ±°λ‘λ€. λ°λΌμ μ¬λ¬κ°μ 컨ν μ΄λλ₯Ό νλμ μλΉμ€λ‘ μ μν΄ μ»¨ν μ΄λ λ¬ΆμμΌλ‘ κ΄λ¦¬ν μ μλ€λ©΄ μ’ λ νΈλ¦¬ν κ²μ΄λ€.
λ컀 μ»΄ν¬μ¦λ μ¬λ¬κ°μ 컨ν μ΄λμ μ΅μ κ³Ό νκ²½μ μ μν νμΌμ μ½μ΄ 컨ν μ΄λλ₯Ό μμ°¨μ μΌλ‘ μμ±νλ λ°©μμΌλ‘ λμνλ€. λ컀 μ»΄ν¬μ¦μ μ€μ νμΌμ run λͺ λ Ήμ΄μ μ΅μ μ κ·Έλλ‘ μ¬μ©ν μ μμΌλ©°, κ° μ»¨ν μ΄λμ μμ‘΄μ±, λ€νΈμν¬, λ³Όλ₯¨ λ±μ ν¨κ» μ μν μ μλ€. λν μ€μ νμΌμ μ μλ μλΉμ€μ 컨ν μ΄λ μλ₯Ό μ λμ μΌλ‘ μ‘°μ ν μ μμΌλ©° 컨ν μ΄λμ μλΉμ€ λμ€μ»€λ²λ¦¬λ μλμΌλ‘ μ΄λ€μ§λ€.
λ¬Όλ‘ μ΄λ¬ν κΈ°λ₯μ΄ νμνμ§ μλ μκ·λͺ¨ 컨ν μ΄λ κ°λ°νκ²½μμλ λ컀 μμ§μ run λͺ λ Ήμ΄λ‘ 컨ν μ΄λλ₯Ό μμ±νλ κ²μ΄ λ νΈλ¦¬ν μ μκ² λ€. κ·Έλ μ§λ§ 컨ν μ΄λκ° λ§μμ§κ³ μ μν΄μΌν μ΅μ μ΄ λ§λ€λ©΄ λ컀 μ»΄ν¬μ¦λ₯Ό μ¬μ©νλκ² μ’λ€.
μ¬κΈ°μλ μλμ° νκ²½μ κ°μ νκ³ μ€λͺ νλλ‘ νκ² λ€. μλμ°μ λ§₯ OS μμλ λ컀 ν΄λ°μ€λ Docker for Windows, Docker for Macμ μ€μΉνλ©΄ λ컀 μμ§κ³Ό ν¨κ» λ컀 μ»΄ν¬μ¦λ μ€μΉλκΈ° λλ¬Έμ λ°λ‘ λκ°λ₯Ό ν νμλ μλ€.
λ컀 μ»΄ν¬μ¦λ 컨ν μ΄λμ μ€μ μ΄ μ μλ YAML νμΌμΌ μ½μ΄ λ컀 μμ§μ ν΅ν΄ 컨ν μ΄λλ₯Ό μμ±ν΄μ€λ€. λ°λΌμ λ컀 μ»΄ν¬μ¦λ₯Ό μ¬μ©νλ €λ©΄ λ¨Όμ YAML νμΌμ μμ±ν΄μΌ νλ€. Docker Composeλ κΈ°λ³Έμ μΌλ‘ docker-compose.yml νμΌμ μ€μ νμΌλ‘ μ¬μ©νλ€. λ³΄ν΅ μ± νλ‘μ νΈ λ£¨νΈμ νμΌμ λ§λ€μ΄ μ¬μ©νλ€κ³ νλ€.
κ°μ₯ λ¨Όμ μ€ν€λ§ λ²μ μ μ μνλ€. λλΆλΆμ κ²½μ° μ§μλλ μ΅μ λ²μ μ μ¬μ©νλ κ²μ΄ μ’λ€. λ€μμΌλ‘ μ ν리μΌμ΄μ μΌλΆλ‘ μ€ννλ €λ μλΉμ€(λλ 컨ν μ΄λ) λͺ©λ‘μ μ μνλ€.
version: "3.7" # νμ
services: μμ±μμ (νμ)
networks:
# λ€νΈμν¬ μ€μ . μμ΄λ λ¨
volumnes:
#λ³Όλ₯¨ μ€μ . μμ΄λ λ¨
λ¨Όμ μλΉμ€ νλͺ©κ³Ό 컨ν μ΄λ μ΄λ―Έμ§λ₯Ό μ μνλ€. μλΉμ€ μ΄λ¦μ μμλ‘ μ νν μ μλ€.
version: "3.7"
services:
app: # service μ΄λ¦
image: node:14.15.5-alpine # μ΄λ―Έμ§
command: sh -c "yarn install && yarn run dev" # 컨ν
μ΄λ μ€νμ μ€νλ λͺ
λ Ή
ports: # ν¬νΈ 맀ν
- 3000:3000
working_dir: /app # 컨ν
μ΄λ λ΄ μμ
곡κ°(μμΌλ©΄ λ§λ€μ΄μ€)
volumes: # λ³Όλ₯¨ μ€μ (νΈμ€νΈ:컨ν
μ΄λ)
- ./:/app
environment: # νκ²½λ³μ
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
depends_on: # μμ‘΄μ± μ€μ (dbκ° λ¨Όμ μμ±λ νμ appμ΄ μμ±)
- db
restart: always # μ€λ₯κ° λλ©΄ λ°λ‘ λ€μ μμ
db:
image: mariadb:10.5
volumes: # λ³Όλ₯¨ μ€μ (νΈμ€νΈ:컨ν
μ΄λ)
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes: # λ³Όλ₯¨μ λ°λ‘ μμ±
todo-mysql-data:
μ΄μ docker-compose.yml νμΌμ΄ μ€λΉλμμΌλ―λ‘ μμν μ μλ€.
$ docker-compose up -d
μ²μμ mariadb_app_1(node 컨ν μ΄λ)κ° μ€νλμλ§μ κΊΌμ§λ μ€λ₯κ° λμ νλμ μ΄λ €μμ κ²ͺμλ€. μ΄λ΄λλ λ°μ λ‘κ·Έ νμΈ λ°©λ²μ μ¬μ©νλ©΄ λ¬΄μ¨ μ€λ₯λλ¬Έμ μ€νμ΄ μλλμ§ νμΈν μ μλ€.
μΌλ¨ λλ μ²μμ node:14.15.5-appineμ app ν΄λκ° μκ³ κ·Έ μμ λ΄μ©μ΄ μμ΄μ yarnμΌλ‘ μ€μΉνκ³ μ€νλλλ‘ νλκ±΄μ€ μμλ€. κ·Όλ° μκ³ λ³΄λκΉ app ν΄λλ μ‘΄μ¬νμ§ μκ³ , working_dirλ₯Ό ν΅ν΄ app ν΄λλ₯Ό μμ±ν νμ λ΄κ° μ§κΈ μλ ν΄λλ₯Ό 컨ν μ΄λμλ€κ° 볡μ¬λΆμ¬λ£κΈ° ν λ€μμ μ€νλλλ‘ νλ κ±°μλ€...
μ... μκ°ν΄λ³΄λ μ§μ§ λ°λ³΄κ°μ μ€μλ₯Ό νλ€.
working_dir: /app
=> 컨ν
μ΄λμ μμ
곡κ°μ app ν΄λλ‘ μ€μ . μλ€λ©΄ μμμ μμ±ν΄μ€λ€.volumes: ./:/app
=> λ³Όλ₯¨μ€μ μ μ΄λ κ² νλ€. μ΄κ²μ νμ¬ λ΄ μ»΄ν¨ν°μ νμ¬ κ²½λ‘μ 컨ν
μ΄λμ΄μ app ν΄λμ 곡μ νκ² λ€λ μλ―Έμ΄λ€. β μ 리ν΄λ³΄λ©΄ νμ¬ μ»΄ν¨ν°μ μμ 곡κ°κ³Ό 컨ν μ΄λμ app μμ 곡κ°μ μλ‘ μΌμΉμμΌμ 컨ν μ΄λμμ μ€νλλλ‘ λ§λ κ²μ΄λ€. (μ€.. μ΄λ¬λ©΄ μλμ°μμ μμ νκ² λ¦¬λ μ€μμ μ€μκ°μΌλ‘ λ°μλλ©΄μ μ€νλλ 건κ°???? μ μΈκ³ λ°κ²¬?)
app μλΉμ€μ volumesμ db μλΉμ€μ volumesλ μ°¨μ΄κ° μλ€. μ¬μ€ μ΄κ² λλ¬Έμ λ ν·κ°λ Έλκ±° κ°λ€. κ°μ₯ μλ volumnes: todo-mysql-data
λΌκ³ μ€μ ν λΆλΆμ λ°λ‘ λ컀 λ³Όλ₯¨μ μμ±νλ λͺ
λ Ήμ΄λ€. λ컀 λ³Όλ₯¨μ λν΄ κΈ°μ΅μ΄ μλλ€λ©΄ μ΄μ κΈμ λ³΄κ³ μ€μ.
κ·Έλ κ² μμ±λ todo-mysql-data λ³Όλ₯¨μλ€κ° mariaDB 컨ν μ΄λ μμ /var/lib/mysql ν΄λλ₯Ό 곡μ ν΄μ£Όκ² λ€λ μλ―Έκ° λλ€. κ·Έλ λ€λ©΄ todo-mysql-data λ³Όλ₯¨μ μ΄λμμκΉ? κ·Έκ²λ μλμ° μμμ λ§μ΄λ€.
μ΄κ²κ³Ό κ΄λ ¨ν΄μ μ€νμ€λ²νλ‘μ°μ μ’μ κΈμ΄ μμλ€. λ°λ‘ \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
κ²½λ‘μ μμ κ²μ΄λΌλ κ²!!!
μ.. μ κΈ°νλ€. mariadb_todo-mysql-dataλΌλ λ³Όλ₯¨μ΄ μ§μ§ μμλ€. κ±°κΈ°μ _date ν΄λ μμ 컨ν μ΄λ mysql μ€μ κ΄λ ¨ ν΄λμ νμΌλ€μ΄ 곡μ λ κ²μ νμΈν μ μμλ€.
μ무λλ μ΄ κ³΅κ°μ΄ Windows νΈμ€νΈμμ 리λ μ€ κΈ°λ° λ컀λ₯Ό μ€ννκΈ° μν WSL(리λ μ€μ© μλμ° νμ μμ€ν )μΈκ±° κ°λ€. WSLμ΄λ Windowsμμ λ€μ΄ν°λΈ Linux λͺ λ Ήμ€ λꡬλ₯Ό μ§μ μ€νν μ μλ μλ‘μ΄ Windows 10 κΈ°λ₯μ΄λΌκ³ νλ€.
WSL 1κ³Όλ λ€λ₯΄κ² WSL 2λ Hyper-V κΈ°λ°μ μ΅μ κ°μν κΈ°μ μ μ΄μ©νμ¬ μ€μ 리λ μ€ μ»€λμ μ§μ νμ¬νλ©΄μ μ±λ₯ λν λΉμ½μ μΌλ‘ μμΉνμλ€κ³ νλ... μ΄λμ μλμ°μμ λ컀λ₯Ό μμ°μ€λ½κ² μ¬μ©ν μ μμλ 거ꡬλ.. ππ
λ컀 μ»΄ν¬μ¦μμ λ‘κ·Έλ₯Ό νμΈν΄λ³΄λ €λ©΄ λ€μ λͺ
λ Ήμ μ€ννλ©΄ λλ€. -f
νλκ·Έλ λ‘κ·Έκ° μ€μκ°μΌλ‘ λ€μ μΆκ°λλλ‘ ν΄μ£Όλ μ΅μ
μ΄λ€.
$ docker-compose logs -f
λ§μ½ νΉμ 컨ν μ΄λ(μλΉμ€)μ λν λ‘κ·Έλ§ λ³΄κ³ μΆλ€λ©΄ μλΉμ€ μ΄λ¦μ μ κ³ μ€ννλ©΄ λλ€.
$ docker-compose logs μλΉμ€ μ΄λ¦(ex. app, db)
docker-compose down
λͺ
λ Ήμ ν΅ν΄ λͺ¨λ μ κ±°ν μ μλ€.
λ컀 μ»΄ν¬μ¦ μ€μμ μμ£Ό μΌλΆλΆλ§ μ€μ΅ν΄λ΄€λ€. μ€λͺ νμ§ λͺ»ν μ΅μ (networks μ μ λ±)λ λ§μ΄ μμΌλ©° λ컀 μ»΄ν¬μ¦λ₯Ό μ΄μ©ν 컨ν μ΄λλ₯Ό μ¬λ¬κ° λ³΅μ¬ μμ±ν μλ μλ€.