docker-compose 소개

Jeongkuk Seo
sjk5766
Published in
5 min readJun 8, 2019

여러 container를 한 번에 실행할 수 있는 docker-compose에 대해 소개합니다. docker와 기본적인 명령어들은 알고 있다고 가정합니다.

1. docker compose 배경

아래와 같은 개발환경이 있다고 가정해보겠습니다.

그럼 각 container를 실행하기 위해 아래와 같은 명령어를 5번 입력해야 합니다.

docker run -it -v /data:/data -p 80:80 -d --name homepage1 nginx

매일마다 출근해서 위 명령어를 5번 입력해야 하는군요. 만약 여기에 mysql과 php 그 외의 container가 더 올라간다고 가정하면 아침마다 귀찮아지겠죠? 이 때 docker compose를 이용하면 명령어 한 번으로 container가 몇 개든 실행할 수 있습니다.

2. docker compose 설치

Windows에서 docker를 사용하기 위해 docker desktop을 설치했다면 이미 설치가 되어있습니다. 이 링크 에서 docker desktop을 설치할 수 있습니다. 설치가 되었다면 명령 프롬프트에서 버전을 확인합니다.

3. docker compose 예제

docker compose는 기본적으로 docker-compose.yml 파일을 기반으로 실행됩니다. 아래 Nginx와 PHP container를 실행하는 docker-compose.yml 파일을 예시를 위해 간단히 작성했습니다.

version: ‘3’
services:
nginx:
image: nginx:latest
ports:
- “80:80”
php:
image: php:7.3-fpm
ports:
- “9000:9000”
volumes:
- ./source:/source

각 항목에 대해 설명하겠습니다.

version: compose 파일의 버전을 의미합니다. 버전 3이 최신인것을 확인할 수 있습니다.

services: services 부터 실제 container 설정을 명시합니다.

nginx: 사용자가 지정하는 이름입니다. 저는 이름을 nginx라고 했지만 여러분이 원하시는 다른 이름으로 변경해도 상관없습니다.

image: 해당 container가 어떤 image를 기반으로 실행되는지 지정합니다. 제 옵션은 nginx:latest로 docker hub의 최신 nginx 이미지로부터 실행됩니다.

ports: container와 host 간의 공유할 포트를 지정합니다. docker compose로 container를 실행한 다음 host의 브라우저에서 localhost를 입력하면 nginx 기본 페이지가 보일겁니다.

volumes: container와 host간의 공유할 디렉토리를 지정합니다. 제 기준에선 아래의 source 디렉토리를 container에서 접근할 수 있습니다.

docker compose로 실행 및 정지를 하는 명령어는 아래와 같습니다.

docker-compose up     // shell에서 실행
docker-compose up -d // 데몬으로 실행
docker-compose down // 정지

실제 실행 예는 아래와 같습니다.

맨 위에서 설명했던 구조를 docker-compose.yml로 작성하겠습니다. 본 포스팅은 docker-compose를 소개하는 글로 실제 맨 위 환경을 구성하려면 많은 옵션들이 포함되지만 최대한 간단하게 작성했습니다.

이제 굳이 docker run 명령을 여러번 입력하지 않아도 아래와 같이 명령어 한번으로 여러 container를 실행할 수 있게 되었습니다.

좀 더 docker-compose에 대해 알고 싶으신 분들은 PHP, Nginx, Nginx Reverse Proxy를 docker-compose로 구성하는 다음 포스팅을 읽어주세요

Drive has not been shared

혹시 위 포스팅을 진행하면서 Drive has not been shared 가 발생한 분들은 docker desktop에서 setting에 들어갑니다.

Shared Drives에서 체크박스를 클릭해주세요.

--

--