도커화(Dockerisation)는 소프트웨어 산업에서 배포 및 자동화 프로세스를 재정의했습니다. 시작된 이래로, Docker 팀은 자동화된 배포를 원활하게 만들기 위해 지속적으로 노력해 왔습니다. 컨테이너화 기술은 빠른 애플리케이션 개발과 효율성을 가능하게 할 뿐만 아니라 시간과 고된 노력을 절약해 줍니다. 멀티 컨테이너 애플리케이션을 오케스트레이션하고, 정의하고, 실행하는 등의 타의 추종을 불허하는 기능들은 Docker를 개발자들이 가장 선호하는 선택으로 만듭니다.
Docker 컨테이너 및 이미지
Docker를 더 깊이 이해하기 위해 뛰어들기 전에, 기본 사항을 복습하는 것이 필수적입니다. Docker를 사용해 본 경험이 없다면 Docker가 어떻게 작동하는지 이해하는 것이 까다로울 수 있습니다. 이 섹션에서는 초보자에게 필수적인 몇 가지 개념을 정의할 것입니다. 이러한 개념에 익숙하다고 생각되면 자유롭게 건너뛰고 다음 섹션으로 진행하셔도 좋습니다. 또한 저희의 기본적인 Docker 개념을 설명하는 종합 가이드.
-
Docker 이미지
Docker 이미지는 읽기 전용 파일의 모음입니다. Docker 이미지를 생성하면 삭제는 가능하지만 수정할 수는 없습니다. 필요에 따라 하나 이상의 Docker 컨테이너를 생성하기 위해 Docker 이미지를 사용합니다. 시스템에서 실행 중인 이미지 수를 확인하려면 다음 명령어를 사용하세요:
|
1 |
$docker images |
다음과 같은 원격 레지스트리에서 이미지를 가져올(pull) 때, Docker Hub에서 파일과 폴더를 다운로드하게 됩니다. 이미지를 가져오려면 다음 명령어를 사용하세요:
|
1 |
$docker pull (name of the image) |
-
Docker 컨테이너
Docker 이미지는 Docker 컨테이너의 청사진입니다. 기술적으로 Docker 컨테이너는 Docker 이미지의 인스턴스입니다. Docker 이미지가 부모와 같다면, Docker 컨테이너는 자식과 같다고 상상해 보세요. 한 번만 생성할 수 있는 Docker 이미지와 달리, 단일 이미지를 사용하여 여러 컨테이너를 생성할 수 있습니다. 시스템에서 실행 중인 이미지 목록을 확인하려면 다음 명령어를 사용하세요:
|
1 |
$docker ps |
컨테이너를 가져오려면 다음 명령어를 사용하세요:
|
1 |
$docker pull (name of the container) |
-
Docker 이미지와 컨테이너의 작동 방식
Docker 이미지와 컨테이너는 서로 긴밀하게 협력하여 Docker의 잠재력을 발휘합니다. 단일 컨테이너는 run 명령어를 통해 Docker 이미지를 사용하여 빌드됩니다. Docker 컨테이너를 생성하면 컨테이너 레이어(Container Layer)라고 하는 새로운 레이어가 생성됩니다. 새로 생성된 레이어에는 애플리케이션과 그 종속성이 포함되어 있습니다. 생성하는 모든 컨테이너는 서로 다른 읽기/쓰기 컨테이너 레이어를 가지며, Docker 컨테이너에서 변경된 모든 사항은 컨테이너 레이어에 자동으로 반영됩니다. 컨테이너를 삭제하면 컨테이너 레이어도 함께 손실된다는 점을 기억하세요.
Docker Compose 소개
Docker Compose는 모든 Docker 컨테이너를 단일 YAML 파일로 구성하고 오케스트레이션할 수 있는 컨테이너 관리 도구입니다. 이 도구를 사용하면 컨테이너 시작, 중지, 컨테이너 간 링크 및 볼륨 생성이 모두 쉬워집니다.
-
Docker Compose는 어떤 역할을 하나요?
간단히 말해, Docker Compose는 충돌과 조직적 문제를 제거하여 복잡한 작업을 더 쉽게 만들어 줍니다. 사용자가 다양한 Docker 컨테이너를 중앙에서 관리할 수 있도록 지원합니다. 즉, 하나의 큰 컨테이너에 모든 서비스를 담는 대신, Docker Compose는 서비스를 여러 서비스로 분할하여 사용자가 손쉽게 액세스하고 관리할 수 있도록 합니다.
이 가이드에서는 CentOS 7에서 멀티 컨테이너 애플리케이션을 관리하기 위해 최신 버전의 Docker Compose를 설치하는 단계를 안내합니다. 또한 소프트웨어를 성공적으로 사용하는 데 필요한 몇 가지 기본 명령어도 살펴보겠습니다..
-
Docker Compose 사용 방법
Docker Compose를 사용하는 것은 초보자에게도 매우 쉽습니다. Docker Compose에 포함된 3단계 프로세스를 살펴보겠습니다:
1. 빌드(Build): 먼저, 프로젝트 요구 사항에 따라 Dockerfile에서 이미지를 빌드하거나 레지스트리에서 가져옵니다.
2. 정의(Define): 다음으로, compose.yml 파일에 모든 구성 요소 서비스를 정의해야 합니다.
3. 실행(Run): 구성 요소를 정의한 후에는 docker-compose 명령어를 사용하여 실행할 차례입니다.
사전 요구 사항
CentOS 서버에 Docker Compose를 설치하기 전에 다음 사항을 준비해야 합니다:
- CentOS 7 서버에서 sudo 권한을 가진 비루트(non-root) 사용자.
- 머신에 Docker가 설치되어 있어야 합니다. 다음 튜토리얼을 참조하십시오: Ubuntu 18.04에 Docker를 설치하고 작동하는 방법.
이제 모든 준비가 완료되었습니다. 다음으로, 아래 단계에 따라 CentOS 7에 Docker Compose를 설치하십시오.
1단계: Docker Compose 설치
최신 버전의 Docker Compose를 받으려면 다음의 안내를 따르십시오: Docker 문서 그리고 다음에서 바이너리를 다운로드하십시오: Docker’s GitHub 저장소. 아래 명령을 실행하여 최신 버전의 소프트웨어가 설치되어 있는지 확인하십시오:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/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 |
아래 코드는 설치된 버전을 출력합니다:
그런 다음 설치한 Docker Compose를 사용하여 “Hello World” 예제를 실행할 수 있습니다.
2단계: Docker Compose를 사용하여 컨테이너 실행하기
공공 Docker 레지스트리인 Docker Hub에는 데모 및 테스트용으로 사용할 수 있는 “Hello World” 이미지가 있습니다. 이 이미지는 최소한의 구성으로 Docker Compose를 사용하여 컨테이너를 실행하는 방법을 보여줍니다. 먼저 YAML 파일을 위한 디렉토리를 생성해야 합니다:
|
1 |
$mkdir hello-world |
다음으로, 이 디렉토리로 이동합니다:
|
1 |
$cd hello-world |
그런 다음 선호하는 텍스트 편집기를 사용하여 YAML 파일을 생성합니다. 이 튜토리얼에서는 다음을 사용합니다: Vi:
|
1 |
$vi docker-compose.yml |
입력 모드로 전환하려면 i를 누른 다음, 파일에 아래 내용을 입력하십시오:
|
1 2 |
my-test: image: hello-world |
첫 번째 줄은 컨테이너 이름에 통합됩니다. 두 번째 줄은 컨테이너를 생성하는 데 사용할 이미지를 프로그램에 지시합니다. docker-composeup 명령을 입력하면 로컬에 hello-world라는 이름의 이미지가 있는지 확인합니다. 입력 모드를 종료하려면 ESC를 누르십시오. 그런 다음 :x를 입력하고 ENTER를 눌러 파일을 저장하고 종료합니다. docker images 명령을 사용하여 머신에 있는 이미지를 수동으로 확인할 수 있습니다:
|
1 |
$ sudo docker images |
로컬 이미지가 전혀 없는 경우에는 열 제목만 나타납니다:
컨테이너를 생성하려면 여전히 다음 디렉토리에 있는 상태에서 이 명령을 실행하십시오: /hello-world 디렉토리:
|
1 |
$sudo docker-compose up |
명령을 처음 실행할 때 로컬에 hello-world라는 이름의 이미지가 없으면, Docker Hub 저장소에서 다운로드됩니다:
설치가 제대로 작동하는지 확인하기 위해 Docker Compose는 이미지를 가져오고, 컨테이너를 빌드하고, 연결한 다음, hello 프로그램을 실행합니다:
그 후, 수행된 작업에 대한 설명이 출력됩니다:
When hello가 임무를 완료하면 컨테이너가 종료되고 해당 명령은 컨테이너에서 더 이상 실행되지 않습니다. 활성 프로세스를 조회할 때 열 제목은 표시되지만, hello-world 컨테이너는 현재 작동 중이 아니므로 목록에 표시되지 않습니다:
|
1 |
$sudo docker ps |
현재 실행 중인 컨테이너뿐만 아니라 모든 컨테이너를 보려면 -a 플래그를 사용하십시오:
|
1 |
$sudo docker ps -a |
이제 컨테이너 실행을 시도해 보았으므로, 몇 가지 기본적인 Docker Compose 명령어를 알아보겠습니다.
3단계: Docker Compose 명령어
Docker Compose를 시작하는 데 도움이 되도록, 이 섹션에서는 다음 도구에서 제공하는 기본 명령어를 살펴보겠습니다: docker-compose tool. docker-compose는 디렉토리 단위로 작동하는 명령어입니다. 각 컨테이너마다 하나의 디렉토리를 생성하고 디렉토리당 하나의 docker-compose.yml 파일을 생성하면 동일한 컴퓨터에서 여러 Docker 컨테이너 그룹을 실행할 수 있습니다.
지금까지는 Docker Compose를 직접 실행해 보았습니다. 다음을 눌러 종료할 수 있습니다: Ctrl-C. 이렇게 하면 터미널 창에 디버그 메시지가 표시됩니다. 하지만 프로덕션 환경에서 운영할 때는 docker-compose를 서비스로 실행하는 것이 좋습니다. -d 옵션을 사용하면 이를 간단하게 수행할 수 있습니다:
|
1 |
docker-compose up -d |
이제 docker-compose가 백그라운드로 분기됩니다. 다음 명령어를 사용하여 Docker 컨테이너 그룹(정지되었거나 실행 중인 그룹 모두)을 관리할 수 있습니다:
|
1 |
$sudo docker-compose ps -a |
컨테이너의 State 상태는 컨테이너가 정지된 경우 Exited로 표시되며, 아래 예시에서 확인할 수 있습니다:
현재 실행 중인 컨테이너는 다음과 같이 표시됩니다:
|
1 2 3 4 |
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp |
Docker 그룹을 시작하는 데 사용한 docker-compose.yml 파일과 동일한 디렉터리에서 실행 중인 모든 Docker 컨테이너를 종료할 수 있습니다:
|
1 |
$docker-compose stop |
참고: 더 강제적으로 종료해야 하는 경우, docker-compose kill 명령어도 사용할 수 있습니다.
경우에 따라 Docker 컨테이너 내부에 이전 데이터가 저장되어 있을 수 있습니다. 처음부터 새로 시작하려면 rm 명령어를 사용하여 컨테이너 그룹에서 모든 컨테이너를 제거하세요:
|
1 |
$docker-compose rm |
Docker 컨테이너와 .yml 파일이 있는 디렉터리가 아닌 다른 디렉터리에서 이러한 명령을 실행하면 오류 메시지가 발생합니다:
|
1 2 3 4 5 6 |
ERROR: Can't find a suitable configuration file in this directory 또는 any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml |
이 섹션에서는 Docker Compose로 컨테이너를 조작하는 기본 사항을 다루었습니다. 앞서 언급했듯이, 컨테이너를 추가로 제어해야 하는 경우 다음 섹션에서 Docker 파일 시스템에 액세스하고 컨테이너 내부의 명령 프롬프트에서 명령을 실행할 수 있습니다.
4단계: Docker 컨테이너 파일 시스템 액세스
명령줄 도구인 docker exec를 사용하여 컨테이너에서 명령 프롬프트를 실행하고 컨테이너의 파일 시스템에 액세스할 수 있습니다. 예를 들어, “Hello World”를 실행하고 docker exec 명령이 완료되는 데 시간이 얼마나 걸리는지 확인해 보세요. 이 튜토리얼에서는 Docker Hub image of Nginx를 사용할 수 있습니다. nginx라는 새 디렉터리를 생성하고 해당 디렉터리로 이동합니다:
|
1 2 |
mkdir ~/nginx cd ~/nginx |
이제 텍스트 편집기에서 열 수 있는 docker-compose.yml 파일이 있어야 합니다:
|
1 |
vi docker-compose.yml |
그런 다음 파일에 다음 내용을 추가합니다:
|
1 2 |
nginx: image: nginx |
이제 애플리케이션을 종료할 시간입니다. 백그라운드에서 Nginx 컨테이너를 시작하려면 다음 명령어를 사용하세요:
|
1 |
$sudo docker-compose up -d |
Docker Compose가 Nginx 이미지를 다운로드하고 백그라운드에서 컨테이너를 실행합니다. 계속하려면 컨테이너의 CONTAINER ID를 입력해야 합니다. 다음 명령어로 현재 실행 중인 모든 컨테이너를 확인할 수 있습니다:
|
1 |
$sudo docker ps |
다음과 같이 표시됩니다:
만약 docker exec를 사용하여 이 컨테이너 내부의 파일 시스템을 변경하려면, 컨테이너의 고유 ID(이 경우 f139d0d78ca7)를 사용하여 컨테이너 내에 셸을 빌드합니다:
|
1 |
$sudo docker exec -it f139d0d78ca7 /bin/bash |
대화형 터미널은 -t 옵션을 사용하여 열 수 있으며, /bin/bash는 컨테이너에 bash 셸을 제공합니다. 그 후 컨테이너에 대해 표시되는 bash 프롬프트는 다음과 같습니다:
|
1 |
root@b86b6699714c:/# |
컨테이너 내부에서 명령 프롬프트를 찾을 수 있습니다. 데이터 볼륨의 일부로 저장된 디렉터리에서 작업하고 있지 않다면, 컨테이너를 재시작할 때 변경 사항이 덮어쓰여집니다. Linux 명령줄 기능으로 작업하는 데 익숙하다면, 대부분의 Docker 이미지는 가장 기본적인 Linux 설치를 사용하여 생성된다는 점을 알아두어야 합니다.
결론
CentOS 7에서 다중 컨테이너 애플리케이션을 관리하기 위해 최신 버전의 Docker Compose를 설치하는 단계를 안내해 드렸습니다. 수많은 컨테이너를 동시에 실행하고 종료하는 Docker Compose의 기능은 인상적입니다. 템플릿에서 애플리케이션으로 전환하는 데 몇 분밖에 걸리지 않습니다. 따라서 여러 컨테이너를 동시에 실행하는 작업이 포함되어 있다면 Docker Compose를 계속 사용하는 것이 좋은 선택입니다. 하지만 이것이 모든 상황에 맞는 만능 해결책은 아닙니다. 특정 요구 사항에 따라 더 나은 옵션을 찾을 수도 있습니다. 예를 들어, Kubernetes.
Docker Compose의 강력한 기능을 더 자세히 알아보려면 다음 튜토리얼을 참조하세요. 저희 블로그:
즐거운 컴퓨팅 되세요!






댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.