๐ณ Docker Compose ๋คํธ์ํฌ
๐พ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ก ๊ตฌ์ฑ๋ Docker Compose ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ปจํ ์ด๋ ๊ฐ์ ํต์ ์ ์ค๋ช ํฉ๋๋ค.
๋ํดํธ ๋คํธ์ํฌPermalink
๊ธฐ๋ณธ์ ์ผ๋ก Docker Compose
๋ ํ๋์ ๋ํดํธ ๋คํธ์ํฌ์ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ๋ํดํธ ๋คํธ์ํฌ์ ์ด๋ฆ์ docker-compose.yml
๊ฐ ์์นํ ๋๋ ํ ๋ฆฌ ์ด๋ฆ ๋ค์ _default
๊ฐ ๋ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ด our_app
๋ผ๋ฉด ๋ํดํธ ๋คํธ์ํฌ ์ด๋ฆ์ our_app_default
๊ฐ ๋ฉ๋๋ค.
## /path/our_app ๊ฒฝ๋ก
$ docker-compose up -d
Creating network "our_app_default" with the default driver
Creating our_app_db_1 ... done
Creating our_app_web_1 ... done
Docker Compose
๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ด๋ฆด ๋๋ ๋ฐ๋ ์์๋ก ๋จผ์ ์ปจํ
์ด๋๋ฅผ ์ข
๋ฃ/์ ๊ฑฐํด๋๊ณ ์ ์ผ ๋ง์ง๋ง์ ๋คํธ์ํฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
$ docker-compose down
Stopping our_app_web_1 ... done
Stopping our_app_db_1 ... done
Removing our_app_web_1 ... done
Removing our_app_db_1 ... done
Removing network our_app_default
์ปจํ ์ด๋ ๊ฐ ํต์ Permalink
๊ฐ์ ๋คํธ์ํฌ ๊ฐ ํต์
๊ฐ์ ๋คํธ์ํฌ ์์์ ์ปจํ
์ด๋ ๊ฐ์ ํต์ ์ ํธ์คํธ๋ช
์ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ ํธ์คํธ๋ช
์ ์ง์ ํ์ง ์์๋ค๋ฉด ์๋น์ค์ ์ด๋ฆ์ด ํธ์คํธ๋ช
์ด ๋ฉ๋๋ค.
$ docker-compose exec web ping db
PING db (192.168.48.2) 56(84) bytes of data.
64 bytes from our_app_db_1.our_app_default (192.168.48.2): icmp_seq=1 ttl=64 time=0.094 ms
64 bytes from our_app_db_1.our_app_default (192.168.48.2): icmp_seq=2 ttl=64 time=0.162 ms
ํธ์ถ ์์น์ ๋ฐ๋ฅธ ํต์
์ปจํ
์ด๋ ๊ฐ ํต์ ์์ ์ฃผ์ํ ์ ์ ์ ์ํ๋ ์์น๊ฐ ๋ํดํธ ๋คํธ์ํฌ ๋ด๋ถ๋ ์ธ๋ถ๋์ ๋ฐ๋ผ์ ํฌํธ(port)๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค๋ ๊ฒ์
๋๋ค.
services:
web:
build: .
ports:
- "8001:8000"
# ํธ์คํธ ์ปดํจํฐ์์ web ์๋น์ค ์ปจํ
์ด๋ ์ ์
$ curl -I localhost:8001
HTTP/1.1 200 OK
Date: Fri, 05 Jun 2020 02:05:10 GMT
Server: WSGIServer/0.2 CPython/3.8.2
Content-Type: text/html
X-Frame-Options: DENY
Content-Length: 16351
X-Content-Type-Options: nosniff
# ๊ฐ์ ๋คํธ์ํฌ ๋ด์ ๋ค๋ฅธ ์ปจํ
์ด๋์์ web ์๋น์ค ์ปจํ
์ด๋ ์ ์
$ docker-compose exec alpine curl -I web:8000
HTTP/1.1 200 OK
Date: Fri, 05 Jun 2020 02:13:46 GMT
Server: WSGIServer/0.2 CPython/3.8.2
Content-Type: text/html
X-Frame-Options: DENY
Content-Length: 16351
X-Content-Type-Options: nosniff
์ปค์คํ ๋คํธ์ํฌ ์ถ๊ฐPermalink
Docker Compose
๋ ๋ํดํธ ๋คํธ์ํฌ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋คํธ์ํฌ๋ ํ์์ ๋ฐ๋ผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
services:
web:
build: .
ports:
- "8000:8000"
networks: # ์๋น์ค์์ ์ฐ๊ฒฐํ ๋คํธ์ํฌ ์์ฑ
- default
- our_net
db:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
# ๋คํธ์ํฌ ์ถ๊ฐ
networks:
our_net:
driver: bridge
Docker Compose
๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉด ๋๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ฑ๋๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
$ docker-compose up -d
Creating network "our_app_default" with the default driver
Creating network "our_app_our_net" with driver "bridge"
...
$ our_app docker network ls
NETWORK ID NAME DRIVER SCOPE
f1859120a0c3 bridge bridge local
95b00551745b host host local
1f7202baa40a none null local
2682634e6535 our_app_default bridge local
525403b38bbe our_app_our_net bridge local
our_net
์ Docker Compose
๋ด๋ถ์์ ์ ์๋ ๋คํธ์ํฌ ์ด๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ด๋ฆด ๋ ๋ํดํธ ๋คํธ์ํฌ์ ํจ๊ป ์ญ์ ๋ฉ๋๋ค.
$ docker-compose down
Stopping our_app_web_1 ... done
Stopping our_app_db_1 ... done
Removing our_app_web_1 ... done
Removing our_app_db_1 ... done
Removing network our_app_default
Removing network our_app_our_net
์ธ๋ถ ๋คํธ์ํฌ ์ฌ์ฉPermalink
Docker Compose
๊ฐ ์ ๊ณตํ๋ ๋ํดํธ ๋คํธ์ํฌ ๋์ ์ ์ธ๋ถ์์ ๋ฏธ๋ฆฌ ์์ฑํด๋์ ๋ค๋ฅธ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
our_net
์ด๋ผ๋ ๋คํธ์ํฌ ์์ฑํฉ๋๋ค.
$ docker network create our_net
6d791b927c8c151c45a10ac13c62f3571ecf38a90756fd2ca1c62b7d3de804e8
docker-compose.yml
์์ ๋คํธ์ํฌ์ ์ต์
์ our_net
๋คํธ์ํฌ์ external
์ ์ค์ ํฉ๋๋ค.
# 1๋ฒ ๋ฐฉ๋ฒ
version: '3.7'
services:
web:
build: .
ports:
- "8000:8000"
networks:
- our_net
networks:
our_net:
driver: bridge
external: true
๊ฒฝ๊ณ
์ธ๋ถ์์ ์์ฑ๋ ๋คํธ์ํฌ์ด๋ฏ๋ก Docker Compose
์ ํ๋ฆฌ์ผ์ด์
์ ๋ด๋ฆด ๋ ํด๋น ๋คํธ์ํฌ๊ฐ ํจ๊ป ์ญ์ ๋์ง ์์ต๋๋ค.
$ docker-compose down
Stopping our_app_web_1 ... done
Stopping our_app_db_1 ... done
Removing our_app_web_1 ... done
Removing our_app_db_1 ... done
Network our_net is external, skipping
๋๊ธ๋จ๊ธฐ๊ธฐ