Docker

Bzeromo·2023년 2월 21일
0

MSA

목록 보기
2/10
post-thumbnail

⚡ Kubernetes & MSA 2일차


📌 Docker

⭐ Docker 정의

🔷 Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다.

  • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다.
  • 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있다.

💡 AWS에서 Docker를 실행하면 개발자와 관리자가 어떠한 규모에서든 매우 안정적이며 저렴한 방식으로 애플리케이션을 구축, 제공 및 실행할 수 있다.

⭐ Docker 사용 이유

1. 개선되고 완벽한 이식성

  • LXC 컨테이너가 종종 시스템 특정 구성을 참조하는 반면, Docker 컨테이너는 데스크탑, 데이터 센터 및 클라우드 환경에서 수정 없이 실행된다.

2. 보다 경량화된 중량, 보다 미세한 업데이트

  • LXC를 사용하면 다수의 프로세스를 단일 컨테이너 내에서 결합할 수 있다. Docker 컨테이너를 사용하면, 각 컨테이너에서 오직 하나의 프로세스만 실행할 수 있다. 이를 통해 업데이트나 수리를 위해 해당 파트 중 하나를 중지하는 동안에도 계속 실행될 수 있는 애플리케이션을 빌드할 수 있다.

3. 자동화된 컨테이너 작성

  • Docker는 애플리케이션 소스 코드를 기반으로 컨테이너를 자동으로 빌드할 수 있다.

4. 컨테이너 버전화

  • Docker는 컨테이너 이미지의 버전을 추적하고, 이전 버전으로 롤백하며, 버전을 빌드한 사용자와 빌드 방법을 추적할 수 있 다. 심지어 이는 기존 버전과 새 버전 사이의 델타만 업로드할 수도 있다.

5. 컨테이너 재사용

  • 히 새 컨테이너를 빌드하기 위한 템플릿처럼, 기존 컨테이너는 기본 이미지로 사용될 수 있다.

6. 공유 컨테이너 라이브러리

  • 개발자는 수천 개의 사용자가 기여한 컨테이너를 포함하는 오픈 소스 레지스트리에 액세스할 수 있다.

⭐ Docker 용어

🔷 DockerFile

  • 모든 도커 컨테이너는 도커 컨테이너 이미지의 빌드방법에 대한 지시사항이 포함된 단순 텍스트 파일로 시작된다.
  • DockerFile은 Docker 이미지 작성 프로세스를 자동화한다.
  • 기본적으로, 이는 이미지를 어셈블링하기 위해 Docker 엔진이 실행할 명령행 인터페이스(CL) 명령어의 목록이다.

🔷 Docker 이미지

  • Docker 이미지에는 실행 가능한 애플리케이션 소스 코드는 물론, 애플리케이션 코드가 컨테이너로서 실행해야 하는 모든 툴, 라이브러리 및 종 속 항목들이 포함되어 있다. Docker 이미지를 실행하는 경우, 이는 컨테이너의 하나의 인스턴스(또는 다수의 인스턴스)가 된다.

🔷 Docker 컨테이너

  • Docker 컨테이너는 Docker 이미지의 실행 중인 라이브 인스턴스다. Docker 이미지는 읽기 전용 파일이지만, 컨테이너는 라이브, 임시, 실행 가능 콘텐츠다. 사용자는 이들과 상호 작용할 수 있으며, 관리자는 docker 명령을 사용하여 자체 설정과 조건을 알맞게 조정할 수 있다.

🔷 Docker 허브

  • Docker 이미지의 공용 저장소

🔷 Docker 디먼

  • Docker Deamon(dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 개체를 관리한 또한 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리할 수 있다.

🔷 Docker 레지스트리

  • Docker Registry는 도커 이미지를 저장한다. Docker Hub는 누구나 사용할 수 있는 공용 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성되어 있다. 또한 자신의 개인 레지스트리를 실행할 수 있다.

⭐ Docker architecture

🔷 Deamon

🔷 Client

  • Docker Client는 많은 Docker 사용자가 Docker와 상호 작용하는 기본 방법이다. docker run과 같은 명령을 사용할 때 클라이언 트는 이러한 명령을 dockerd로 보내고, dockerd는 이 명령을 수행한다. 상기 도커 커맨드는 상기 도커 API를 이용하여, 상기 도커 클 라이언트는 하나 이상의 데몬들과 통신할 수 있다.

🔷 Desktop

  • Docker Desktop은 Mac, Windows 또는 Linux 환경에서 설치하기 쉬운 응용 프로그램으로 컨테이너화된 응용 프로그램과 마이 크로서비스를 빌드하고 공유할 수 있다. Docker Desktop에는 Docker Deamon(dockered), Docker Client, Docker Compose, Docker Content Trust, Kubernetes 및 Credential Helper가 포함된다.

🔷 Registries

⭐ Docker 오케스트레이션

  • 단지 소수의 컨테이너만 실행하는 경우, 업계의 사실상 런타임인 Docker Engine 내에서 애플리케이션을 관리하는 것이 매우 심플하다.
    하지만 배치가 수천 개의 컨테이너와 수백 개의 서비스로 구성된 경우, 이러한 전용 툴을 사용하지 않고 해당 워크플로우를 관리한다는 것이 거의 불가능에 가깝다.

💡 오케스트레이션
시스템 관리에서 오케스트레이션은 컴퓨터 시스템과 소프트웨어의 자동화된 구성, 조율, 관리이다. 서버 구성과 관리 자동화를 위한 수많은 도구가 존재하며 여기에는 Ansible, Puppet, Salt, 테라폼, AWS CloudFormation이 포함된다

🔷 Docker Compose

  • 모두가 동일한 호스트에 상주하는 다중 컨테이너의 프로세스에서 애플리케이션을 빌드하는 경우, Docker Compose를 사용하여 애플리케이 션의 아키텍처를 관리할 수 있다.
  • Docker Compose는 애플리케이션에 포함되는 서비스를 지정하는 YAML 파일을 작성할 수 있으며, 단일 명 령으로 컨테이너를 배치하고 실행할 수 있다. 또한 Docker Compose를 사용하여 스토리지의 지속적 볼륨을 정의하고, 기본 노드를 지정하며, 서비스 종속 항목을 문서화하고 구성할 수도 있다.

🔷 Kubernetes

  • Kubernetes는 Google에서 내부용으로 개발된 프로젝트에서 파생된 오픈 소스 컨테이너 오케스트레이션 플랫폼이다.

  • 다 복잡한 환경에서 컨테이너 라이프사이클을 모니터하고 관리하려면 컨테이너 오케스트레이션 툴에 의존해야 한다.

  • Docker에 자체 오케스트레이션 툴(Docker Swarr)이 포함되어 있지만, 대부분의 개발자는 그 대신 Kubernetes를 선택 한다.

  • Kubernetes는 컨테이너 배치, 업데이트, 서비스 감지, 스토리지 프로비저닝, 로드 밸런싱, 상태 모니터링 등을 포함하여 컨 테이너 기반 아키텍처의 관리에 필수적인 태스크를 스케줄링하고 자동화한다. 또한 Istio 및 Knative를 포함한 Kubernetes용 툴의 오픈 소스 에코시스템을 통해, 기업들은 컨테이너형 애플리케이션을 위한 높은 생산성의 Paas(Platform-as-a-Service) 및 서버리스 컴퓨팅을 위한 보다 빠른 진입로를 배치할 수 있다.

⭐ Docker 실습

🔷 docker hub의 mysql official image를 이용하여 데이터베이스 구축하기

  • mysql 받기

  • mysql 사용이 준비되었으니 데이터베이스를 만들어본다.

🔷 직접 dockerfile을 빌드하고 실행하기

  • dir 폴더 내에 helloworld 파일 생성

🖨 helloworld

  • dockerfile을 생성하고 이미지 빌드하기

🖨 Dockerfile

  • 빌드 이후 실행하기

  • 이미지 생성되어있는지 확인해보기

🔷 ubuntu 최신 버전으로 baseimage 만들고 hub에 이미지 올리기

  • hub 로그인

  • doTest 폴더 안에 Dockerfile 생성

🖨 Dockerfile

  • 빌드하기
  • 내 도커 허브 아이디와 도커 레퍼지토리에 생성한 태그에 버전을 붙인다.

💡 버전은 sementic versioning 룰을 따르는게 좋다.
물론 필자는 그냥 마음대로 붙였다. 첫 버전이니까 친절하다는 의미에서...

  • 이제 도커 허브에 이미지를 올린다.

  • 이미지가 잘 올라와있는 모습 (도커 허브 레퍼지토리)

🔷 웹페이지 만들고 도커를 이용하여 열기

  • 웹페이지(app.py), 도커 파일 생성 후 빌드

🖨 app.py


🖨 Dockerfile

  • imcool이라는 이름으로 빌드

  • 빌드가 완료되면 새로운 터미널 창을 연다.

  • 새로운 터미널 창에서 웹페이지 오픈 (링크 복사)

  • 생성된 웹페이지


이상으로 도커에 대해 알아보았다.

profile
Hodie mihi, Cras tibi

0개의 댓글