웹사이트 검색

Ubuntu 22.04의 Docker 컨테이너에서 Nginx를 실행하는 방법


소개

Nginx는 정적 또는 동적 웹 사이트, 리버스 프록시, 로드 밸런싱 및 기타 HTTP 및 프록시 서버 기능을 제공하는 데 사용되는 오픈 소스 웹 서버입니다. 대량의 동시 연결을 처리하도록 구축되었으며 인터넷에서 가장 크고 트래픽이 많은 사이트를 호스팅하는 데 사용되는 인기 있는 웹 서버입니다.

컨테이너, 운영 체제 수준에서 실행되고 커널 및 파일 시스템과 같은 시스템 리소스를 공유하는 격리된 사용자 공간 환경.

Nginx를 컨테이너화하면 일부 시스템 관리 오버헤드를 줄일 수 있습니다. 예를 들어 패키지 관리자를 통해 Nginx를 관리하거나 소스에서 빌드할 필요가 없습니다. Docker 컨테이너를 사용하면 Nginx의 새 버전이 출시될 때 전체 컨테이너를 교체할 수 있습니다. 이렇게 하면 Nginx 구성 파일과 콘텐츠만 유지 관리하면 됩니다.

이 자습서에서는 Docker 컨테이너로 Nginx를 구성하여 작은 웹 페이지를 제공하는 방법을 배웁니다.

전제 조건

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

  • 루트가 아닌 sudo 사용자 및 방화벽을 포함하여 Ubuntu 22.04 초기 서버 설정 가이드에 따라 설정된 Ubuntu 22.04 서버 1대
  • 서버에 Docker가 설치되었습니다. Ubuntu 22.04에서 Docker를 설치하고 사용하는 방법 자습서의 1단계와 2단계를 완료하세요.

서버에 Docker가 설치되어 있으면 첫 번째 단계를 진행할 수 있습니다.

1단계 — Docker 허브에서 Nginx 다운로드

Docker는 공식 이미지와 사용자가 제출한 이미지를 모두 포함하는 Docker 파일의 공개 리포지토리인 Dockerhub라는 사이트를 유지 관리합니다. Docker의 공식 이미지를 사용하면 자체 이미지를 빌드하지 않아도 되므로 애플리케이션을 빠르게 개발할 수 있습니다. 이러한 이미지는 Docker 커뮤니티에서 유지 관리하며 가장 일반적인 사용 사례를 위해 설계되는 경우가 많습니다.

다음 명령을 실행하여 기본 Nginx 구성을 사용하여 미리 빌드된 Docker 이미지에서 Nginx를 다운로드할 수 있습니다.

  1. docker pull nginx

이렇게 하면 컨테이너에 필요한 모든 구성 요소가 다운로드됩니다. Docker는 이를 캐시하므로 컨테이너를 실행할 때 매번 컨테이너 이미지를 다운로드할 필요가 없습니다.

이제 Nginx가 설치되었으므로 웹 서버로 공개적으로 액세스할 수 있도록 컨테이너를 구성할 수 있습니다. Nginx Docker 컨테이너를 시작하려면 다음 명령어를 실행하세요.

  1. docker run --name docker-nginx -p 80:80 nginx

다음은 이 명령으로 수행되는 작업에 대한 간략한 설명입니다.

  • run은 새 컨테이너를 생성하는 명령입니다.
  • --name 플래그는 컨테이너의 이름을 지정하는 방법입니다. 공백으로 두면 nostalgic_hopper와 같은 생성된 이름이 지정됩니다.
  • -p-p local-machine-port:internal-container-port 형식으로 노출하는 포트를 지정합니다. 이 경우 컨테이너의 포트 :80을 서버의 포트 :80에 매핑합니다.
  • nginx는 Docker 허브에 있는 이미지의 이름입니다.

웹 브라우저에서 서버의 IP 주소를 입력하여 Nginx의 기본 랜딩 페이지를 표시합니다.

서버에 요청할 때 터미널에서 Nginx에 대한 로그가 업데이트되고 있음에 유의하십시오. 이는 컨테이너를 대화식으로 실행하기 때문입니다.

터미널에서 CTRL+C를 입력하여 컨테이너 실행을 중지합니다.

컨테이너를 종료했기 때문에 더 이상 랜딩 페이지를 볼 수 없습니다. 다음 명령으로 컨테이너 상태를 확인할 수 있습니다.

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 05012ab02ca1 nginx "nginx -g 'daemon off" 57 seconds ago Exited (0) 47 seconds ago docker-nginx

출력은 Docker 컨테이너가 종료되었음을 나타냅니다.

다음 명령을 사용하여 기존 docker-nginx 컨테이너를 제거합니다.

  1. docker rm docker-nginx

다음 단계에서는 컨테이너를 분리하여 독립적으로 실행할 수 있도록 합니다.

2단계 - 분리 모드에서 실행

다음 명령을 사용하여 분리된 새 Nginx 컨테이너를 만듭니다.

  1. docker run --name docker-nginx -p 80:80 -d nginx

-d 플래그를 연결하면 이 컨테이너가 백그라운드에서 실행됩니다.

출력은 컨테이너의 ID입니다.

Output
b91f3ce26553f3ffc8115d2a8a3ad2706142e73d56dc279095f673580986257

docker ps 명령을 실행하면 컨테이너에 대한 몇 가지 새로운 정보가 표시됩니다.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b91f3ce26553 nginx "/docker-entrypoint.…" 56 seconds ago Up 54 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp docker-nginx

종료(0) X분 전 대신 이제 STATUS 열에 약 1분 동안 가동이 표시됩니다. 포트 매핑도 출력의 일부라는 점에 유의하십시오.

기본 Nginx 랜딩 페이지에 다시 도달하려면 브라우저에 서버의 IP 주소를 입력하세요. 이번에는 Docker가 분리 모드에서 이 컨테이너를 실행하도록 지시하는 -d 플래그를 지정했기 때문에 백그라운드에서 실행됩니다.

이제 분리된 컨테이너에 실행 중인 Nginx 인스턴스가 있습니다. 현재 컨테이너는 웹 사이트 파일에 액세스할 수 없습니다.

다음 명령을 실행하여 컨테이너를 중지합니다.

  1. docker stop docker-nginx

이제 컨테이너가 중지되었으므로 다음 명령을 실행하여 컨테이너를 제거할 수 있습니다.

  1. docker rm docker-nginx

이제 컨테이너와 독립적으로 Nginx를 실행하는 방법을 이해했으므로 다음 단계에서는 Nginx를 만들고 구성하여 랜딩 페이지를 빌드합니다.

3단계 — Nginx에서 제공할 웹 페이지 구축

이 단계에서는 웹 사이트에 대한 사용자 지정 페이지를 만듭니다. 이 설정을 사용하면 컨테이너 외부에서 호스팅되는 지속적인 웹 사이트 콘텐츠를 가질 수 있습니다.

홈 디렉토리 내에 웹 사이트 콘텐츠를 위한 새 디렉토리를 만듭니다.

  1. mkdir -p ~/docker-nginx/html

다음 명령을 실행하여 해당 항목으로 이동합니다.

  1. cd ~/docker-nginx/html

서버에서 제공할 HTML 파일을 만듭니다. 다음 예에서는 nano를 사용하지만 선호하는 텍스트 편집기를 사용할 수 있습니다.

  1. nano index.html

다음 HTML 콘텐츠를 삽입합니다.

<html>
  <head>
    <title>Docker nginx Tutorial</title>
  </head>

  <body>
    <div class="container">
      <h1>Hello DigitalOcean</h1>
      <p>This Nginx page is brought to you by Docker and DigitalOcean</p>
    </div>
  </body>
</html>

nano 텍스트 편집기를 사용하는 경우 CTRL+X, Y, ENTER를 차례로 눌러 이 파일을 종료하고 저장합니다. .

이제 기본 Nginx 랜딩 페이지를 대체하는 인덱스 페이지가 생겼습니다.

4단계 - 컨테이너를 로컬 파일 시스템에 연결

이 단계에서는 포트:80을 통해 공개적으로 액세스할 수 있도록 Nginx를 컨테이너에 연결하고 서버의 웹사이트 콘텐츠에 연결합니다.

Docker를 사용하면 가상 머신의 로컬 파일 시스템에서 컨테이너로 디렉터리를 연결할 수 있습니다. 새 웹 페이지를 제공하려면 컨테이너에 렌더링할 파일을 제공해야 합니다.

파일을 Dockerfile의 일부로 컨테이너에 복사하거나 나중에 컨테이너에 복사할 수 있지만 이 두 방법 모두 웹 사이트를 컨테이너 내부의 정적 상태로 둡니다. Docker의 데이터 볼륨 기능을 사용하여 서버의 파일 시스템과 컨테이너의 파일 시스템 사이에 심볼릭 링크를 생성할 수 있습니다. 이를 통해 기존 웹 페이지 파일을 편집하고 디렉토리에 새 파일을 추가할 수 있습니다. 심볼릭 링크를 사용하면 컨테이너가 이러한 파일에 액세스할 수 있습니다. Docker 및 볼륨에 대한 자세한 내용을 보려면 데이터 볼륨 설명서를 확인하십시오.

Nginx 컨테이너는 기본적으로 /usr/share/nginx/html에서 인덱스 페이지를 찾도록 설정되어 있습니다. 새 Docker 컨테이너에서 해당 위치에 있는 파일에 대한 액세스 권한을 부여해야 합니다.

이렇게 하려면 -v 플래그를 사용하여 서버의 ~/docker-nginx/html 폴더를 컨테이너/usr/의 상대 경로에 매핑합니다. 다음 명령으로 share/nginx/html:

  1. docker run --name docker-nginx -p 80:80 -d -v ~/docker-nginx/html:/usr/share/nginx/html nginx

다음은 명령에 대한 간략한 설명입니다.

  • -v 플래그는 볼륨을 연결하고 있음을 지정합니다.
  • :의 왼쪽에는 서버의 디렉토리 위치인 ~/docker-nginx/html이 있습니다.
  • : 오른쪽에는 컨테이너 /usr/share/nginx/html에 심볼릭 링크하는 위치가 있습니다.

해당 명령을 실행한 후 브라우저에 서버의 IP 주소를 입력하여 새 랜딩 페이지를 봅니다.

기본 Nginx 설정에 만족한다면 구성할 사항이 없습니다.

~/docker-nginx/html/ 디렉터리에 더 많은 콘텐츠를 업로드할 수 있으며 라이브 웹사이트에 추가됩니다.

예를 들어 HTML 파일을 수정하고 브라우저를 새로 고치면 그에 따라 업데이트됩니다. 이런 식으로 HTML 파일로 전체 사이트를 구축할 수도 있습니다. 예를 들어 about.html 페이지를 추가한 경우 별도의 추가 작업 없이 http://your_server_ip/about.html에서 액세스할 수 있습니다. 컨테이너와 상호 작용합니다.

5단계 - 자체 Nginx 구성 파일 사용(선택 사항)

Nginx 작동 방식을 더 잘 제어하려면 Docker 컨테이너와 함께 사용자 지정 Nginx 구성 파일을 사용할 수 있습니다.

먼저 최상위 프로젝트 디렉토리로 돌아왔는지 확인합니다.

  1. cd ~/docker-nginx

Docker 복사 명령을 사용하여 Nginx 구성 디렉터리를 프로젝트 폴더에 복사합니다.

  1. docker cp docker-nginx:/etc/nginx/conf.d/default.conf default.conf

Nginx용 사용자 지정 .conf 파일을 사용할 것이므로 컨테이너를 다시 빌드해야 합니다.

먼저 컨테이너를 중지합니다.

  1. docker stop docker-nginx

그런 다음 제거하십시오.

  1. docker rm docker-nginx

이제 기본 Nginx 구성 파일을 로컬에서 편집하여 새 디렉터리를 제공하거나 proxy_pass를 사용하여 일반적인 Nginx 설치에서와 같이 트래픽을 다른 애플리케이션이나 컨테이너로 전달할 수 있습니다. Nginx 구성 파일 가이드에서 Nginx의 구성 파일에 대해 읽을 수 있습니다.

구성 파일을 저장했으면 Nginx 컨테이너를 생성할 차례입니다. 적절한 경로와 함께 -v 플래그를 추가하여 새 Nginx 컨테이너에 자체 구성 파일에서 실행할 적절한 링크를 제공합니다. 예를 들어:

  1. docker run --name docker-nginx -p 80:80 -v ~/docker-nginx/html:/usr/share/nginx/html -v ~/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx

이 명령은 사용자 지정 웹 사이트 페이지를 컨테이너에 연결합니다.

컨테이너를 시작한 후 구성 파일을 변경하는 경우 docker restart 명령을 사용하여 컨테이너를 다시 시작해야 합니다. 구성 파일이 변경되면 Nginx가 핫 리로드하지 않기 때문입니다.

  1. docker restart docker-nginx

이렇게 하면 컨테이너가 다시 시작되고 변경 사항이 관련 페이지에 반영됩니다.

결론

이제 사용자 지정 웹 페이지를 제공하는 실행 중인 Nginx 컨테이너가 있고 컨테이너 내에서 Nginx를 구성하는 방법을 배웠습니다.

컨테이너 작동 방식에 대해 자세히 알아보려면 컨테이너 소개 자습서를 검토할 수 있습니다.

또한 두 Docker 컨테이너 간에 데이터를 공유하는 방법에 관심이 있는 경우 Docker 컨테이너 간에 데이터를 공유하는 방법 자습서를 확인하십시오.