๐Ÿณabout Docker Compose / ์‚ฌ์šฉ๋ฒ• ๋ฐ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ์‹ค์Šต

์œผ๋‹ยท2023๋…„ 5์›” 14์ผ
0

Server ๐Ÿ“ฑ

๋ชฉ๋ก ๋ณด๊ธฐ
3/3

๐Ÿ“‚Docker Compose๋ž€?


๋งจ๋“ค๋งจ๋“ค ๊ท€์—ฝ๋‹คใ…Ž

๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ •์˜ํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ

  • YAML ํŒŒ์ผ์„ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค ๊ตฌ์„ฑ ๊ฐ€๋Šฅ(docker-compose.yml)
  • ๊ธฐ๋ณธ์ ์œผ๋กœ 3 STEP Dockerfile ์ •์˜โ†’ docker-compose.yml ํŒŒ์ผ ์ƒ์„ฑโ†’ docker-compose up ๋ช…๋ น์–ด์˜ ์‹คํ–‰(compose ์‹œ์ž‘, ์ „์ฒด ์•ฑ ์‹คํ–‰
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปตํ…Œ์ด๋„ˆ์˜ ์˜ต์…˜๊ณผ ํ™˜๊ฒฝ์„ ์ •์˜ํ•œ ํŒŒ์ผ์„ ์ฝ์–ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ƒ์„ฑ
  • ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด๊ฑฐ๋‚˜ โ†’ ์ฟ ๋ฒ„๋„คํ…Œ์Šค์—์„œ ์ž๋™ํ™”(๋ฐ๋ธŒ์˜ต์Šค CI CD ๋กœ ๊ฐ€๊ธฐ์œ„ํ•ด ์ธ๊ฐ„์˜ ๊ฐœ์ž… ์ค„์ด๊ณ ์ž)
  • plus ์ปจํ…Œ์ด๋„ˆ๋“ค์„ composeํ•˜๋ฉด ๋„์ปค๊ฐ€ logicalํ•œ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋กœ ๋ฌถ์–ด๋ฒ„๋ฆผ. ๋„์ปค compose๋กœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋ฌถ์–ด๋ฒ„๋ฆฌ๋ฉด IP ์ฃผ์†Œ ์ƒ๊ด€์—†์ด ๋„๋ฉ”์ธ ๋„ค์ž„์„ ์“ฐ๋“ฏ์ด ์ž์ฒด์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋กœ ๋ฌถ๊ณ  ๋„๋ฉ”์ธ ๋„ค์ž„ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  ๋„๋ฉ”์ธ ๋„ค์ž„์„ ๋ถ€์—ฌ. ๋„คํŠธ์›Œํ‚น์— ๋Œ€ํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํฐ ์žฅ์ .(๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ

๐Ÿ“‚Docker Service

  • distributed ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋น„์Šค๋กœ ๋‚˜๋‰จ.

ex) ๋™์˜์ƒ ๊ณต์œ  ์‚ฌ์ดํŠธ โ‡’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— storingํ•˜๋Š” ์„œ๋น„์Šค, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์–ธ๊ฐ€๋ฅผ ์—…๋กœ๋“œ ํ•œ ํ›„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋น„๋””์˜ค trascoding์„ ์œ„ํ•œ ์„œ๋น„์Šค, front-end ์„œ๋น„์Šค.. ๋“ฑ๋“ฑ.

  • ์„œ๋น„์Šค๋Š” ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋งŒ ์‹คํ–‰ํ•˜๋Š” โ€œ์ƒ์‚ฐ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆโ€์— ๋ถˆ๊ณผํ•˜๋‹ค. ์„œ๋น„์Šค๋Š” ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋งŒ ์‹คํ–‰. ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์ฝ”๋“œํ™”ํ•จ. โ†’
    • ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ, ์„œ๋น„์Šค๊ฐ€ ํ•„์š”๋กœํ•˜๋Š” ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ์˜ replica๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€ ๋“ฑ
  • ์„œ๋น„์Šค๋ฅผ ์กฐ์ •ํ•˜๋ฉด ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋จ.
    • ํ”„๋กœ์„ธ์Šค์—์„œ ์„œ๋น„์Šค์— ๋” ๋งŽ์€ computing resource๋ฅผ ํ• ๋‹น

Docker compose๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ •์˜ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • docker compose๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•ด์•ผํ•จ(๋‘ ๊ฐœ์˜ run ๋ช…๋ น์–ด ์ž…๋ ฅ) โ‡’ docker-compose๋กœ ํ•œ ๋ฒˆ์— ์ƒ์„ฑ

๐Ÿ“‚Docker compose file(Docker-compose.yml) ๊ตฌ์„ฑ

version: "3"

services:
  app:
    build:
      context: ./01_FLASK_DOCKER
      dockerfile: Dockerfile
    links:
      - "db:mysqldb"
    ports:
      - "80:8080"
    container_name: appcontainer
    depends_on:
      - db
  db:
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=dgkcoding
      - MYSQL_DATABASE=dgkdb
    ports:
      - "3306:3306"
    container_name: dbcontainer
  • version: docker-compose์˜ ๋ฒ„์ „ ๋ช…์‹œ/ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ง€์› ํ˜•์‹์ด ๋‹ค๋ฆ„.
  • services: docker-compose๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•  ์ปจํ…Œ์ด๋„ˆ(์ด๋ฏธ์ง€) โ†’ ํ•˜์œ„ ํ•ญ๋ชฉ์œผ๋กœ ์ด๋ฆ„ ๋ช…์‹œ

service ๋‚ด๋ถ€ ์นดํ…Œ๊ณ ๋ฆฌ

  • volumes: ๋งˆ์šดํŠธํ•  ๋ณผ๋ฅจ ์„ค์ •
  • build: ๋นŒ๋“œ ์˜ต์…˜. ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ dockerfile๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ
  • restart: docker container๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๊ฒฝ์šฐ ํ•ญ์ƒ ์žฌ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜๋Š” ์„ค์ •
  • image: ์ด๋ฏธ์ง€ ์ด๋ฆ„ ์ง€์ •
  • ports: ํฌํŠธ ๋งตํ•‘ ์ •๋ณด ๋ช…์‹œ
  • networks: docker container๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ์„ค์ •(์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ„ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์„ค์ •๋จ)
  • links: docker container ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • container_name: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ์„ค์ •
  • depends_on: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ์ œ์–ดdepends_on ๋’ค์— ์žˆ๋Š” db ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์šฐ์„  ์‹คํ–‰๋˜๊ณ  ์ดํ›„ app ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋จ

๐Ÿ“‚Docker compose ์ฃผ์š” ๋ช…๋ น์–ด

docker-compose [๋ช…๋ น์–ด]

์„œ๋ธŒ๋ช…๋ น์„ค๋ช…
up์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ/์‹œ์ž‘
ps/ ls์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ํ‘œ์‹œ
logs์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ์ถœ๋ ฅ
run์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
start์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘
stop์ปจํ…Œ์ด๋„ˆ ์ •์ง€
restart์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘
pause์ปจํ…Œ์ด๋„ˆ ์ผ์‹œ ์ •์ง€
unpause์ปจํ…Œ์ด๋„ˆ ์žฌ๊ฐœ
port๊ณต๊ฐœ ํฌํŠธ ํ‘œ์‹œ
configdocker-compose.yml ํŒŒ์ผ ๊ตฌ์„ฑ ํ™•์ธ
kill์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๊ฐ•์ œ ์ •์ง€
rm์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
down๋ฆฌ์†Œ์Šค ์‚ญ์ œ

๐Ÿ“‚Docker compose ์„ค์น˜&์‚ฌ์šฉํ•ด๋ณด๊ธฐ

ํฌ๊ฒŒ 3๋‹จ๊ณ„

(1) ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ์˜ Dockerfile๋ฅผ ์ž‘์„ฑ

(2) docker-compose.yml๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์‹คํ–‰ ์ •์˜๋ฅผ ์‹ค์‹œ

(3) "docker-compose up" ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ docker-compose.yml์œผ๋กœ ์ •์˜ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐœ์‹œ

์„ค์น˜ ๋ฐ ๋ฒ„์ „ ํ™•์ธ

๋ณธ์ธ์€ docker desktop์œผ๋กœ ๊น”์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ docker compose ํฌํ•จ๋˜์–ด ์„ค์น˜๋˜์–ด ์žˆ์Œ.

(๋ฆฌ๋ˆ…์Šค๋Š” Docker compose๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ)

$ curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

ํด๋” ๊ตฌ์„ฑ

Dockerfile์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์ •์˜

DokerCompose ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ client, server ํด๋”์— ๊ฐ๊ฐ client.py, server.py์™€ Dockerfile์ž‘์„ฑ

**client.py ์ฝ”๋“œ**

#!/usr/bin/env python3

# python ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import
# ์„œ๋ฒ„์—์„œ 'index.html'์„ ๋‹ค์šด๋ฐ›๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
# ํŒŒ์ด์ฌ๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค์น˜ํ•  ๊ฒƒ์€ x
import urllib.request

# 'http://localhost:1234/'์— ๋Œ€ํ•œ request๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ€์ˆ˜ fp
# localhost: ์„œ๋ฒ„๊ฐ€ local ์„œ๋ฒ„
# 1234: ์„œ๋ฒ„์˜ port ์ฃผ์†Œ
fp = urllib.request.urlopen("http://localhost:1234/")

# 'encodedContent' ์ธ์ฝ”๋”ฉ๋œ server response ('index.html').
# 'decodedContent' ๋””์ฝ”๋”ฉ๋œ server response (what we want to display).
encodedContent = fp.read()
decodedContent = encodedContent.decode("utf8")

# server file: 'index.html'์ถœ๋ ฅ
print(decodedContent)

# server ์—ฐ๊ฒฐ close
fp.close()

client image์˜ Dockerfile

FROM python:latest
LABEL mantainer="leeeunda"

#clent ํด๋”์— ์‹คํ–‰ํ•  ํŒŒ์ผ ์„ค์ •
ADD client.py /client/

#์ž‘์—…ํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ ์„ค์ •.
WORKDIR /client/

๋”ฐ๋กœ ๋ช…๋ น์–ด๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œํ•  ํ•„์š”์—†์ด ์ดํ›„์— docker-compose build ๋ช…๋ น์–ด๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ด๋ฏธ์ง€ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•  ๊ฒƒ

**server.py ์ฝ”๋“œ**

#!/usr/bin/env python3

# python ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import
# ์„œ๋ฒ„์—์„œ 'index.html'์„ ๋‹ค์šด๋ฐ›๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
# ํŒŒ์ด์ฌ๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค์น˜ํ•  ๊ฒƒ์€ x
import http.server
import socketserver

#์„œ๋ฒ„์—์„œ client์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ณ€์ˆ˜
handler = http.server.SimpleHTTPRequestHandler

# port 1234์—์„œ server๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ์ •์˜

with socketserver.TCPServer(("", 1234), handler) as httpd:
    # client์˜ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ์„œ๋ฒ„๋ฅผ ๊ณ„์† ์‹คํ•ด์•Ÿ๋„๋ก ํ•˜๋Š” ๋ช…๋ น
    httpd.serve_foreve# FROM : base image ์„ค์ •
# Dockerhub์—์„œ python image import
# ์ด๋ฏธ์ง€ ์ด๋ฆ„ -> python, version-> latest 
FROM python:latest
LABEL mantainer="daun0219@gmail.com"

# ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” host ์œ„ ํŒŒ์ผ์˜ ์ด๋ฆ„  
# ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด๋ฏธ์ง€์— ๋„ฃ์„ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ
# python code ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด server.py ํŒŒ์ผ๊ณผ index.html ํŒŒ์ผ import
ADD server.py /server/
ADD index.html /server/

#์ž‘์—…ํ•  ํด๋” ์„ค์ • ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜.
WORKDIR /server/r()

server image์˜ Dockerfile

#!/usr/bin/env python3

# python ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import
# ์„œ๋ฒ„์—์„œ 'index.html'์„ ๋‹ค์šด๋ฐ›๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
# ํŒŒ์ด์ฌ๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค์น˜ํ•  ๊ฒƒ์€ x
import http.server
import socketserver

#์„œ๋ฒ„์—์„œ client์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ณ€์ˆ˜
handler = http.server.SimpleHTTPRequestHandler

# port 1234์—์„œ server๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ์ •์˜

with socketserver.TCPServer(("", 1234), handler) as httpd:
    # client์˜ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ์„œ๋ฒ„๋ฅผ ๊ณ„์† ์‹คํ•ด์•Ÿ๋„๋ก ํ•˜๋Š” ๋ช…๋ น
    httpd.serve_forever()

index.html ํŒŒ์ผ ์•ˆ์—๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ hello docker-compose.. ๋ญ ์ด๋Ÿฐ๊ฑฐ ์ ์Œ

๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด local host์˜ 1234๋ฒˆ ํฌํŠธ์—์„œ ์ ‘์† ๊ฐ€๋Šฅํ•œ ๊ฒƒ ํ™•์ธ

docker-compose.yml ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

# docker-compose๋Š” ํ•ญ์ƒ version tag๋กœ ์‹œ์ž‘
# ์ตœ๊ทผ ๋ฒ„์ „์ธ "3"์„ ์‚ฌ์šฉ
version: "3"

# 1 service = 1 container
# 'services'๋กœ ์„œ๋น„์Šค ์ƒ์„ฑ 
services:
  # server์™€ client ๋‘ ๊ฐ€์ง€ service๋ฅผ ์ƒ์„ฑ

  # ์ฒซ๋ฒˆ์งธ service(container): server ์ •์˜
  server:
    # build : ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  dockerfile์˜ ๊ฒฝ๋กœ ์ง€์ •.
    # service๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• .
    build: ./server/
    #server์˜ image ์ด๋ฆ„ ์ •์˜
    image: leeeunda/server:1.0

    # ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด
    # python ./server.py๋ฅผ ์‹คํ–‰
    command: python ./server.py

    # server.py์—์„œ port๋ฅผ 1234๋กœ ์ง€์ •
    # ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ์„œ๋ฒ„์— ์•ก์„ธ์Šค ํ•˜๊ธฐ ์œ„ํ•จ
    #[์ปดํ“จํ„ฐ์—์„œ ์›ํ•˜๋Š” ํฌํŠธ]:[์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ํฌํŠธ]
    ports:
      - 1234:1234

  # ๋‘๋ฒˆ์งธ service(container): client ์ •์˜
  client:
    build: ./client/
    #client์˜ image ์ •์˜
    image: leeeunda/client:1.0
    
    # build : ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  dockerfile์˜ ๊ฒฝ๋กœ ์ง€์ •.
    # service๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• .
    command: python ./client.py

    #๋„คํŠธ์›Œํฌ ์œ ํ˜•์„ ์ •์˜
    #์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ปดํ“จํ„ฐ์˜ 'localhost'์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ์„ ์ •์˜
    network_mode: host

    # depends_on : ์„œ๋น„์Šค ์—ฌ๋ถ€๋ฅผ ์ •์˜
    # client service๊ฐ€ server service๊ฐ€ ready๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ํ•จ.
    depends_on:
      - server

Docker-compose build


docker-compose.yml ํŒŒ์ผ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ.
docker-compose up์œผ๋กœ ๋ฐ”๋กœ ๋ช…๋ น์–ด ์‹คํ–‰ํ•ด๋„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•จ.

Docker-compose up ๋ช…๋ น์–ด ์‹คํ–‰


docker-compose.yml์„ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹œ์ž‘.

docker-compose up [์˜ต์…˜][์„œ๋น„์Šค๋ช…]

์ดํ›„ docker-compose down์œผ๋กœ ์‹คํ–‰ ์ค‘์ง€์‹œํ‚ด.

docker-compose up ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑ๋œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ฐ๊ฐ push ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋„์ปค ํ—ˆ๋ธŒ์— ์—…๋กœ๋“œ

์šฐ๋‹นํƒ•ํƒ• ํ–ˆ๋˜ ๊ฒƒ๋“ค(์˜ค๋ฅ˜)๐Ÿ˜ข

services.client.networks must be a list

ymlํŒŒ์ผ์— networks ์š”์†Œ ๋„ฃ์–ด๋†“๊ณ  ๋ฐ–์—๋‹ค๊ฐ€ ๋˜ ๋„คํŠธ์›Œํฌ ์ง€์ • ์•ˆํ•ด์„œ ์ƒ๊ธด ์˜ค๋ฅ˜

ํ˜•์‹ ๋”ฐ๋ผ์„œ yml ํŒŒ์ผ์— ๋„คํŠธ์›Œํฌ ์ง€์ •ํ•ด์•ผํ•จ.

networks must be a mapping

์ด ์ฝ”๋“œ๋Š” ๊ธฐ์กด์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์˜€์Œ.

๋„คํŠธ์›Œํฌ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ƒ์„ฑ๋จ. ๊ทธ๋ƒฅ ๋„คํŠธ์›Œํฌ ๋นผ๋ฒ„๋ฆผ.

failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: the Dockerfile cannot be empty

โ‡’dockerfile ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด์„œ ๋ฐœ์ƒ

(yml ํŒŒ์ผ ๋ฌธ์ œ์˜€์Œ. ์ƒ๋Œ€ ๊ฒฝ๋กœ ์ง€์ •ํ• ๋•Œ ์  ์•ˆ ์ฐ์–ด์„œ ๋ฌธ์ œ ์ƒ๊น€)

profile
์•„์ด์ฟ 

0๊ฐœ์˜ ๋Œ“๊ธ€