Docker Compose : 여러 컨테이너를 손쉽게 관리할 수 있게 해주는 도구
하나의 설정 파일(docker-compose.yml)로 여러 컨테이너를 동시에 관리할 수 있다.
1. Docker Compose 설치
# Docker 설치 확인
$ docker --version
Docker version 27.1.2, build d01f264
# Docker Compose 설치
$ sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 다운로드한 파일에 실행 권한을 부여
$ sudo chmod +x /usr/local/bin/docker-compose
# 설치가 완료되었는지 버전을 확인
$ docker-compose --version
Docker Compose version v2.29.7
2. Docker Compose 기본 설정 및 실행
1) 프로젝트 디렉터리 생성 및 이동
$ mkdir -p ~/DockerCompose/nginx_basic
$ cd ~/DockerCompose/nginx_basic
2) docker-compose.yml 파일 생성 및 작성
$ vim docker-compose.yml
version: "3"
services:
web:
image: nginx
volumes:
- "/some/content:/usr/share/nginx/html:ro"
# services: web 서비스는 Nginx 이미지로 구성
# volumes: /some/content 경로의 데이터를 컨테이너 내부의 /usr/share/nginx/html로 마운트
3) Docker Compose 실행
$ docker compose up -d
# -d 옵션은 백그라운드 실행을 의미
4) 컨테이너 상태 확인
$ docker ps -a
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
dcd3e8534f52 nginx "/docker-entrypoint.…" Up 37 seconds 80/tcp nginx_basic-web-1
# nginx_basic-web-1 컨테이너가 정상적으로 실행 중임을 확인
3. 네트워크 및 포트 설정
Docker Compose는 각 서비스별로 네트워크를 자동으로 생성함
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
69d7882db05b nginx_basic_default bridge local
# docker-compose.yml 파일에 포트를 지정
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
$ docker compose up -d
4. 컨테이너 제어 명령어
컨테이너 중지
$ docker compose stop web
컨테이너 시작
$ docker compose start web
5. Mysql과 Nginx 동시에 실행하기
복합 서비스 구성 (docker-compose.yml)
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- "/some/content:/usr/share/nginx/html:ro"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_USER: example
MYSQL_PASSWORD: example
ports:
- "3333:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data: {}
# web 서비스: Nginx를 사용하며, 8080 포트를 외부로 열어줌
# db 서비스: MySQL을 사용하며 3306 포트를 3333으로 매핑
# volumes: MySQL 데이터를 호스트에 저장
Docker Compose 실행
$ docker compose up -d
[오류]
포트 충돌
만약 3306 포트가 이미 사용 중일 경우 에러가 뜨면서 제대로 실행이 안된다.
$ vim docker-compose.yml
# ports 부분을 "3333:3306"으로 수정
# 컨테이너 상태 확인
$ docker ps -a
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
5044b47f9bc4 mysql:5.7 "docker-entrypoint.s…" Up 23 seconds 0.0.0.0:3333->3306/tcp, :::3333->3306/tcp dockercompose-db-1
'Docker' 카테고리의 다른 글
Docker 컨테이너 생성 및 구동 (2) | 2024.10.04 |
---|---|
Docker 개념 및 설치 과정 (2) | 2024.10.03 |