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 ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธ

Categories:

Updated:

Leave a comment