웹사이트 검색

컨테이너 체크포인트


소개

이 체크포인트는 두 가지 일반적인 컨테이너 솔루션인 Kubernetes에서 학습한 내용을 평가하는 데 도움이 되도록 작성되었습니다. 이 체크포인트를 사용하여 이러한 주제에 대한 지식을 평가하고, 주요 용어 및 명령을 검토하고, 지속적인 학습을 위한 리소스를 찾을 수 있습니다.

컨테이너화는 이식 가능한 런타임 환경을 만들기 위해 운영 체제 수준에서 개발 환경을 격리하는 프로세스입니다. 컨테이너는 호스트의 리소스를 공유하므로 예측 가능하고 제어된 환경에서 애플리케이션을 실행할 수 있습니다. 컨테이너를 사용하여 인프라를 추상화하고 애플리케이션을 격리하면 개발 프로세스를 확장하고 효율적이고 일관되게 테스트할 수 있습니다.

이 체크포인트에는 소개 기사의 중심 아이디어를 종합하는 두 개의 섹션이 있습니다. 하나는 컨테이너 에코시스템의 목적을 요약하는 섹션이고 두 번째 섹션은 각각 Docker 및 Kubernetes에 특정한 하위 섹션을 포함하는 명령 실행에 관한 것입니다. 이러한 각 섹션에는 지식을 테스트하는 데 도움이 되는 대화형 구성 요소가 있습니다. 이 체크포인트를 마치면 컨테이너에 대한 지속적인 학습 기회를 찾을 수 있습니다.

자원

  • 컨테이너 소개
  • Ubuntu 22.04에서 Docker를 설치하고 사용하는 방법
  • Ubuntu 22.04에서 Docker Compose 설치 및 사용 방법
  • docker exec를 사용하여 Docker 컨테이너에서 명령을 실행하는 방법
  • Ubuntu 22.04에서 Docker 컨테이너 간에 데이터를 공유하는 방법
  • Ubuntu 20.04에서 개인 Docker 레지스트리를 설정하는 방법
  • Kubernetes 소개
  • 로컬 Kubernetes 개발 및 테스트에 minikube를 사용하는 방법

컨테이너란 무엇입니까?

컨테이너는 애플리케이션 개발을 위해 예측 가능하고 통제된 환경을 제공합니다. 컨테이너 엔진은 사람들이 컨테이너를 언급할 때 일반적으로 의미하는 것입니다.

컨테이너를 이해하려면 몇 가지 주요 컨테이너화 도구에 익숙해지는 것이 중요합니다.

다음 각 용어를 정의한 다음 드롭다운 기능을 사용하여 작업을 확인하십시오.

컨테이너 엔진은 컨테이너화를 위한 완벽한 솔루션이며 엔진에는 컨테이너, 컨테이너 런타임, 컨테이너 이미지 및 이를 빌드하기 위한 도구가 포함됩니다. 엔진에는 컨테이너 이미지 레지스트리 및 컨테이너 오케스트레이션도 포함될 수 있습니다. Docker는 가장 일반적으로 배포되는 컨테이너 엔진 중 하나입니다.

컨테이너 이미지는 컨테이너 내에 환경을 구축하기 위해 제공되는 템플릿입니다. 이미지가 실행되면 이미지의 읽기 전용 레이어가 개별 컨테이너 인스턴스에서 조정할 수 있는 읽기-쓰기 레이어로 오버레이됩니다.

이미지 레지스트리는 컨테이너 이미지를 보관하는 저장소입니다. 이미지 레지스트리 또는 리포지토리를 사용하여 컨테이너 이미지를 관리하고 공유할 수 있습니다.

컨테이너 런타임은 컨테이너의 시작 및 실행을 관리합니다. 컨테이너 런타임에는 OCI(Open Container Initiative)와 컨테이너 런타임 이니셔티브의 두 그룹이 있습니다.

Open Container Initiative는 컨테이너 형식에 대한 사양과 표준을 제공합니다. OCI는 일반적으로 사용되는 runc와 같은 컨테이너 실행을 위한 기준을 제공합니다.

Container Runtime Initiative는 컨테이너 오케스트레이션에 중점을 둡니다.

오케스트레이션에는 프로비저닝, 구성, 확장, 예약, 배포, 모니터링 등이 포함되며 일반적으로 컨테이너 배포를 자동화하는 데 사용됩니다.

많은 개발자가 이식성과 예측 가능한 성능으로 인해 컨테이너화를 선호합니다. 인프라를 추상화하면 여러 시스템에서 정확히 동일한 방식으로 애플리케이션을 테스트할 수 있습니다. 기본 환경의 이러한 안정성 덕분에 개발자는 원격으로 협업할 수 있습니다.

강력한 개발 및 프로덕션 환경을 보장하기 위해 다음 요구 사항을 충족할 수 있습니다.

  • 예측 가능한 휴대용 성능
  • 사용 및 메모리 효율성
  • 영구 데이터 옵션이 있는 상태 비저장
  • 클러스터 네트워킹 기능이 있는 격리된 컨테이너
  • 컨테이너 테스트 중 오류 및 출력 로깅
  • 애플리케이션 및 인프라 디커플링
  • 전문화 및 마이크로서비스

컨테이너가 동일한 기본 이미지에서 생성되면 개발 및 테스트 요구 사항을 설명할 수 있는 안정적인 환경을 제공합니다. 이러한 일관성을 통해 애플리케이션 개발 중에 필요에 따라 컨테이너를 만들고 삭제할 수 있습니다.

컨테이너에 영구 데이터가 필요한 장기 프로젝트를 진행 중인 경우 영구 데이터 스토리지 및 컨테이너 간 데이터 공유를 위해 볼륨을 마운트할 수 있습니다.

Docker는 두 가지 일반적인 컨테이너 솔루션입니다. 아래 섹션에서는 소개 기사에서 두 옵션을 모두 사용하여 차이점에 대해 배운 내용을 평가할 수 있습니다.

Docker는 한 번에 하나 또는 두 개의 컨테이너화된 애플리케이션을 실행하는 데 가장 자주 사용되는 컨테이너 엔진입니다.

Kubernetes는 많은 중첩 컨테이너를 대규모로 실행할 수 있게 해주는 오케스트레이션 소프트웨어입니다. Kubernetes는 원래 Docker 런타임을 사용했지만 지금은 주로 containerd 추상화 계층을 사용합니다.

도커란?

Docker를 사용하면 컨테이너에서 애플리케이션 프로세스를 관리할 수 있습니다. Docker는 일반적으로 컨테이너 엔진으로 사용되며 다양한 운영 체제에서 실행할 수 있습니다.

포트를 매핑하거나 Docker가 사용하지 않을 가능성이 있는 임의의 포트를 선택하도록 허용하여 Docker 컨테이너를 호스트 시스템에 매핑할 수 있습니다. 이 프로세스는 테스트 환경을 단순화합니다. Docker 사용에 대한 자세한 내용은 The Docker Ecosystem: An Introduction to Common Components를 검토할 수 있습니다.

Docker는 특정 용어를 사용하여 시스템 설정을 지원합니다. 알아야 할 Docker 용어로 지식을 평가합니다.

다음 각 용어를 정의한 다음 드롭다운 기능을 사용하여 작업을 확인하십시오.

Docker Compose는 YAML 파일에 정의된 대로 다중 컨테이너 애플리케이션 환경을 실행할 수 있는 명령줄 도구입니다. YAML 구성 파일은 종종 웹 서버 환경, 포트 리디렉션 및 공유 볼륨을 사용하여 설정을 정의합니다.

Docker 허브는 Docker 프로젝트 배후에 있는 회사인 Docker에서 관리하는 특정 이미지 레지스트리입니다.

Docker 이미지는 컨테이너를 구축하기 위한 템플릿입니다. 사용할 수 있는 일반적인 이미지가 많이 있습니다.

Docker 볼륨은 중지되거나 삭제된 컨테이너를 포함하여 컨테이너 간에 데이터를 유지하는 데 사용할 수 있습니다.

SwarmKit은 스웜 모드 클러스터에 사용할 수 있는 Go에 내장된 오픈 소스 오케스트레이션 툴킷입니다.

이것은 현재 Swarm Classic이라고 하는 Docker Swarm이라는 이전 도구와 구별되며 현재 아카이브된 Docker용 기본 클러스터링을 나타냅니다. Swarm Classic은 대규모 클러스터링을 위한 옵션이었습니다.

Docker 컨테이너는 종종 Kubernetes 클러스터에 배포할 수 있는 이식 가능하고 일관된 런타임 환경을 제공합니다.

쿠버네티스란?

Kubernetes를 사용하면 머신 클러스터 전체에서 컨테이너화된 애플리케이션 및 서비스를 실행하고 관리할 수 있습니다. Kubernetes는 컨테이너화 요구 사항을 확장하는 데 자주 사용됩니다.

Kubernetes는 특정 용어를 사용하여 시스템 설정을 지원합니다. 알아야 할 Kubernetes 용어로 지식을 평가합니다.

다음 각 용어를 정의한 다음 드롭다운 기능을 사용하여 작업을 확인하십시오.

배포는 주기 관리를 위해 복제 세트를 사용하는 Kubernetes 워크로드입니다.

복제 세트는 복제 포드 확장을 위한 포드 템플릿을 정의하는 복제 컨트롤러와 마찬가지로 포드를 관리하는 데 사용됩니다.

클러스터의 서버는 노드이며, 하나는 클러스터의 제어 평면 역할을 하고 다른 서버는 작업자 노드 역할을 합니다. 각 노드에는 해당 노드의 컨테이너에서 애플리케이션 및 서비스를 관리하기 위한 컨테이너 런타임이 포함되어 있습니다.

단일 애플리케이션으로 제어되는 컨테이너는 pod로 그룹화됩니다. 포드는 복제 컨트롤러 또는 복제 세트에 의해 생성됩니다.

중앙 서버와 노드로 구성된 Kubernetes 클러스터에는 클러스터 기능과 서버가 서로 통신하는 데 도움이 되는 특정 구성 요소가 포함되어 있습니다. Kubernetes 아키텍처에 대한 보다 자세한 설명은 Kubernetes 소개를 검토할 수 있습니다.

클러스터의 서버 전체에서 네트워크 구성을 용이하게 하기 위해 Kubernetes에는 다음을 포함하여 노드 전체에서 액세스할 수 있는 컨트롤 플레인의 특정 구성 요소가 필요합니다.

  • etcd와 같이 노드 전체에 배포할 수 있는 키-값 저장소입니다.
  • 워크로드를 구성하고 명령을 보내는 데 사용할 수 있는 API 서버(kube-apiserver)
  • 워크로드를 관리하고, 작업을 수행하고, 클러스터를 규제하는 컨트롤러 관리자(kube-controller-manager).
  • 특정 노드에 워크로드를 할당하는 스케줄러(kube-scheduler)
  • 클러스터를 대신하여 클라우드 공급자, 리소스 및 서비스와 상호 작용하는 클라우드 컨트롤러(cloud-controller-manager)

또한 노드는 중앙 서버와 통신하고 할당된 워크로드를 실행하기 위해 다음과 같은 특정 구성 요소가 필요합니다.

  • Docker 또는 runc와 같은 각 노드의 컨테이너 런타임.
  • 컨트롤 플레인과 주고받는 kubelet과 같은 통신 서비스 kubelet매니페스트를 사용하여 수신하는 워크로드를 정의하고 노드의 작업 상태를 관리합니다.
  • 컨테이너에 요청을 전달하기 위한 작은 프록시(가장 일반적으로 kube-proxy).

각각 자체 구문이 있는 Docker 및 Kubernetes용 명령줄 도구가 있습니다. 배포 시 웹 브라우저를 통해 액세스할 수 있는 Kubernetes 대시보드로 컨테이너를 관리할 수도 있습니다.

명령줄 사용

데이터베이스에서 기사를 사용하기 시작했습니다.

컨테이너 소개에서 다음과 같은 명령을 통해 명령줄에 익숙해졌습니다.

  • cat 파일을 표시합니다.
  • chmod는 새로운 도구로 권한을 설정합니다.
  • curl은 지정된 위치(URL)로 데이터를 전송합니다.
  • echo는 인수로 전달된 문자열을 표시합니다.
  • env 모든 환경 변수를 인쇄합니다.
  • exit를 눌러 대화형 Docker 셸을 닫습니다.
  • mkdir로 새 디렉터리를 생성합니다.
  • pwd 현재 작업 디렉토리를 인쇄합니다.
  • systemctl Docker 데몬을 관리합니다.
  • tail 파일의 마지막 10줄을 인쇄합니다.
  • 감시하여 특정 명령을 일관되게 실행합니다(기본적으로 2초마다).
  • whoami는 현재 사용자의 사용자 이름을 출력합니다.

또한 다양한 컨테이너 엔진에 대한 고유한 명령 구문으로 작업했으며 Homebrew 패키지 관리자를 사용하여 Kubernetes 클러스터용 minikube를 설치했습니다. 아래 섹션에서는 Docker 및 Kubernetes에 대한 소개 문서에서 실행한 명령을 검토합니다.

Docker 명령 실행

Docker를 소개하는 기사에서는 Ubuntu 서버에 Docker 컨테이너를 설치하고 관리했습니다. 기본적으로 docker 명령은 sudo 권한을 앞에 추가하여 루트 사용자 또는 docker 그룹의 사용자만 실행할 수 있습니다.

docker 명령을 사용하여 옵션, 하위 명령 및 인수를 Docker 컨테이너에 전달했습니다.

  • docker exec 활성 컨테이너에서 명령 실행, --workdir 플래그를 사용하여 명령이 실행되어야 하는 디렉터리, - -user 플래그는 다른 사용자로 명령을 실행하고 -e 플래그는 환경 변수를 컨테이너 또는 --env-file에 전달합니다. .env 파일을 지정하는 플래그입니다.
  • 도커 이미지는 시스템에 다운로드한 이미지를 검토합니다.
  • 도커 정보는 시스템 전체 정보에 액세스합니다.
  • docker ps 시스템에서 실행 중인 활성 컨테이너를 검토하고 -a 스위치를 사용하여 모든 컨테이너(활성 및 비활성 모두)를 확인하고 -l 만든 최신 컨테이너를 보려면 전환하십시오.
  • docker rename은 컨테이너의 이름을 변경합니다.
  • docker rm은 컨테이너를 제거할 컨테이너 ID 또는 이름입니다.
  • docker run은 대화형 셸 액세스를 위해 결합된 -it 스위치를 사용하여 지정된 이미지에서 컨테이너를 시작합니다.
  • docker search는 Docker Hub에서 사용 가능한 이미지를 검색하고 docker pull은 레지스트리에서 지정된 이미지를 다운로드합니다.
  • docker start를 중지된 컨테이너를 시작하기 위한 컨테이너 ID 또는 이름으로 바꿉니다.
  • docker stop을 실행 중인 컨테이너를 중지하기 위한 컨테이너 ID 또는 이름으로 바꿉니다.
  • 도커 태그는 생성된 이미지의 이름을 변경합니다.
  • 도커 볼륨은 데이터 볼륨을 관리합니다.

드롭다운 기능을 사용하여 답을 얻으십시오.

docker exec 명령은 프로그램을 실행하고 현재 실행 중인 컨테이너를 검사하는 데 사용되는 반면 docker run을 실행하여 새 컨테이너를 만들 수 있습니다.

이 소개 문서에서는 해당 명령을 실행하지 않았지만 docker build 명령을 사용하여 Dockerfile로 이미지를 빌드할 수 있습니다. Dockerfile은 이미지를 빌드하는 데 사용되는 반면 docker compose와 함께 YAML 구성 파일을 실행하면 오케스트레이션이 관리됩니다.

또한 --help 옵션을 사용하여 다음 스위치와 같은 다양한 하위 명령에 사용할 수 있는 옵션에 액세스했습니다.

  • --name은 컨테이너에 이름을 부여합니다.
  • --rm 중지 시 스스로 제거되는 컨테이너를 생성합니다.
  • -d는 터미널에서 컨테이너를 분리하여 백그라운드에서 실행합니다.
  • -v 이름을 지정하여 Docker 볼륨을 관리하거나 bindmount를 생성합니다(/ 또는 ~/ 지정 시).< /리>

Docker는 다중 컨테이너 환경을 관리하기 위한 Docker Compose CLI 도구도 제공합니다. 포트 리디렉션 및 공유 볼륨이 있는 웹 서버 환경을 생성하도록 YAML 구성 파일을 설정하고 다음 명령을 실행하여 컨테이너를 관리했습니다.

  • docker compose up은 컨테이너화된 환경을 실행합니다.
  • docker compose ps는 실행 중인 컨테이너 및 포트 리디렉션에 대한 정보를 제공합니다.
  • docker compose logs는 컨테이너의 로그에 액세스합니다.
  • docker Compose pause는 컨테이너를 일시 중지하고 docker Compose unpause는 다시 시작합니다.
  • docker compose stop은 컨테이너를 중지합니다.
  • docker compose down 환경과 관련된 컨테이너, 네트워크 및 볼륨을 제거합니다.

드롭다운 기능을 사용하여 답을 얻으십시오.

docker 명령은 명령줄에서 모든 하위 명령을 실행하는 반면 docker compose는 YAML 파일을 실행하여 여러 컨테이너 환경에 사용할 수 있는 구성 데이터를 제공합니다. docker compose로 시작된 컨테이너는 네트워크와 데이터 볼륨도 공유할 수 있습니다.

여러 컨테이너가 병렬로 실행되는 더 큰 배포가 있는 경우 하나의 YAML 파일을 작성하여 컨테이너 구성을 설정하고 docker compose를 실행하여 모든 구성 요소에 명령을 내리고 그룹으로 제어할 수 있습니다. . 결과적으로 docker Compose는 애플리케이션이 성장하고 강력한 오케스트레이션 설정이 필요할 때 컨테이너 관리를 확장하는 데 도움이 됩니다.

개인 Docker Registry 및 Docker Hub로 이미지를 관리하기 위해 다음 명령을 실행했습니다.

  • docker login 사용자 이름의 -u 스위치로 로그인합니다.
  • docker commit은 커밋 메시지를 제공하는 -m 스위치와 다음을 지정하는 -a 스위치로 새 Docker 이미지를 커밋합니다. 저자.
  • docker push는 자신의 리포지토리를 포함하여 이미지를 푸시합니다.
  • docker pull 이미지를 새 시스템으로 가져옵니다.

영구 데이터의 경우 Docker 컨테이너와 호스트 간에 데이터를 공유할 수도 있습니다.

Docker는 하나의 공통 컨테이너 엔진입니다. Kubernetes는 Docker 컨테이너 엔진을 실행할 수 있는 오케스트레이션 플랫폼입니다.

Kubernetes 명령 실행

Kubernetes를 소개하는 기사에서 Docker 프레임워크와 함께 minikube 컴패니언을 실행하여 단일 시스템에서 실행되는 Kubernetes 클러스터를 시뮬레이션했으며 이를 통해 Kubernetes 클러스터의 브라우저 대시보드에 액세스할 수 있었습니다.

다음 minikube 명령을 실행했습니다.

  • minikube start 도구를 시작하고 선택적으로 -p 또는 --profile을 사용하여 kubectl을 활성화합니다. 클러스터를 지정하는 옵션입니다.
  • minikube 대시보드는 SSH 터널링을 통해 원격 서버에서 포트 포워딩을 지원하는 --url 옵션을 사용하여 자동 포트 포워딩으로 Kubernetes 대시보드에 액세스합니다.
  • minikube 서비스와 지정된 서비스 및 실행 중인 서비스의 URL을 검색하는 --url 옵션.
  • minikube configset memory, get profile,
  • 과 같은 하위 명령으로 클러스터를 관리합니다.\n
  • minikube delete - 서비스를 재배포하기 위해 삭제합니다.
  • minikube mount: local_path:minikube_host_path 를 사용하여 임시로 로컬 파일 시스템의 디렉토리를 클러스터에 마운트합니다. 구문을 사용하여 컨테이너의 디렉터리와 위치를 지정합니다.
  • minikube 프로필에 지정된 클러스터를 사용하여 활성 프로필을 전환합니다.

또한 다음 하위 명령과 함께 kubectl 명령을 사용했습니다.

  • kubectl get pods는 모든 네임스페이스를 찾기 위해 -A 인수를 사용하여 클러스터에서 실행 중인 모든 포드 목록입니다.
  • kubectl create deployment는 지정된 원격 이미지를 호출하기 위해 --image 옵션을 사용하여 명명된 배포를 서비스로 생성합니다.
  • kubectl expose deployment는 명명된 배포를 노출하고 --port 옵션 및 --type 옵션으로 포트를 지정합니다.< /리>
  • kubectl get service 지정된 서비스가 실행 중인지 확인합니다.
  • kubectl get nodes는 다른 YAML 구성 파일을 지정하기 위해 --kubeconfig 옵션을 사용하여 클러스터의 활성 노드를 나열합니다.

관리형 Kubernetes 서비스를 시작하려면 DigitalOcean Kubernetes Quickstart 설명서를 검토할 수 있습니다.

무엇 향후 계획?

컨테이너 및 널리 사용되는 데이터베이스 컨테이너 엔진에 대한 더 깊은 이해를 통해 애플리케이션을 구축할 때 일관성을 위해 개발 환경을 컨테이너화할 수 있습니다. 복잡한 주제에 대한 답변이 너무 간단해 보일 수 있지만 이제 실험하고, 앱을 빌드하고, 프로젝트를 확장할 수 있는 컨테이너 에코시스템(또는 두 개!)이 있습니다.

Docker 에코시스템을 더 많이 구축하려면 다음 자습서를 따를 수 있습니다.

  • Docker Compose로 개발용 Node.js 애플리케이션 컨테이너화
  • Nginx, Let’s Encrypt 및 Docker Compose로 컨테이너화된 Node.js 애플리케이션을 보호하는 방법

작업을 바로 시작하려면 컨테이너 이미지에서 배포하는 방법을 시도하십시오.

Kubernetes 클러스터 개발을 계속하려면 다음 문서를 검토할 수 있습니다.

  • Kubernetes용 애플리케이션 설계
  • Kubernetes용 애플리케이션 현대화
  • 모놀리식 애플리케이션을 마이크로서비스로 재설계하기 위한 모범 사례
  • Django를 사용하여 컨테이너에서 Kubernetes까지 시리즈

개발을 위해 리소스를 확보하려면 DOCR(DigitalOcean Container Registry)로 마이그레이션하여 Docker 컨테이너 및 DigitalOcean Kubernetes 클러스터에 대한 추가 지원을 받을 수 있습니다.

컨테이너에 대한 새로운 지식을 통해 데이터베이스로 클라우드 여정을 계속할 준비가 되었습니다.