Docker Compose 'zsh: command not found' 문제 해결

DockerBeginner
지금 연습하기

소개

Docker Compose 는 멀티 컨테이너 Docker 애플리케이션을 관리하기 위한 필수적인 도구입니다. 이 랩에서는 Docker Compose 를 처음 시작할 때 많은 사용자가 겪는 일반적인 "zsh: command not found: docker-compose" 오류를 해결하는 방법을 안내합니다.

이 랩을 완료하면 Docker Compose 를 올바르게 설치하고, 경로 관련 문제를 해결하며, Docker Compose 를 사용하여 간단한 멀티 컨테이너 애플리케이션을 실행하는 방법을 배우게 됩니다. 이러한 기술은 컨테이너화된 애플리케이션으로 작업하는 개발자에게 기본적인 것입니다.

Docker 및 Docker Compose 이해

문제 해결을 시작하기 전에 Docker Compose 가 무엇이며 Docker 생태계에서 왜 중요한지 이해해 보겠습니다.

Docker 란 무엇인가요?

Docker 는 개발자가 컨테이너에서 애플리케이션을 빌드, 패키징 및 실행할 수 있도록 하는 플랫폼입니다. 컨테이너는 애플리케이션을 실행하는 데 필요한 모든 것 (코드, 런타임, 시스템 도구, 라이브러리 및 설정) 을 포함하는 가볍고 격리된 환경입니다.

Docker Compose 란 무엇인가요?

Docker Compose 는 멀티 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Docker Compose 를 사용하면 YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크 및 볼륨을 구성합니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 생성하고 시작할 수 있습니다.

Docker 가 시스템에 제대로 설치되었는지 확인해 보겠습니다.

docker --version

다음과 유사한 출력이 표시되어야 합니다.

Docker version 20.10.21, build baeda1f

이는 Docker 가 설치되어 사용할 준비가 되었음을 확인합니다. 이제 Docker Compose 를 실행하여 설치되었는지 확인해 보겠습니다.

docker-compose --version

Docker Compose 가 설치되지 않은 경우 다음 오류가 표시됩니다.

zsh: command not found: docker-compose

이 오류 메시지가 이 랩의 초점입니다. 다음 단계에서 이 문제를 해결하고 수정할 것입니다.

Docker Compose 를 사용하는 이유

Docker Compose 는 멀티 컨테이너 애플리케이션을 관리하는 데 몇 가지 장점을 제공합니다.

  1. 구성 단순화: 전체 애플리케이션 스택을 단일 YAML 파일에 정의합니다.
  2. 일관성 보장: 여러 환경에서 동일한 애플리케이션 설정을 실행합니다.
  3. 종속성 관리: 서비스 시작 순서 및 컨테이너 간 통신을 처리합니다.
  4. 생산성 향상: 전체 애플리케이션 수명 주기를 관리하는 간단한 명령으로 시간을 절약합니다.

다음 단계에서는 Docker Compose 를 설치하고 "command not found" 오류를 해결합니다.

Docker Compose 설치

Docker Compose 가 무엇인지 이해했으므로 "command not found" 오류를 해결하기 위해 시스템에 설치해 보겠습니다.

Docker Compose 바이너리 다운로드

첫 번째 단계는 Docker Compose 바이너리를 다운로드하는 것입니다. 공식 Docker Compose 바이너리는 GitHub 에서 사용할 수 있습니다. curl 명령을 사용하여 다운로드합니다.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

이 명령은 운영 체제 아키텍처에 맞는 Docker Compose 바이너리를 다운로드하여 /usr/local/bin/docker-compose에 저장합니다. 파일을 다운로드하는 데 시간이 걸립니다.

Docker Compose 실행 가능하게 만들기

바이너리를 다운로드한 후 실행 가능하게 만들어야 합니다.

sudo chmod +x /usr/local/bin/docker-compose

이 명령은 Docker Compose 바이너리에 실행 권한을 부여합니다.

설치 확인

이제 Docker Compose 가 올바르게 설치되었는지 확인해 보겠습니다.

docker-compose --version

다음과 유사한 출력이 표시되어야 합니다.

Docker Compose version v2.17.2

"command not found" 오류가 계속 표시되면 /usr/local/bin 디렉토리가 시스템의 PATH 에 없을 수 있습니다. 다음 단계에서 이 문제를 해결할 것입니다.

PATH 변수 이해

PATH 변수는 Linux 에서 셸이 명령을 실행할 때 실행 파일을 검색할 디렉토리를 알려주는 환경 변수입니다. 현재 PATH 를 보려면 다음을 실행합니다.

echo $PATH

콜론 (:) 으로 구분된 디렉토리 목록이 표시되어야 합니다. /usr/local/bin이 이 목록에 없으면 셸이 docker-compose 명령을 찾을 수 없는 이유를 설명할 수 있습니다.

다음 단계에서는 Docker Compose 를 사용하는 것을 방해할 수 있는 나머지 문제를 해결하고 해결할 것입니다.

"Command Not Found" 오류 문제 해결

설치 후에도 "zsh: command not found: docker-compose" 오류가 계속 발생하면 몇 가지 일반적인 원인과 해결 방법을 문제 해결해 보겠습니다.

해결 방법 1: 심볼릭 링크 생성

일반적인 해결 방법 중 하나는 PATH 에 확실히 포함된 디렉토리 (예: /usr/bin) 에 Docker Compose 바이너리에 대한 심볼릭 링크를 만드는 것입니다.

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

이 명령은 기본적으로 시스템의 PATH 에 포함되는 /usr/bin 디렉토리에 Docker Compose 바이너리에 대한 심볼릭 링크 (바로 가기) 를 만듭니다.

심볼릭 링크를 만든 후 Docker Compose 를 다시 실행해 봅니다.

docker-compose --version

이제 오류 없이 Docker Compose 버전 정보를 볼 수 있습니다.

해결 방법 2: Docker Compose 플러그인 사용 (대안)

최신 버전의 Docker 에서는 Compose 를 플러그인으로 사용할 수 있습니다. 이 방법을 선호하는 경우 다음을 시도해 볼 수 있습니다.

docker compose version

dockercompose 사이에 하이픈이 없는 것에 유의하세요. 이 명령이 작동하면 Docker Compose 가 플러그인으로 제공되며 이 구문을 사용하여 대신 사용할 수 있습니다.

해결 방법 3: Docker Compose 를 PATH 에 추가

Docker Compose 를 현재 위치에 유지하고 싶지만 심볼릭 링크가 작동하지 않는 경우 디렉토리를 수동으로 PATH 에 추가할 수 있습니다.

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc

이렇게 하면 /usr/local/bin이 PATH 에 추가되고 변경 사항이 현재 세션에 즉시 적용됩니다.

확인

어떤 해결 방법을 사용했든 Docker Compose 가 이제 제대로 작동하는지 확인합니다.

docker-compose --version

다음과 유사한 출력이 표시되어야 합니다.

Docker Compose version v2.17.2

이제 Docker Compose 를 성공적으로 설치하고 구성했으므로 다음 단계에서는 설치를 테스트하기 위해 간단한 Docker Compose 프로젝트를 만들 것입니다.

간단한 Docker Compose 프로젝트 생성

이제 Docker Compose 가 제대로 설치되어 작동하므로 설정을 테스트하기 위해 간단한 프로젝트를 만들어 보겠습니다. 웹 서버와 Redis 데이터베이스가 있는 기본 웹 애플리케이션을 만들 것입니다.

프로젝트 디렉토리 생성

먼저 프로젝트 전용 디렉토리를 만들어 보겠습니다.

mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test

Docker Compose 파일 생성

이제 nano 텍스트 편집기를 사용하여 docker-compose.yml 파일을 만들어 보겠습니다.

nano docker-compose.yml

다음 내용을 파일에 복사하여 붙여넣습니다.

version: "3"
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  redis:
    image: redis:alpine

이 Docker Compose 파일은 두 개의 서비스를 정의합니다.

  • web: 로컬 디렉토리에서 콘텐츠를 제공하는 Nginx 웹 서버
  • redis: 캐싱 또는 세션 데이터를 저장하기 위한 Redis 데이터베이스

Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장한 다음 Ctrl+X를 눌러 nano 를 종료합니다.

HTML 콘텐츠 생성

웹 서비스가 제공할 간단한 HTML 페이지를 만들어 보겠습니다.

mkdir -p html
nano html/index.html

다음 내용을 파일에 복사하여 붙여넣습니다.

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Hello from Docker Compose!</h1>
    <p>If you can see this, your Docker Compose setup is working correctly.</p>
  </body>
</html>

Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장한 다음 Ctrl+X를 눌러 nano 를 종료합니다.

Docker Compose 프로젝트 실행

이제 Docker Compose 프로젝트를 시작해 보겠습니다.

docker-compose up -d

-d 플래그는 컨테이너를 백그라운드에서 실행합니다 (분리 모드). 다음과 유사한 출력이 표시되어야 합니다.

Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1   ... done
Creating docker-compose-test_redis_1 ... done

서비스가 실행 중인지 확인

서비스가 제대로 실행 중인지 확인해 보겠습니다.

docker-compose ps

다음과 유사한 출력이 표시되어야 합니다.

           Name                         Command               State          Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
docker-compose-test_web_1     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080->80/tcp

웹 애플리케이션에 액세스

이제 LabEx 인터페이스에서 웹 브라우저를 열고 http://localhost:8080으로 이동하여 웹 애플리케이션에 액세스할 수 있습니다. "Hello from Docker Compose!" 메시지가 표시되어야 합니다.

또는 curl을 사용하여 명령줄에서 웹 서버를 확인할 수 있습니다.

curl http://localhost:8080

앞서 만든 HTML 콘텐츠가 표시되어야 합니다.

Docker Compose 프로젝트 중지

테스트를 마쳤으면 Docker Compose 프로젝트를 중지할 수 있습니다.

docker-compose down

다음과 유사한 출력이 표시되어야 합니다.

Stopping docker-compose-test_web_1   ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1   ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default

축하합니다! Docker Compose 를 성공적으로 설치하고 "command not found" 오류를 해결했으며 간단한 다중 컨테이너 애플리케이션으로 설정을 테스트했습니다.

요약

이 랩에서는 다음을 배우셨습니다.

  1. 다중 컨테이너 애플리케이션 관리에서 Docker Compose 의 역할 이해
  2. 시스템에 Docker Compose 설치
  3. "zsh: command not found: docker-compose" 오류 문제 해결 및 해결
  4. Docker Compose 를 사용하여 간단한 다중 컨테이너 애플리케이션 생성 및 실행

이러한 기술은 Docker 및 Docker Compose 를 사용하는 데 탄탄한 기반을 제공합니다. 이제 Docker Compose 를 사용하여 복잡한 다중 컨테이너 애플리케이션을 자신 있게 정의, 배포 및 관리할 수 있습니다.

추가 학습을 위해 환경 변수, 네트워크, 볼륨 및 서비스 확장과 같은 더 고급 Docker Compose 기능을 살펴보세요. 또한 프로덕션 환경에서 Docker Compose 를 사용하는 방법과 CI/CD 파이프라인과 통합하는 방법에 대해 배우고 싶을 수도 있습니다.