Docker Compose
- μ¬λ¬ 컨ν μ΄λλ₯Ό μΌκ΄μ μΌλ‘ μ μνκ³ μ€νν μ μλ ν΄
- νλμ μλΉμ€λ₯Ό μ΄μνκΈ° μν΄μλ μ¬λ¬ κ°μ μ ν리μΌμ΄μ μ΄ λμν΄μΌ ν¨
- 컨ν μ΄λν λ μ ν리μΌμ΄μ λ€μ ν΅ν© κ΄λ¦¬ κ°λ₯
Dockerfile κ³Ό Docker-Compose
- Dockerfile : 컨ν μ΄λ μ΄λ―Έμ§λ₯Ό μμ±νλ©΄μ νΉμ μμ κΉμ§ κ°μ΄ μ²λ¦¬νκ² ν΄μ£Όλ λꡬ
- Docker-Compose : λ€μμ 컨ν μ΄λλ₯Ό μ½κ² μ€νν μ μκ² λμμ£Όλ λꡬ
μ€ν
- docker composeκ° λλ₯Ό λμ ν΄ μ¬λ¬ 컨λ€μ΄λλ€μ μ§μ ν λ°©μμΌλ‘ μ€ν
- 컨ν μ΄λλ₯Ό μ€νν λ μΆκ°μ μΈ λͺ¨λ μ΅μ λ€ yaml νμΌ ννλ‘ λ§λ¬
command μ λΉκ΅
- command
$ docker run --name db -v db_data:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=somewordpress mysql:5.7
- docker-compose.yml
db: image: mysql5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD=somewordpress
κΈ°λ³Έ λ¬Έλ²
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
μΆμ²: https://docs.docker.com/samples/wordpress/
- Docker Composeλ₯Ό μ¬μ©νμ¬ Docker 컨ν μ΄λλ‘ κ΅¬μΆλ 격리λ νκ²½μμ WordPress μ€ννλ docker-compose.yml
1) image
- μ€νν μ΄λ―Έμ§ μ§μ
2) command
- 컨ν μ΄λμμ μ€νλ λͺ λ Ήμ΄ μ§μ
- ex
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
3) link
- λ€λ₯Έ 컨ν μ΄λμ μ°κ³ν λ μ°κ³ν 컨ν μ΄λ μ§μ
webserver:
image: wordpress:latest
link:
db:mysql
4) ports
- 컨ν μ΄λκ° μΈλΆμ 곡κ°νλ ν¬νΈ μ§μ
- βνΈμ€νΈλ¨Έμ μ ν¬νΈλ²νΈ:컨ν μ΄λμ ν¬νΈλ²νΈβλ₯Ό μ§μ νκ±°λ 컨ν μ΄λμ ν¬νΈλ²νΈλ§ μ§μ
- 컨ν μ΄λμ ν¬νΈλ²νΈλ§ μ§μ ν κ²½μ° νΈμ€νΈ λ¨Έμ μ ν¬νΈλ λλ€ν κ°μΌλ‘ μ€μ λ¨
ports:
- "80"
- "8443:443"
5) expose
- λ§ν¬ κΈ°λ₯μ μ¬μ©νμ¬ μ°κ²°νλ 컨ν μ΄λμκ²λ§ ν¬νΈλ₯Ό 곡κ°ν λ expose μ§μ
- νΈμ€νΈ λ¨Έμ μμ μ§μ μ‘μΈμ€ νμ§ μκ³ μΉ μ ν리μΌμ΄μ μλ² κΈ°λ₯μ κ°κ³ μλ 컨ν μ΄λλ₯Ό κ²½μ ν΄μλ§ μ‘μΈμ€ νκ³ μΆμ κ²½μ° λ±μ μ¬μ©
expose:
- "3000"
- "8000"
6) depends_on
- μ¬λ¬ μλΉμ€μ μμ‘΄κ΄κ³ μ μ
- Webserver 컨ν μ΄λ μμ μ db 컨ν μ΄λμ redis 컨ν μ΄λλ₯Ό μμνκ³ μΆμ λ μλμ κ°μ΄ μ μ
services:
webserver:
build:
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
- μ£Όμ : 컨ν μ΄λμ μμ μμλ§ μ μ΄ν λΏ μ»¨ν μ΄λ μμ μ ν리μΌμ΄μ μ΄ μ΄μ© κ°λ₯ν΄ μ§ λκΉμ§ κΈ°λ€λ¦¬κ³ μ μ΄νμ§λ μμ
7) volumes
- 컨ν μ΄λμ λ³Όλ₯¨μ λ§μ΄νΈ
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
volumes:
db_data: {}
8) environment
- 컨ν μ΄λμ μ μ©ν νκ²½λ³μ μ μ
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: pass
9) restart
- 컨ν μ΄λκ° μ’ λ£λ λ μ μ©ν restart μ μ±
- no: μ¬μμ λμ§ μμ
- always: 컨ν μ΄λλ₯Ό μλμΌλ‘ λκΈ° μ κΉμ§ νμ μ¬μμ
- On-failure: μ€λ₯κ° μμ μμ μ¬μμ
database:
image: mysql:5.7
restart: always
docker composeλ‘ μ»¨ν μ΄λ μ€ν
- μλΉμ€ λλ ν 리 μμ±
- docker-compose.yml μμ±
- docker-compose λͺ λ Ήμ΄
docker-compose λͺ λ Ήμ΄
1) up
-
컨ν μ΄λ μμ± / μμ
- docker-compose.yml μ κΈ°μ€μΌλ‘ μ€νμμΌ μ€
- -d : detachλͺ¨λ (background λͺ¨λ) λ‘
- λ€λ₯Έ μ΅μ μμ κ²½μ° νμ¬ μλ λλ ν 리μ μλ yml νμΌ κΈ°μ€μΌλ‘ μ€ν
$ docker-compose up -d
$ docker-compose -f /other-dir/docker-compose.yml
2) ps
-
컨ν μ΄λ λͺ©λ‘ νμ
- νμ¬ docker-compose μμ λμλκ³ μλ 컨ν μ΄λ μνμ 보λ₯Ό 보μ¬μ€
- νμ¬ λλ ν 리μμ λμ μ€μΈ 컨ν μ΄λλ§ νμΈ κ°λ₯
$ docker-compose ps
3) scale
- νΉμ 컨ν μ΄λμ κ°μ μ‘°μ
- mysql 컨ν μ΄λ 2κ°
$ docker-compose scale mysql=2
4) down
- νμ¬ λλ ν 리μμ λμνλ 컨ν μ΄λ μ’ λ£
$ docker-compose down
5) rm
- 컨ν μ΄λ μμ
6) config
- λ΄κ° λ§λ docker-compose.yml νμΌμ μ€λ₯μλ νμΈ
$ docker-compose config
7) logs
- 컨ν μ΄λ λ‘κ·Έ μΆλ ₯
$ docker-compose logs webserver
λΉλμμ μ΄μκΉμ§
- μλΉμ€ λλ ν 리 μμ±
- λΉλλ₯Ό μν dockerfile μμ±
- Docker-compose.yml μμ±
- docker-compose λͺ λ Ήμ΄κ° μ€ν
β -> docker-compose λͺ λ Ήμ΄κ° μ€νλ λ docker-compose.yml μ μλ 컨ν μ΄λκ° dockerfileμ μν΄ build