본문 바로가기

Docker

Docker Compose 설치 및 사용법

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