소개
컨테이너화는 최근 몇 년 동안 소프트웨어 기술 분야에서 큰 탄력을 받았습니다. 이는 Docker 덕분이며, 이는 컨테이너 내부의 프로세스 관리를 단순화하는 컨테이너 플랫폼입니다.
컨테이너는 물리적 호스트 머신에서 실행되는 다른 소프트웨어와 격리되어 소프트웨어를 실행할 수 있도록 하는 가볍고 가상화되었으며 이식 가능한 소프트웨어 정의 표준화 환경입니다. 이러한 이식성 기능 덕분에 개발자는 애플리케이션을 격리된 서비스로 모듈화할 수 있습니다. 또한, 독립적으로 서비스할 수 있어 확장할 수 있는 여지를 제공합니다.
애플리케이션을 여러 서비스로 분할하는 것은 확실히 훌륭하지만, 여러 컨테이너를 관리해야 하는 오버헤드가 발생합니다. 컨테이너들이 서로 통신하고, 동시에 시작하고 종료되도록 해야 합니다. Docker Compose라는 도구 덕분에 이 작업이 쉬워집니다. Docker Compose를 사용하면 개발자는 YAML 파일에 정의된 규칙을 사용하여 다중 컨테이너 Docker 애플리케이션을 실행할 수 있습니다. YAML 파일에는 애플리케이션 서비스에 대한 정의와 데이터 볼륨 및 네트워크를 공유하는 방법이 포함되어 있습니다. 서비스를 정의하고 나면 단일 명령으로 모든 서비스를 시작할 수 있습니다. 이 튜토리얼에서는 Ubuntu 20.04에서 Docker Compose를 설치, 구성 및 시작하는 방법을 보여드리겠습니다.
전제 조건
-
이 튜토리얼은 실습 위주이므로 초기 운영 환경으로 Ubuntu 20.04가 설치되어 있어야 합니다. 또한 sudo 권한이 있는 non-root 사용자가 있어야 합니다. 다음은 Ubuntu 서버 설정을 도와주는 단계별 튜토리얼입니다. 이 튜토리얼을 따라 sudoers 파일을 구성하십시오.
-
. 또한 Docker를 설치해야 합니다. 다음 튜토리얼을 참조하십시오: Ubuntu 18.04에 Docker를 설치하고 작동하는 방법.
1단계: Docker Compose 설치
Docker Compose의 공식 GitHub 리포지토리에서 최신 안정 버전을 다운로드할 것입니다. 최신 버전은 릴리스 페이지에서 확인할 수 있으며, 이 튜토리얼을 작성하는 시점의 최신 버전은 1.28.5.
먼저, non-root sudo 사용자로 Ubuntu 서버에 로그인하고 다음 명령을 입력합니다. 이 명령은 최신 릴리스(1.28.5)를 다운로드하고 실행 파일을 /usr/local/bin/docker-compose 디렉토리에 저장합니다. 이를 통해 docker-compose로 전역에서 액세스할 수 있게 됩니다.
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
다운로드가 완료되면 다음 명령을 입력하여 docker-compose 명령을 실행할 수 있도록 적절한 권한을 설정합니다.
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
이제 다음 명령을 실행하여 설치가 성공적으로 완료되었고 명령을 호출할 수 있는지 확인합니다.
|
1 |
docker-compose –version |
다음과 같은 출력이 표시되어야 합니다.

이것으로 시스템에 Docker Compose가 성공적으로 설치되었음을 확인할 수 있습니다.
2단계: docker-compose.yml 파일 생성
To help you understand how to work with docker-compose.yml의 작동 방식을 이해하는 데 도움이 되도록, 공식 Nginx 이미지를 사용하여 웹 서버 환경을 구성해 보겠습니다. 이 이미지는 Docker Hub에서 가져옵니다. 배포가 완료되면 컨테이너에서 기본 HTML 페이지를 서비스할 수 있어야 합니다.
작업을 진행할 작업 디렉토리를 홈 폴더에 생성합니다. 다음 명령을 입력하여 디렉토리를 생성합니다.
|
1 |
mkdir ~/compose-example |
다음으로, 해당 디렉토리로 이동합니다.
|
1 |
cd ~/compose-example |
디렉토리 내부로 이동한 후, Nginx 환경의 문서 루트가 될 애플리케이션 폴더를 생성합니다. 이 폴더의 이름은 app:
|
1 |
mkdir app |
- HTML 페이지 생성
Let’s use nano 텍스트 편집기를 사용하여 app 폴더 내에 index.html 파일을 생성해 보겠습니다.
|
1 |
nano app/index.html |
다음으로, 파일에 아래의 HTML 코드를 추가합니다.
|
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 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Docker Compose 예제</title> <!-- Bootstrap 핵심 CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">CloudSigma와 함께하는 멋진 Docker Compose 예제</h1> <p class="h4"> 이것은 기본적인 정적 HTML 페이지입니다. </p> <p class="lead text-muted"> 이 페이지는 다음을 사용하여 빌드된 Nginx Docker 컨테이너에서 제공됩니다: <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
파일을 저장하려면 CTRL + O, ENTER를 누르세요. 그런 다음 CTRL + X로 닫습니다. 다음으로, 프로젝트 루트 내에 docker-compose.yml 파일을 생성하겠습니다.
- docker-compose를 사용하여 HTML 페이지 호스팅하기
다음으로, 다음 명령어를 입력하여 nano 편집기로 파일을 엽니다:
|
1 |
nano docker-compose.yml |
그 후, 파일 내에 다음 코드 스니펫을 추가합니다:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
이 docker-compose.yml 파일은 우리가 어떤 구성 버전을 사용하고 있는지 Docker Compose에 알려주는 버전 번호로 시작합니다. 다음에 대해 자세히 알아보려면 이 링크를 따르십시오: Docker Compose versioning.
버전 번호 뒤에는 환경을 구성하는 서비스들이 포함된 services 블록이 있습니다. 이 튜토리얼에서는 다음과 같은 단일 서비스만 지정했습니다: webserver. webserver 서비스는 nginx:alpine 이미지를 사용합니다. 또한 포트 리디렉션 8000:80을(를) 정의했습니다. 이것이 의미하는 바는 호스트 머신의 8000 포트로부터의 모든 요청이 Nginx가 실행 중인 80 포트의 webserver 컨테이너로 리디렉션된다는 것입니다.
volumes 지시문을 사용하면 데이터를 유지하는 데 사용할 수 있는 호스트 머신과 컨테이너 간의 shared volume을(를) 생성할 수 있습니다. 우리의 yml 코드 스니펫에서는 로컬 app 폴더를 컨테이너와 공유합니다. 컨테이너 내부에서는 이 폴더가 /usr/share/nginx/html 위치에 배치됩니다. 따라서 Nginx의 기본 문서 루트를 덮어쓰게 됩니다. 이제 파일을 저장하고 닫으셔도 됩니다.
여기까지 컨테이너화된 웹 서버 환경을 빌드하기 위한 지침이 담긴 예제 HTML 웹 페이지와 docker-compose.yml 파일을 생성했습니다. 다음 단계에서 이 설정을 어떻게 실행하는지 살펴보겠습니다.
3단계: Docker Compose 명령 실행
이 단계에서는 컨테이너화된 환경을 시작하는 명령을 실행합니다. 아래는 Docker 이미지 다운로드 프로세스를 초기화하고, webserver 서비스를 위한 컨테이너를 생성하며, 백그라운드에서 컨테이너화된 환경을 실행하는 단일 명령입니다:
|
1 |
docker-compose up -d |
Docker는 빠르고 효율적으로 설계되었으므로, 위의 명령을 실행하면 먼저 로컬 시스템에 정의된 이미지가 있는지 확인합니다. 이미지가 없는 경우 Docker Hub 리포지토리에서 가져옵니다. 다음과 유사한 출력이 표시되어야 합니다:

명령 실행이 완료되면 백그라운드에서 컨테이너 환경이 실행되기 시작합니다. 다음 명령을 사용하여 실행 중인지 확인할 수 있습니다:
|
1 |
docker-compose ps |
다음과 유사한 출력을 얻어야 합니다:

서버의 IP 주소 또는 도메인 이름으로 이동하고 포트 8000을 추가하면(즉, server_domain_or_IP:8000) 우리가 생성한 예제 HTML 페이지를 볼 수 있을 것입니다:

기억하시겠지만, 우리는 컨테이너와 호스트 시스템 간에 공유 볼륨을 설정했습니다. 이를 통해 컨테이너의 파일이 호스트 시스템의 파일과 동기화된 상태로 유지됩니다. 따라서 index.html 파일을 변경하면 컨테이너와 자동으로 동기화되며 브라우저에서 페이지를 새로 고칠 때 반영됩니다. nano 편집기로 시도해 볼 수 있습니다. 다음 단계에서 몇 가지 명령을 더 알아보겠습니다.
4단계: 컨테이너 환경 관리를 위한 추가 Docker Compose 명령
단일 docker-compose-up 명령을 사용하여 웹 페이지를 성공적으로 배포했으므로, 컨테이너화된 환경을 관리하는 데 유용할 수 있는 몇 가지 추가 명령을 살펴보겠습니다.
logs 명령부터 시작하겠습니다. 로그는 애플리케이션 장애를 해결할 때 매우 중요할 수 있습니다. 먼저 다음 명령을 실행하여 Nginx 컨테이너에서 생성된 로그를 확인합니다:
|
1 |
docker-compose logs |
다음은 로그의 샘플 출력입니다:

다음 명령을 사용하여 컨테이너의 상태를 변경하지 않고 환경 실행을 일시 중지할 수 있습니다:
|
1 |
docker-compose pause |
![]()
다음으로, 일시 중지를 해제하거나 실행을 재개하려면 다음 명령을 사용합니다:
|
1 |
docker-compose unpause |
![]()
데이터를 삭제하지 않고 컨테이너를 중지하고 싶을 수 있습니다. 그렇게 하려면 다음 명령을 사용하십시오:
|
1 |
docker-compose stop |
![]()
컨테이너화된 환경과 관련된 컨테이너, 네트워크 및 볼륨을 삭제하려면 다음 명령을 사용합니다:
|
1 |
docker-compose down |
![]()
위 명령은 Docker Compose가 환경을 실행하는 데 사용하는 베이스 이미지를 제거하지 않는다는 점에 유의하세요. 이는 로컬 머신에서 일치하는 이미지를 확인하므로 환경을 시작할 때 더 빠른 빌드를 보장합니다. 베이스 이미지를 완전히 제거하려면 명령에 이를 지정해야 합니다. 이 예시에서는 nginx:alpine 이미지를 다음 명령을 사용하여 제거할 수 있습니다:
|
1 |
docker image rm nginx:alpine |

마지막으로, 공식 Docker Compose 명령줄 참조 문서에서 더 많은 명령을 찾을 수 있습니다.
결론
이 튜토리얼에서는 Ubuntu 20.04에 Docker Compose를 설치하고, Nginx 웹 서버 이미지를 기반으로 컨테이너화된 환경을 생성했으며, Docker Compose 명령을 사용하여 다양한 서비스를 관리하는 방법을 배웠습니다.
여러 컨테이너에 의존하는 실제 동적 애플리케이션을 배포하는 방법을 배우려면 Docker Compose를 사용하여 Laravel, Nginx 및 MySQL 배포하기 튜토리얼을 읽어보세요. 또한 전체 docker-compose 명령 목록은 공식 Docker Compose 문서.
에서 확인할 수 있습니다. 즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.