웹사이트 검색

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


소개

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

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

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

전제 조건

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

  • Sudo 권한이 있는 루트가 아닌 사용자로 Rocky Linux 8 로컬 시스템 또는 개발 서버에 액세스합니다. 원격 서버를 사용하는 경우 활성 방화벽을 설치하는 것이 좋습니다. 이를 설정하려면 Rocky Linux 8용 초기 서버 설정 가이드를 참조하세요.
  • Rocky Linux 8에서 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 컨테이너로 리디렉션됩니다., 여기서 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 8에서 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 명령에 대한 전체 참조는 공식 문서를 확인하세요.