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