Docker Compose
Docker Compose
๋์ปค ์คํํ ๋ ์ค์ ํด์ผํ ์ต์
์ด ๋ง์์ง๋ฉด ๋ช
๋ น์ด๊ฐ ๊ธธ์ด์ง๊ณ ๋ณต์กํด์ง๋๋ฐ, ์ด๋ฌํ ์ฌ๋ฌ๊ฐ์ ๋์ปค ์ปจํ
์ด๋๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค.
์ฐธ๊ณ ๋ก docker-compose.yml ํ์ผ(YAML ํ์)๋ก ์์ฑํด์ผ ํ๋ค.
Docker Compose ํ์ผ ๊ตฌ์ฑ ์์(PHP, Nginx, MySQL)
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
version: "3.9" # compose ๋ฒ์
services:
webserver: # ์๋น์ค ์ด๋ฆ(container_name์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก webserver_1 ํ์์ผ๋ก ์์ฑ๋๋ค.)
image: nginx:latest # ์ปจํ
์ด๋๋ก ์คํํ ๋์ปค ์ด๋ฏธ์ง(Docker Hub์ ์๋ ์ด๋ฏธ์ง ์ค์ ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก "{์ด๋ฏธ์ง๋ช
}:{ํ๊ทธ}" ํ์์ด๋ค. ํ๊ทธ ๋ถ๋ถ์ ์๋ต์ด ๊ฐ๋ฅํ๋ฉฐ, ์๋ต ์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ pullํ๊ฒ ๋๋ค.)
container_name: nginx # ์ปจํ
์ด๋ ์ด๋ฆ
ports: # ํธ์คํธ์ ์ปจํ
์ด๋์ ํฌํธ ๋ฐ์ธ๋ฉ์ ์ค์
- "8080:80"
volumes: # ๋ณผ๋ฅจ ์ค์ (์ปจํ
์ด๋๊ฐ ์ญ์ ๋๋ฉด ๋ฐ์ดํฐ๋ ์ญ์ ๋์ง๋ง ๋ณผ๋ฅจ์ ์ค์ ํ๋ฉด ์ปจํ
์ด๋ ์ญ์ ๋๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋จ๊ธธ ์ ์๋ค.)
- ./backend:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on: # ์๋น์ค ๊ฐ์ ์ข
์์ฑ ์์๋๋ก ์๋น์ค๋ฅผ ์์ํ ์ ์๋ค.
- app
- db
networks: # ๋คํธ์ํฌ ์ค์ (default ๋คํธ์ํฌ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋คํธ์ํฌ ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.)
- my_network
db:
image: mysql:8.0
container_name: mysql
restart: unless-stopped # ์ปจํ
์ด๋๋ฅผ ์ฌ์์ํ ๋ ๊ด๋ จ๋ ์ค์ (no/always/unless-stopped/on-failure)
tty: true
ports:
- "3306:3306"
environment: # ์ปจํ
์ด๋ ํ๊ฒฝ ๋ณ์ ์ค์ (์ปจํ
์ด๋ ์ ๋ด๋ถ์์ ์ ์๋ ํ๊ฒฝ ๋ณ์๋ค๋ณด๋ค ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.)
MYSQL_HOST: localhost
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_PASSWORD:
MYSQL_ROOT_PASSWORD:
volumes:
- ./docker/db/mysql:/var/lib/mysql
- ./docker/db/conf:/etc/mysql/conf.d
networks:
- my_network
app:
container_name: php
build: # ๋น๋ ์ค์ (image ์ต์
์ ์ด๋ฏธ ๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ Dockerfile์ด ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด docker-compose ์คํ ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์ฌ ์ฌ์ฉํ๊ฒ ๋๋ค.)
context: ./docker/php # ๋ช
๋ ์ด ์ ๋ฌํ ๊ฒฝ๋ก
dockerfile: Dockerfile # Dockerfile ๊ฒฝ๋ก
volumes:
- ./backend:/var/www/html
networks:
- my_network
networks:
my_network:
driver: bridge
# driver ์ข
๋ฅ
# bridge: ํ๋์ ํธ์คํธ ์ปดํจํฐ ๋ด์์ ์ฌ๋ฌ ์ปจํ
์ด๋๋ค ๊ฐ์ ํต์ ํ ์ ์๋๋ก ํด์ฃผ๋ ์ต์
์ด๋ค.
# host: ํธ์คํธ ์ปดํจํฐ์ ๋์ผํ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ์ต์
์ด๋ค
# overlay: ์ฌ๋ฌ๊ฐ์ ๋ถ์ฐ๋์ด ์๋ ์ปจํ
์ด๋๋ค ๊ฐ์ ํต์ ํ ์ ์๋๋ก ํด์ฃผ๋ ์ต์
์ด๋ค.
# ipvlan: ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ํํ๋ ์ต์
์ด๋ค. MAC ์ฃผ์์ IP ์ฃผ์๋ฅผ ๋ถ์ฌํ์ฌ ์ค์ ๋คํธ์ํฌ์ ์ปจํ
์ด๋๋ฅผ ์ง์ ์ฐ๊ฒฐ์ํค๋ ๋ฐฉ์์ด๋ค.
# macvlan: ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฌ๊ฐ์ ๋ณ๋ MAC ์ฃผ์๋ฅผ ๊ฐ์ง๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ต์
์ด๋ค.
# none: ์๋ฌด ๋คํธ์ํฌ๋ฅผ ์ฐ์ง ์๊ณ ๋ด๋ถ์ lo ์ธํฐํ์ด์ค๋ง ์กด์ฌํ๋ ์ต์
์ด๋ค. ์ปจํ
์ด๋์ IP๋ฅผ ๊ตฌ์ฑํ์ง ์์ผ๋ฉฐ ๋ค๋ฅธ ์ปจํ
์ด๋๋ฟ๋ง ์๋๋ผ ์ธ๋ถ ๋คํธ์ํฌ์๋ ์ก์ธ์คํ ์ ์๋ค.
./docker/nginx/default.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
root /var/www/html;
index index.html index.htm index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
./docker/php/Dockerfile
1
FROM php:8.1.9-fpm
Docker Compose ์ฃผ์ ๋ช ๋ น์ด
start
์ปจํ ์ด๋ ์์pause
์ปจํ ์ด๋ ์ผ์์ ์งunpause
์ปจํ ์ด๋ ์ผ์์ ์ง ํด์ stop
์ปจํ ์ด๋ ์ค์งup
์ปจํ ์ด๋ ์์ฑ/์์ps
์ปจํ ์ด๋ ๋ชฉ๋กrun
์ปจํ ์ด๋ ์คํrestart
์ปจํ ์ด๋ ์ฌ์์kill
์คํ ์ค์ธ ์ปจํ ์ด๋ ๊ฐ์ ์ ์งrm
์ปจํ ์ด๋ ์ญ์ down
์ปจํ ์ด๋ ์ ์ง ๋ฐ ์ญ์ config
๊ตฌ์ฑ ํ์ผ ํ์ธlogs
์ปจํ ์ด๋ ๋ก๊ทธ ํ์ธ
Leave a comment