Rocky Linux 9에서 Docker Compose를 설치하고 사용하는 방법


소개

Docker는 컨테이너에서 애플리케이션 프로세스를 관리하는 프로세스를 단순화합니다. 컨테이너는 어떤 면에서 가상 머신과 유사하지만 더 가볍고 리소스 친화적입니다. 이를 통해 개발자는 애플리케이션 환경을 여러 개의 격리된 서비스로 분류할 수 있습니다.

여러 서비스에 의존하는 애플리케이션의 경우 시작, 통신 및 종료를 위해 모든 컨테이너를 오케스트레이션하는 것은 빠르게 다루기 어려워질 수 있습니다. Docker Compose는 YAML 파일에 설정된 정의를 기반으로 다중 컨테이너 애플리케이션 환경을 실행할 수 있게 해주는 도구입니다. 서비스 정의를 사용하여 네트워크 및 데이터 볼륨을 공유할 수 있는 여러 컨테이너로 완전히 사용자 지정 가능한 환경을 구축합니다.

이 가이드에서는 Rocky Linux 9 서버에 Docker Compose를 설치하는 방법과 이 도구를 사용하여 시작하는 방법을 보여줍니다.

전제 조건

이 문서를 따르려면 다음이 필요합니다.

  • Sudo 권한이 있는 루트가 아닌 사용자로 Rocky Linux 9 로컬 시스템 또는 개발 서버에 액세스합니다. 원격 서버를 사용하는 경우 활성 방화벽을 설치하는 것이 좋습니다. 이를 설정하려면 Rocky Linux 9용 초기 서버 설정 가이드를 참조하세요.
  • Rocky Linux 9에서 Docker를 설치하고 사용하는 방법의 1단계와 2단계에 따라 서버 또는 로컬 시스템에 Docker를 설치했습니다.

1단계 - Docker Compose 설치

Docker Compose의 가장 업데이트된 안정적인 버전을 얻으려면 공식 Docker 리포지토리에서 이 소프트웨어를 다운로드합니다.

먼저 패키지 데이터베이스를 업데이트하겠습니다.

  1. sudo dnf check-update

다음으로 Docker 설치 중에 공식 Docker 리포지토리를 추가하지 않은 경우 추가합니다.

  1. sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Docker의 Rocky Linux 전용 리포지토리는 없지만 Rocky Linux는 CentOS를 기반으로 하며 동일한 리포지토리를 사용할 수 있습니다. 이제 Docker용 플러그인인 Docker Compose를 설치할 수 있습니다.

  1. sudo dnf install docker-compose-plugin

설치가 성공했는지 확인하려면 다음을 실행할 수 있습니다.

  1. docker compose version

다음과 유사한 출력이 표시됩니다.

Output
Docker Compose version v2.10.2

이제 Docker Compose가 시스템에 성공적으로 설치되었습니다. 다음 섹션에서는 docker-compose.yml 파일을 설정하고 이 도구를 사용하여 컨테이너화된 환경을 시작하고 실행하는 방법을 볼 수 있습니다.

2단계 — docker-compose.yml 파일 설정

docker-compose.yml 파일을 설정하고 Docker Compose로 작업하는 방법을 시연하기 위해 공용 Docker 레지스트리인 공식 Docker 허브를 사용하여 웹 서버 환경을 만듭니다. 이 컨테이너화된 환경은 단일 정적 HTML 파일을 제공합니다.

홈 폴더에 새 디렉터리를 만든 다음 해당 디렉터리로 이동하여 시작합니다.

  1. mkdir ~/compose-demo
  2. cd ~/compose-demo

이 디렉토리에서 Nginx 환경의 문서 루트로 사용할 애플리케이션 폴더를 설정합니다.

  1. mkdir app

원하는 텍스트 편집기를 사용하여 app 폴더 내에 새 index.html 파일을 만듭니다.

  1. nano app/index.html

이 파일에 다음 내용을 넣습니다.

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Demo</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>

    <h1>This is a Docker Compose Demo Page.</h1>
    <p>This content is being served by an Nginx container.</p>

</body>
</html>

완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X를 입력한 다음 YENTER를 입력하여 확인할 수 있습니다. .

다음으로 docker-compose.yml 파일을 만듭니다.

  1. nano docker-compose.yml

docker-compose.yml 파일에 다음 콘텐츠를 삽입합니다.

version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

docker-compose.yml 파일은 일반적으로 version 정의로 시작합니다. 이것은 Docker Compose에 사용 중인 구성 버전을 알려줍니다.

그런 다음 이 환경의 일부인 서비스를 설정하는 services 블록이 있습니다. 귀하의 경우에는 web이라는 단일 서비스가 있습니다. 이 서비스는 nginx:alpine 이미지를 사용하고 ports 지시어로 포트 리디렉션을 설정합니다. 호스트 컴퓨터(Docker Compose를 실행 중인 시스템)의 포트 8000에 대한 모든 요청은 포트 80 컨테이너로 리디렉션됩니다. code>, 여기서 Nginx가 실행됩니다.

volumes 지시문은 호스트 시스템과 컨테이너 간에 공유 볼륨을 생성합니다. 그러면 로컬 app 폴더가 컨테이너와 공유되고 볼륨은 컨테이너 내부의 /usr/share/nginx/html에 위치하게 됩니다. 그러면 기본값을 덮어씁니다. Nginx의 문서 루트.

파일을 저장하고 닫습니다.

데모 페이지와 docker-compose.yml 파일을 설정하여 이를 제공할 컨테이너화된 웹 서버 환경을 생성했습니다. 다음 단계에서는 Docker Compose를 사용하여 이 환경을 시작합니다.

3단계 - Docker Compose 실행

docker-compose.yml 파일이 있으면 이제 Docker Compose를 실행하여 환경을 가동할 수 있습니다. 다음 명령은 필요한 Docker 이미지를 다운로드하고, web 서비스용 컨테이너를 만들고, 백그라운드 모드에서 컨테이너화된 환경을 실행합니다.

  1. docker compose up -d

Docker Compose는 먼저 로컬 시스템에서 정의된 이미지를 찾고 이미지를 찾을 수 없는 경우 Docker Hub에서 이미지를 다운로드합니다. 다음과 같은 출력이 표시됩니다.

Output
Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done

참고: Docker 소켓과 관련된 권한 오류가 발생하면 Rocky Linux 9에서 Docker를 설치하고 사용하는 방법의 2단계를 건너뛴 것입니다. 돌아가서 해당 단계를 완료하면 sudo 없이 docker 명령을 실행할 수 있는 권한이 활성화됩니다. .

이제 환경이 백그라운드에서 실행되고 있습니다. 컨테이너가 활성 상태인지 확인하려면 다음을 실행할 수 있습니다.

  1. docker compose ps

이 명령은 실행 중인 컨테이너 및 해당 상태에 대한 정보와 현재 사용 중인 모든 포트 리디렉션을 표시합니다.

Output
Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp

이제 로컬 시스템에서 이 데모를 실행 중인 경우 브라우저에서 localhost:8000 또는 your_server_domain_or_IP:8000 원격 서버에서 이 데모를 실행하는 경우.

다음과 같은 페이지가 표시됩니다.

docker-compose.yml 파일 내에서 설정한 공유 볼륨은 app 폴더 파일을 컨테이너의 문서 루트와 동기화 상태로 유지합니다. index.html 파일을 변경하면 컨테이너가 자동으로 선택하여 페이지를 다시 로드할 때 브라우저에 반영됩니다.

다음 단계에서는 Docker Compose 명령을 사용하여 컨테이너화된 환경을 관리하는 방법을 알아봅니다.

4단계 — Docker Compose 명령에 익숙해지기

docker-compose.yml 파일을 설정하고 docker compose up으로 환경을 만드는 방법을 살펴보았습니다. 이제 Docker Compose 명령을 사용하여 컨테이너화된 환경을 관리하고 상호 작용하는 방법을 볼 수 있습니다.

Nginx 컨테이너에서 생성된 로그를 확인하려면 logs 명령을 사용할 수 있습니다.

  1. docker compose logs

다음과 유사한 출력이 표시됩니다.

Output
Attaching to compose-demo_web_1 web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"

컨테이너의 현재 상태를 변경하지 않고 환경 실행을 일시 중지하려면 다음을 사용할 수 있습니다.

  1. docker compose pause
Output
Pausing compose-demo_web_1 ... done

일시 중지를 실행한 후 실행을 재개하려면 다음을 수행하십시오.

  1. docker compose unpause
Output
Unpausing compose-demo_web_1 ... done

stop 명령은 컨테이너 실행을 종료하지만 컨테이너와 연결된 데이터는 삭제하지 않습니다.

  1. docker compose stop
Output
Stopping compose-demo_web_1 ... done

이 컨테이너화된 환경과 관련된 컨테이너, 네트워크 및 볼륨을 제거하려면 down 명령을 사용하십시오.

  1. docker compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

이렇게 해도 Docker Compose가 환경을 가동하기 위해 사용하는 기본 이미지는 제거되지 않습니다(귀하의 경우 nginx:alpine). 이렇게 하면 docker compose up을 사용하여 환경을 다시 시작할 때마다 이미지가 이미 시스템에 있으므로 프로세스가 훨씬 빨라집니다.

시스템에서 기본 이미지도 제거하려는 경우 다음을 사용할 수 있습니다.

  1. docker image rm nginx:alpine
Output
Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

참고: Docker 명령에 대한 자세한 내용은 Docker 설치 및 사용 방법에 대한 가이드를 참조하십시오.

결론

이 가이드에서는 Docker Compose를 설치하고 Nginx 웹 서버 이미지를 기반으로 컨테이너화된 환경을 설정하는 방법을 살펴보았습니다. Compose 명령을 사용하여 이 환경을 관리하는 방법도 살펴보았습니다.

사용 가능한 모든 docker compose 명령에 대한 전체 참조는 공식 문서를 확인하세요.