Docker Compose ๋ž€


docker run mmumshad/simple-webapp
docker run mongodb
docker run redis:alpine
docker run ansible
  • ์œ„์™€ ๊ฐ™์€ ๋‹ค์ˆ˜์˜ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ณต์žกํ•œ Application ์„ ์„ค์ •ํ•  ๋•Œ์—” Docker Compose ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Œ
  • Docker Compose ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•จ
# docker-compose.yml

services:
	web:
		image: "mmumshad/simple-webapp"
	database:
		image: "mongodb"
	messaging:
		image: "redis:alpine"
	orchestration:
		image: "ansible"
  • ์œ„์ฒ˜๋Ÿผ docker-compose.yml ์„ ์ƒ์„ฑํ•œ ๋’ค
  • docker-compose up ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Application ์Šคํƒ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Œ
  • ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ Docker Host ์— ์‹คํ–‰๋˜๋Š” Container ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Sample - Voting Application

  • ์œ„ ์•„ํ‚คํ…์ฒ˜๋Š” Docker ๊ฐ€ ๊ฐœ๋ฐœํ•œ Docker ๋ฅผ ์‹œ์—ฐํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”์ข…ํ•ฉ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์‹œ
docker run -d --name=redis redis
docker run -d --name=db postgres
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
docker run -d --name=result -p 5001:80 --link db:db result-app
docker run -d --name=worker --link db:db --link redis:redis worker
  • --link {์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„}:{์•ฑ์ด ์ฐพ๋Š” ํ˜ธ์ŠคํŠธ์˜ ์ด๋ฆ„(์ฝ”๋“œ์— ์žˆ๋Š” ์ด๋ฆ„)}
    • Docker Swarm ๊ณผ ๋„คํŠธ์›Œํ‚น๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ฐœ๋…์ด ๋“ฑ์žฅํ•ด ์–ด์ฐจํ”ผ Deprecated ๋  ๊ธฐ๋Šฅ
# docker-compose.yml

redis:
	image: redis
db:
	image: postgres:9.4
vote:
	image: voting-app
	ports:
		- 5000:80
	links:
		- redis
result:
	image: result-app
	ports:
		- 5001:80
	links:
		- db
worker:
	image: worker
	links:
		- redis
		- db

Docker compose - build


# docker-compose.yml

redis:
	image: redis
db:
	image: postgres:9.4
vote:
	build: ./vote
	ports:
		- 5000:80
	links:
		- redis
result:
	build: ./result
	ports:
		- 5001:80
	links:
		- db
worker:
	build: ./worker
	links:
		- redis
		- db
  • Docker Compose ๊ฐ€ Docker Image ๋ฅผ pull ํ•ด์˜ค๋Š” ๋Œ€์‹  docker build ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก image ๋Œ€์‹  build ๋ฅผ ์ž…๋ ฅํ•œ ๋’ค ํ•ด๋‹น Application ์ฝ”๋“œ์™€ Dockerfile ์ด ์กด์žฌํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ž…๋ ฅ

Docker compose - versions


Version 1

  • ์œ„ ์˜ˆ์‹œ๋“ค์€ ๋ชจ๋‘ Version 1 ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์ด๋Š” ์—ฌ๋Ÿฌ ์ œํ•œ ์‚ฌํ•ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
    • ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ๊ธฐ๋ณธ ์„ค์ •์ธ ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ ์™ธ์—” ์„ค์ •ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Œ
    • ์˜์กด์„ฑ์ด๋‚˜ ์‹œ์ž‘ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Œ

Version 2

# docker-compose.yml

version: 2
services:
	redis:
		image: redis
	db:
		image: postgres:9.4
	vote:
		image: voting-app
		ports:
			- 5000:80
		depends_on:
			- redis
  • Version 2 ๋Š” ์œ„ ์ œํ•œ ์‚ฌํ•ญ๋“ค์ด ๋ชจ๋‘ ํ•ด๊ฒฐ๋จ
    • Docker Compose ์—๊ฒŒ Version 2 ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด version ์„ ๊ผญ ์ง€์ •ํ•ด์•ผ ํ•จ
    • ๊ธฐ์กด Version 1 ์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ services ํ•˜์œ„์— ์ž‘์„ฑํ•˜๋ฉด ๋จ
    • Version 1 ์—์„  ๊ธฐ๋ณธ ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ์— ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  link ๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ์—ฐ๊ฒฐ์„ ํ™œ์„ฑํ™”ํ•œ ๋ฐ˜๋ฉด Version 2 ์—์„  Docker Compose ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด Application ์ „์šฉ ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์— ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•จ ๋”ฐ๋ผ์„œ link ๊ฐ€ ํ•„์š”์—†์Œ
    • depends_on ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์˜์กด์„ฑ์ด๋‚˜ ์‹œ์ž‘ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

Version 3

# docker-compose.yml

version: 3
services:
	redis:
		image: redis
	db:
		image: postgres:9.4
	vote:
		image: voting-app
		ports:
			- 5000:80
  • Version 3 ๋ถ€ํ„ด Docker Swarm ์„ ์ง€์›
  • ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์ œ๊ฑฐ๋˜๊ณ  ์ถ”๊ฐ€๋จ

Docker compose - network


# docker-compose.yml

version: 2
services:
	redis:
		image: redis
		networks:
			- back-end
	db:
		image: postgres:9.4
		networks:
			- back-end
	vote:
		image: voting-app
		ports:
			- 5000:80
		networks:
			- front-end
			- back-end
	result:
		image: result-app
		ports:
			- 5001:80
		networks:
			- front-end
			- back-end
	worker:
		image: worker
		networks:
			- back-end

networks:
	front-end:
	back-end:
  • ๊ธฐ์กด์—” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ๋ณธ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ์— ๋ฐฐํฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์˜€์ง€๋งŒ front-end ์™€ back-end ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

References