웹사이트 검색

Ubuntu 16.04에 Docker Compose를 설치하는 방법


소개

Docker는 소프트웨어 컨테이너 내에서 Linux 애플리케이션 배포를 자동화하는 훌륭한 도구이지만 잠재력을 최대한 활용하려면 애플리케이션의 각 구성 요소가 자체 개별 컨테이너에서 실행되어야 합니다. 구성 요소가 많은 복잡한 애플리케이션의 경우 모든 컨테이너를 오케스트레이션하여 함께 시작, 통신 및 종료하면 다루기 어려워질 수 있습니다.

Docker 커뮤니티는 단일 YAML 파일을 사용하여 모든 Docker 컨테이너 및 구성을 오케스트레이션할 수 있는 Fig라는 인기 있는 솔루션을 내놓았습니다. 이는 인기가 높아져 Docker 팀이 현재 사용되지 않는 Fig 소스를 기반으로 Docker Compose를 만들기로 결정했습니다. Docker Compose를 사용하면 사용자가 시작, 종료, 컨테이너 내 연결 및 볼륨 설정을 포함하여 Docker 컨테이너의 프로세스를 보다 쉽게 조정할 수 있습니다.

이 자습서에서는 다중 컨테이너 애플리케이션을 관리하는 데 도움이 되는 최신 버전의 Docker Compose를 설치하는 방법을 보여줍니다.

전제 조건

이 문서를 따르려면 다음과 같은 Ubuntu 16.04 서버가 필요합니다.

  • Sudo 권한이 있는 루트가 아닌 사용자(Ubuntu 16.04의 초기 서버 설정에 설정 방법이 설명되어 있음)
  • Ubuntu 16.04에서 Docker를 설치 및 사용하는 방법의 1단계 및 2단계 지침에 따라 Docker 설치

이러한 작업이 완료되면 따라갈 준비가 된 것입니다.

참고: 전제 조건에서 Ubuntu 16.04에 Docker를 설치하기 위한 지침을 제공하지만 이 문서의 docker 명령은 Docker가 설치되어 있는 한 다른 운영 체제에서도 작동해야 합니다.

1단계 - Docker Compose 설치

공식 Ubuntu 리포지토리에서 Docker Compose를 설치할 수 있지만 최신 릴리스 뒤에 몇 가지 부 버전이 있으므로 Docker의 GitHub 리포지토리에서 Docker Compose를 설치합니다. 아래 명령은 릴리스 페이지에서 찾을 수 있는 것과 약간 다릅니다. -o 플래그를 사용하여 출력을 리디렉션하는 대신 먼저 출력 파일을 지정함으로써 이 구문은 sudo를 사용할 때 발생하는 권한 거부 오류로 실행되는 것을 방지합니다.

현재 릴리스를 확인하고 필요한 경우 아래 명령에서 업데이트합니다.

  1. sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

다음으로 권한을 설정합니다.

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

그런 다음 버전을 확인하여 설치가 성공했는지 확인합니다.

  1. docker-compose --version

이렇게 하면 설치한 버전이 인쇄됩니다.

Output
docker-compose version 1.18.0, build 8dd22a9

이제 Docker Compose가 설치되었으므로 "Hello World\ 예제를 실행할 준비가 되었습니다.

2단계 - Docker Compose로 컨테이너 실행

공개 Docker 레지스트리인 Docker Hub에는 데모 및 테스트를 위한 Hello World 이미지가 포함되어 있습니다. 단일 이미지를 호출하는 YAML 파일인 Docker Compose를 사용하여 컨테이너를 실행하는 데 필요한 최소 구성을 보여줍니다.

먼저 YAML 파일용 디렉토리를 만들고 그 디렉토리로 이동합니다.

  1. mkdir hello-world
  2. cd hello-world

그런 다음 YAML 파일을 생성합니다.

  1. nano docker-compose.yml

다음 내용을 파일에 넣고 파일을 저장한 다음 텍스트 편집기를 종료합니다.

my-test:
 image: hello-world

YAML 파일의 첫 번째 줄은 컨테이너 이름의 일부로 사용됩니다. 두 번째 줄은 컨테이너를 만드는 데 사용할 이미지를 지정합니다. docker-compose up 명령을 실행하면 지정한 이름 hello-world로 로컬 이미지를 찾습니다. 이를 통해 파일을 저장하고 종료합니다.

docker images 명령을 사용하여 시스템의 이미지를 수동으로 볼 수 있습니다.

  1. docker images

로컬 이미지가 전혀 없으면 열 머리글만 표시됩니다.

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

이제 ~/hello-world 디렉토리에 있는 동안 다음 명령을 실행합니다.

  1. docker-compose up

명령을 처음 실행할 때 hello-world라는 로컬 이미지가 없으면 Docker Compose는 Docker Hub 공개 리포지토리에서 해당 이미지를 가져옵니다.

Output
Pulling my-test (hello-world:latest)... latest: Pulling from library/hello-world c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest . . .

이미지를 가져온 후 docker-compose는 컨테이너를 만들고 연결하고 hello 프로그램을 실행합니다. 그러면 설치가 제대로 작동하는지 확인됩니다.

Output
. . . Creating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | . . .

그런 다음 수행한 작업에 대한 설명을 인쇄합니다.

Output of docker-compose up
1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

Docker 컨테이너는 명령이 활성화되어 있는 동안에만 실행되므로 hello 실행이 완료되면 컨테이너가 중지됩니다. 결과적으로 활성 프로세스를 볼 때 열 헤더가 나타나지만 hello-world 컨테이너는 실행 중이 아니기 때문에 나열되지 않습니다.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

활성 컨테이너뿐만 아니라 모든 컨테이너를 표시하는 -a 플래그를 사용하여 다음 단계에서 필요한 컨테이너 정보를 볼 수 있습니다.

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago drunk_payne

컨테이너 작업이 완료되면 컨테이너를 제거하는 데 필요한 정보가 표시됩니다.

3단계 - 이미지 제거(선택 사항)

불필요한 디스크 공간을 사용하지 않도록 로컬 이미지를 제거합니다. 그렇게 하려면 docker rm 명령과 CONTAINER ID 또는 NAME을 사용하여 이미지를 참조하는 모든 컨테이너를 삭제해야 합니다. 아래에서는 방금 실행한 docker ps -a 명령의 CONTAINER ID를 사용하고 있습니다. 컨테이너의 ID를 대체해야 합니다.

  1. docker rm 06069fd5ca23

이미지를 참조하는 모든 컨테이너가 제거되면 이미지를 제거할 수 있습니다.

  1. docker rmi hello-world

결론

이제 Docker Compose를 설치하고 Hello World 예제를 실행하여 설치를 테스트하고 테스트 이미지와 컨테이너를 제거했습니다.

Hello World 예제에서 설치를 확인했지만 간단한 구성은 Docker 컨테이너 그룹을 동시에 가동 및 중단할 수 있는 Docker Compose의 주요 이점 중 하나를 보여주지 않습니다. Docker Compose의 성능을 확인하려면 Ubuntu 16.04에서 Docker 및 Docker Compose를 사용하여 지속적인 통합 테스트 환경을 구성하는 방법이라는 실용적인 예를 확인하십시오.