소개
이 랩에서는 Docker Compose 를 사용할 때 흔히 발생하는 "unable to locate package docker-compose-plugin" 오류를 해결하는 방법을 배우게 됩니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하는 데 필수적인 도구이지만, 사용자는 종종 설치 문제를 겪습니다. 이 랩에서는 문제의 원인을 이해하고 Ubuntu 22.04 시스템에서 Docker Compose 가 제대로 작동하도록 단계별 솔루션을 구현하는 방법을 안내합니다.
Docker Compose 와 오류 이해
오류를 해결하기 전에 Docker Compose 가 무엇인지, 그리고 이 오류가 발생하는 이유를 이해해 보겠습니다.
Docker Compose 란 무엇인가요?
Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose 를 사용하면 YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크 및 볼륨을 구성합니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 생성하고 시작합니다.
Docker Compose 는 특히 다음과 같은 경우에 유용합니다.
- 개발 환경
- 자동화된 테스트
- 단일 호스트 배포
"Unable to Locate Package" 오류
다음 명령을 사용하여 Docker Compose 를 설치하려고 할 때:
sudo apt-get install docker-compose-plugin
다음과 같은 오류가 발생할 수 있습니다.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package docker-compose-plugin
이 오류는 패키지 이름이 변경되었거나 시스템에 패키지 저장소가 제대로 구성되지 않았기 때문에 발생합니다.
현재 Docker 설치 확인
먼저 Docker 가 올바르게 설치되었는지 확인해 보겠습니다. 다음을 실행합니다.
docker --version
다음과 유사한 출력이 표시되어야 합니다.
Docker version 20.10.21, build baeda1f
이는 Docker 가 설치되었음을 확인합니다. 이제 Docker Compose 의 어떤 버전이 이미 설치되어 있는지 확인해 보겠습니다.
docker compose version
"command not found" 오류가 발생하면 Docker Compose 가 아직 설치되지 않았음을 확인합니다.
docker: 'compose' is not a docker command.
이제 문제를 이해했으므로 다음 단계에서 이를 해결해 보겠습니다.
Docker Compose 설치
Docker 가 설치되었지만 Docker Compose 가 없는 것을 확인했으므로 Docker Compose 를 올바르게 설치해 보겠습니다. Ubuntu 22.04 에서 Docker Compose 를 설치하는 두 가지 주요 방법이 있습니다.
- Docker CLI 용 Docker Compose 플러그인 사용
- 독립 실행형 Docker Compose 바이너리 사용
Docker Engine 버전 20.10.21 에 권장되는 첫 번째 방법을 사용해 보겠습니다.
패키지 목록 업데이트
먼저 패키지 목록이 최신 상태인지 확인합니다.
sudo apt-get update
패키지 목록이 업데이트되는 것을 보여주는 출력이 표시되어야 합니다.
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Reading package lists... Done
Docker Compose 플러그인 설치
Ubuntu 22.04 에서는 공식 Docker 저장소에서 Docker Compose 플러그인을 설치해야 합니다. 먼저 필요한 사전 요구 사항이 있는지 확인해 보겠습니다.
sudo apt-get install -y ca-certificates curl gnupg
이제 Docker 의 공식 GPG 키를 추가합니다.
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Apt 소스에 저장소를 추가합니다.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker 패키지로 패키지 데이터베이스를 업데이트합니다.
sudo apt-get update
이제 Docker Compose 플러그인을 설치합니다.
sudo apt-get install -y docker-compose-plugin
설치가 성공적으로 진행되는 것을 볼 수 있습니다.
Reading package lists... Done
Building dependency tree... Done
...
Setting up docker-compose-plugin (2.6.0~ubuntu-1~22.04.1) ...
Processing triggers for man-db (2.10.2-1) ...
Docker Compose 가 이제 설치되었는지 확인해 보겠습니다.
docker compose version
다음과 유사한 출력이 표시되어야 합니다.
Docker Compose version v2.6.0
이제 Docker CLI 용 Docker Compose 플러그인을 성공적으로 설치했습니다.
Docker Compose 테스트
이제 Docker Compose 를 성공적으로 설치했으므로 제대로 작동하는지 테스트하기 위해 간단한 프로젝트를 만들어 보겠습니다.
프로젝트 디렉토리 생성
먼저 테스트 프로젝트를 위한 디렉토리를 만들어 보겠습니다.
mkdir -p ~/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:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
이 구성은 Nginx 이미지를 사용하여 간단한 웹 서버를 정의합니다. 호스트의 포트 8080 을 컨테이너의 포트 80 에 매핑하고 로컬 디렉토리를 마운트하여 HTML 콘텐츠를 제공합니다.
Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장하고 Ctrl+X로 nano 를 종료합니다.
HTML 콘텐츠 생성
HTML 콘텐츠를 위한 디렉토리와 간단한 HTML 파일을 만들어 보겠습니다.
mkdir -p html
nano html/index.html
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>
파일을 저장하고 nano 를 종료합니다.
Docker Compose 애플리케이션 시작
이제 Docker Compose 애플리케이션을 시작해 보겠습니다.
docker compose up -d
다음과 유사한 출력이 표시되어야 합니다.
[+] Running 2/2
⠿ Network docker-compose-test_default Created
⠿ Container docker-compose-test-web-1 Started
이는 Docker Compose 가 네트워크를 생성하고 Nginx 컨테이너를 시작했음을 나타냅니다.
애플리케이션이 실행 중인지 확인
컨테이너가 실행 중인지 확인해 보겠습니다.
docker compose ps
다음과 유사한 출력이 표시되어야 합니다.
NAME COMMAND SERVICE STATUS PORTS
docker-compose-test-web-1 "/docker-entrypoint.…" web running 0.0.0.0:8080->80/tcp
이제 웹 서버에 요청을 보내 콘텐츠를 제공하는지 확인해 보겠습니다.
curl http://localhost:8080
생성한 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>
훌륭합니다! Docker Compose 애플리케이션을 성공적으로 생성하고 실행했습니다.
Docker Compose 애플리케이션 중지
Docker Compose 가 생성한 컨테이너, 네트워크 및 볼륨을 중지하고 제거하려면 다음을 실행합니다.
docker compose down
다음과 유사한 출력이 표시되어야 합니다.
[+] Running 2/2
⠿ Container docker-compose-test-web-1 Removed
⠿ Network docker-compose-test_default Removed
이는 Docker Compose 가 생성한 리소스를 정리했음을 확인합니다.
일반적인 Docker Compose 명령어 이해
Docker Compose 가 작동하므로 프로젝트에서 사용할 몇 가지 일반적인 명령어와 구성을 살펴보겠습니다.
필수 Docker Compose 명령어
다음은 가장 일반적으로 사용되는 Docker Compose 명령어입니다.
서비스 시작:
docker compose up -d-d플래그는 컨테이너를 백그라운드에서 실행합니다 (detached mode).서비스 중지:
docker compose stop이렇게 하면 컨테이너를 제거하지 않고 중지합니다.
서비스 중지 및 제거:
docker compose down이렇게 하면 컨테이너를 중지하고
up으로 생성된 컨테이너, 네트워크, 볼륨 및 이미지를 제거합니다.로그 보기:
docker compose logs로그를 실시간으로 따라가려면
-f플래그를 추가합니다.docker compose logs -f컨테이너 나열:
docker compose ps이렇게 하면 Docker Compose 서비스의 상태가 표시됩니다.
컨테이너 내에서 명령어 실행:
docker compose exec <service-name> <command>예를 들어, 웹 서비스에서 셸을 실행하려면:
docker compose exec web bash
더 복잡한 Docker Compose 구성 만들기
여러 서비스를 포함하는 더 복잡한 Docker Compose 구성을 만들어 보겠습니다. 이 예제를 위해 새 디렉토리를 만듭니다.
mkdir -p ~/project/complex-compose
cd ~/project/complex-compose
docker-compose.yml 파일을 만듭니다.
nano docker-compose.yml
다음 내용을 추가합니다.
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./nginx/html:/usr/share/nginx/html
depends_on:
- app
networks:
- frontend
- backend
app:
image: node:14-alpine
working_dir: /app
volumes:
- ./app:/app
command: "node server.js"
environment:
- NODE_ENV=production
- DB_HOST=db
- DB_PORT=5432
depends_on:
- db
networks:
- backend
db:
image: postgres:13-alpine
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypassword
- POSTGRES_DB=mydb
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
networks:
frontend:
backend:
volumes:
db-data:
파일을 저장하고 nano 를 종료합니다.
이 구성은 세 가지 서비스를 정의합니다.
- 웹 서버 (nginx)
- 백엔드 애플리케이션 (Node.js)
- 데이터베이스 (PostgreSQL)
또한 트래픽을 격리하기 위한 네트워크와 영구적인 데이터베이스 스토리지를 위한 볼륨을 정의합니다.
복잡한 구성을 위한 디렉토리 및 파일 만들기
필요한 디렉토리와 파일을 만들어 보겠습니다.
mkdir -p nginx/html app
간단한 HTML 파일을 만듭니다.
nano nginx/html/index.html
다음 내용을 추가합니다.
<!DOCTYPE html>
<html>
<head>
<title>Complex Docker Compose Example</title>
</head>
<body>
<h1>Complex Docker Compose Example</h1>
<p>
This page is served by Nginx, and the application is powered by Node.js
with PostgreSQL.
</p>
</body>
</html>
파일을 저장하고 nano 를 종료합니다.
간단한 Node.js 서버를 만듭니다.
nano app/server.js
다음 내용을 추가합니다.
const http = require("http");
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("Hello from Node.js server!\n");
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running on port ${port}`);
console.log(
`Database connection info: ${process.env.DB_HOST}:${process.env.DB_PORT}`
);
});
파일을 저장하고 nano 를 종료합니다.
이 설정은 더 복잡하며 실제 애플리케이션 아키텍처를 나타내지만, 더 많은 설정이 필요하므로 이 랩에서는 시작하지 않습니다.
Docker Compose 모범 사례
Docker Compose 를 사용할 때 따라야 할 몇 가지 모범 사례는 다음과 같습니다.
환경 변수 사용: 암호와 같은 민감한 정보를 환경 변수 또는
.env파일에 저장합니다.재시작 정책 정의: 프로덕션 환경의 경우 재시작 정책을 설정합니다.
services: web: restart: always특정 이미지 태그 사용: 프로덕션에서는 예상치 못한 변경 사항이 발생할 수 있으므로
latest를 사용하지 마십시오.구성 정리: 복잡한 설정의 경우
docker-compose.override.yml패턴을 사용하여 구성을 여러 파일로 분할합니다.리소스 제한 설정: 컨테이너 리소스 고갈 방지:
services: web: deploy: resources: limits: cpus: "0.5" memory: 512M
이러한 모범 사례를 따르면 더 유지 관리 가능하고 강력한 Docker Compose 구성을 만들 수 있습니다.
요약
이 랩에서는 다음을 통해 "unable to locate package docker-compose-plugin" 오류를 성공적으로 해결하는 방법을 배웠습니다.
- Docker Compose 가 무엇인지 이해하고 오류를 진단합니다.
- 공식 Docker 저장소를 추가하여 Docker Compose 를 올바르게 설치합니다.
- 간단한 Docker Compose 애플리케이션을 생성하고 테스트합니다.
- 더 복잡한 Docker Compose 구성 및 모범 사례를 탐색합니다.
이제 작동하는 Docker Compose 설치와 다중 컨테이너 Docker 애플리케이션 관리에 사용할 수 있는 지식을 갖게 되었습니다. 이 기반은 향후 더 복잡한 컨테이너화된 솔루션을 구축할 때 유용할 것입니다.
습득한 기술은 다음과 같습니다.
- Ubuntu 에서 패키지 설치 문제 해결
- Docker 저장소 작업
- Docker Compose 구성 생성 및 실행
- Docker Compose 를 사용하여 컨테이너화된 애플리케이션 관리
이러한 기술은 현대적인 애플리케이션 개발 및 배포 워크플로우에 필수적입니다.



