Docker 컨테이너 란 무엇입니까? – Docker를 사용하여 애플리케이션 컨테이너화



Docker Container는 컨테이너 내에서 애플리케이션을 생성, 배포 및 실행하기위한 가상 머신의 경량 대체 솔루션입니다.

글쎄, 나는 당신이 내 이전 블로그를 읽었기를 바랍니다. Docker Docker의 기본 사항을 다뤘습니다. 여기에서는이 Docker Container 블로그에서 Docker Container가 무엇이며 어떻게 작동하는지에 대해 논의 할 것입니다. 대부분 Docker의 실습 및 사용 사례에 중점을 둘 것입니다.

이 Docker Container 블로그의 주제를 나열했습니다.





  • Docker 컨테이너가 필요한 이유
  • Docker 컨테이너는 어떻게 작동합니까?
  • Docker 컨테이너의 사용 사례

Docker 컨테이너가 필요한 이유

나는 아직도 그것을 정확하게 기억하고 있고, 나는 프로젝트를 진행하고 있었다. 이 프로젝트에서 우리는 마이크로 서비스 아키텍처를 따랐습니다. 마이크로 서비스가 무엇인지 모르는 분들을 위해 걱정하지 마세요. 소개하겠습니다.

마이크로 서비스의이면에있는 아이디어는 특정 유형의 애플리케이션이 함께 작동하는 더 작고 구성 가능한 조각으로 분할 될 때 구축 및 유지 관리가 더 쉬워진다는 것입니다. 각 구성 요소는 개별적으로 개발되며 응용 프로그램은 구성 요소의 합계입니다.



아래 예를 고려하십시오.

온라인 쇼핑 앱-Docker Container-Edureka

위 다이어그램에는 사용자 계정, 제품 카탈로그, 주문 처리 및 장바구니를위한 별도의 마이크로 서비스가있는 온라인 상점이 있습니다.



이 아키텍처에는 다음과 같은 많은 이점이 있습니다.

  • 마이크로 서비스 중 하나가 실패하더라도 전체 애플리케이션은 거의 영향을받지 않습니다.
  • 관리가 더 쉽습니다.

다른 많은 이점도 있지만이 게시물에서는 마이크로 서비스에 대해 자세히 설명하지 않겠습니다. 하지만 곧 마이크로 서비스에 대한 블로그도 몇 개 올릴 예정입니다.

이 아키텍처에서는 CentOS 가상 머신을 사용했습니다. 이러한 가상 머신은 긴 스크립트를 작성하여 구성되었습니다. 음, 이러한 VM을 구성하는 것이 유일한 문제는 아닙니다.

이러한 애플리케이션을 개발하려면 하나의 머신에서 여러 마이크로 서비스를 시작해야합니다. 따라서 이러한 서비스 중 5 개를 시작하는 경우 해당 머신에 5 개의 VM이 필요합니다. 아래 다이어그램을 고려하십시오.

다른 문제는 매우 흔합니다. 많은 분들이 공감할 수 있다는 것을 알고 있습니다. 애플리케이션은 개발자의 노트북에서 작동하지만 테스트 또는 프로덕션에서는 작동하지 않습니다. 이는 일관된 컴퓨팅 환경을 유지하지 않기 때문일 수 있습니다. 아래 다이어그램을 고려하십시오.

이 외에도 다른 많은 문제가 있었지만 이러한 문제는 Docker 컨테이너의 필요성을 설명하기에 충분하다고 생각합니다.

Docker 컨테이너가 가상 머신보다 더 나은 방법 알아보기

따라서 모든 VM에 8GB의 RAM을 제공하고 다른 가상 머신에서 실행되는 5 개의 마이크로 서비스가 있다고 가정 해 보겠습니다. 이 경우 이러한 VM에는 40GB의 RAM이 필요합니다. 이제 호스트 컴퓨터의 구성이 매우 높아야합니다. 거의 44GB의 RAM이 호스트 컴퓨터에 있어야합니다. 분명히 이것은 그러한 아키텍처에 대한 지속 가능한 솔루션이 아닙니다. 왜냐하면 여기에서 많은 자원을 낭비하고 있기 때문입니다.

자바 tostring 사용 방법

좋습니다. 낭비 할 리소스가 많지만 SDLC (Software Delivery Life-Cycle)에 일관성 문제가 있습니다. 테스트 환경과 제품 환경에서 이러한 VM을 구성해야합니다. 그 과정에서 일부 소프트웨어는 테스트 서버에서 업데이트되지 않았고 개발 팀은 업데이트 된 버전의 소프트웨어를 사용하고 있습니다. 이것은 갈등을 초래합니다.

100 개의 VM을 사용하는 경우 각 VM을 구성하는 데 많은 시간이 걸리고 동시에 오류가 발생하기 쉽습니다.

이제 Docker Container가 무엇인지, 어떻게 작동하는지, 어떻게 내 문제를 해결했는지 이해하겠습니다.

Docker 컨테이너 란 무엇입니까?

Docker는 컨테이너를 사용하여 애플리케이션을보다 쉽게 ​​생성, 배포 및 실행할 수 있도록 설계된 도구입니다.

Docker 컨테이너를 만들 수 있으며, 이러한 컨테이너에는 제 경우에 애플리케이션 또는 마이크로 서비스에 필요한 모든 바이너리 및 라이브러리가 포함됩니다. 따라서 애플리케이션이 컨테이너에 있거나 애플리케이션을 컨테이너화했습니다. 이제 동일한 컨테이너를 Test 및 Prod 환경에서 사용할 수 있습니다.

Docker 컨테이너는 가상 머신에 대한 경량 솔루션이며 호스트 OS를 사용합니다. 가장 좋은 점은 Docker Container에 RAM을 미리 할당 할 필요가 없다는 것입니다. 필요한 경우 RAM을 사용합니다. 따라서 Docker Container를 사용하면 리소스 낭비에 대해 걱정할 필요가 없습니다.

이제 Docker 컨테이너가 어떻게 작동하는지 이해하겠습니다.

Docker 컨테이너는 어떻게 작동합니까?

아래 다이어그램은 기본적으로 Docker를 사용하는 방법입니다. 그리고 나는 당신이 Docker Image와 Dockerfile에 대한 아이디어를 가지고 있다고 가정합니다.

여러분, 다이어그램이 조금 복잡해 보이지만 그렇게 복잡하지는 않습니다. 아래는 다이어그램에 대한 설명입니다. 이해하기 어렵다고 생각한 후에도 의심의 여지가 있습니다. 그 질문에 최대한 빨리 답변하겠습니다.

  • 개발자는 먼저 Docker 파일에 프로젝트 코드를 작성한 다음 해당 파일에서 이미지를 빌드합니다.
  • 이 이미지에는 전체 프로젝트 코드가 포함됩니다.
  • 이제이 Docker 이미지를 실행하여 원하는만큼 컨테이너를 만들 수 있습니다.
  • 이 Docker 이미지는 Docker 허브에 업로드 할 수 있습니다 (기본적으로 Docker 이미지의 클라우드 저장소이며 공개 또는 비공개로 유지할 수 있음).
  • Docker 허브에있는이 Docker 이미지는 QA 또는 Prod와 같은 다른 팀에서 가져올 수 있습니다.

이는 리소스 낭비를 방지 할뿐만 아니라 개발자의 노트북에있는 컴퓨팅 환경이 다른 팀에서도 복제되도록합니다. 이제 Docker가 필요한 이유를 말할 필요가 없습니다.

이것은 그것을 사용하는 한 가지 방법이었습니다. 여러분들은 제가 Docker를 사용하여 마이크로 서비스 문제를 해결하는 방법을 알고 싶을 것입니다. 이에 대한 개요를 드리겠습니다.

다음은 다이어그램에 대한 설명입니다.

  • 먼저 Dockerfile 내에 복잡한 요구 사항을 작성했습니다.
  • 그런 다음 GitHub에 푸시했습니다.
  • 그 후 CI 서버 (Jenkins)를 사용했습니다.
  • 이 Jenkins 서버는 Git에서 가져와 정확한 환경을 구축합니다. 이것은 프로덕션 서버와 테스트 서버에서 사용됩니다.
  • 스테이징에 배포했습니다 (프로덕션에 완전히 배포하기 전에 테스트 목적으로 서버에 소프트웨어를 배포하는 것을 의미합니다.) 테스터를위한 환경.
  • 기본적으로 우리는 개발, 테스트 및 스테이징에서 보유한 내용을 프로덕션에 정확히 적용했습니다.

실제로 Docker가 내 인생을 쉽게 만들었습니다.

그것이 우리 회사의 이야기였습니다. 인디애나 대학의 사례 연구를 살펴 보겠습니다. Docker가 문제를 해결 한 방법.

Indiana University 사례 연구 :

인디애나 대학교는 미국 인디애나 주에있는 다중 캠퍼스 공립 대학교 시스템입니다.

문제 설명

그들은 사용자 지정 스크립트를 사용하여 VM에 애플리케이션을 배포했습니다.

그들의 환경은 레거시 Java 기반 애플리케이션에 최적화되었습니다. 성장하는 환경에는 자바 기반이 아닌 새로운 제품이 포함됩니다. 학생들에게 최상의 경험을 제공하기 위해 대학은 응용 프로그램을 현대화해야했습니다.

University는 애플리케이션을위한 마이크로 서비스 기반 아키텍처로 이동하여 애플리케이션을 설계하는 방식을 개선하기를 원했습니다.

SSN 및 학생 건강 데이터와 같은 학생 데이터에 대한 보안이 필요했습니다.

해결책:

모든 문제는 Docker Data Center (DDC)에서 해결되었습니다. 아래 다이어그램을 고려하십시오.

Docker 신뢰할 수있는 레지스트리 – Docker 이미지를 저장합니다.

UCP (Universal Control Plane) 웹 UI – 한 곳에서 전체 클러스터를 관리하는 데 도움이됩니다. 서비스는 DTR (Docker Trusted Registry)에 저장된 Docker 이미지를 사용하여 UCP 웹 UI를 사용하여 배포됩니다.

IT 운영 팀은 Universal Control Plane을 활용하여 호스트에 Docker가 설치된 소프트웨어를 프로비저닝 한 다음 모든 인프라를 설정하기 위해 여러 가지 수동 단계를 수행 할 필요없이 애플리케이션을 배포합니다.

UCP 및 DTR은 LDAP 서버와 통합되어 애플리케이션에 대한 액세스를 신속하게 제공합니다.

Docker의 기본 사항을 배우기 위해 이전 블로그를 읽으 셨기를 바랍니다.

이제 다중 컨테이너 애플리케이션에 Docker Compose를 사용하는 방법을 설명하겠습니다.

Docker 실습 :

Docker를 설치했다고 가정합니다..이 게시물에서는 Docker Compose를 사용할 것입니다. 아래에서 Docker Compose에 대해 간략하게 소개했습니다.

Docker 작성 : 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기위한 도구입니다. Docker Compose를 사용하면 Compose 파일을 사용하여 애플리케이션의 서비스를 구성 할 수 있습니다. 그런 다음 단일 명령을 사용하여 구성에서 모든 서비스를 만들고 시작할 수 있습니다.

다양한 컨테이너에 여러 애플리케이션이 있고 모든 컨테이너가 서로 연결되어 있다고 가정합니다. 따라서 각 컨테이너를 하나씩 실행하고 싶지는 않습니다. 그러나 단일 명령으로 이러한 컨테이너를 실행하려고합니다. 이것이 Docker Compose가 등장하는 곳입니다. 이를 통해 단일 명령으로 다양한 컨테이너에서 여러 애플리케이션을 실행할 수 있습니다. 즉, docker-compose up.

예 : YAML 파일에 하나는 웹 앱을 실행하고 다른 하나는 postgres를 실행하고 다른 하나는 redis를 실행하는 다른 컨테이너가 있다고 가정합니다. 이를 docker compose 파일이라고하며, 여기에서 단일 명령으로 이러한 컨테이너를 실행할 수 있습니다.

한 가지 더 예를 들어 보겠습니다.

CMS (Content Management System)를 사용하고 wordpress가 가장 널리 사용되는 CMS이기 때문에 블로그를 게시하려고한다고 가정합니다. 기본적으로 WordPress 용 컨테이너가 하나 필요하고 백엔드 용 MySQL로 컨테이너가 하나 더 필요합니다. MySQL 컨테이너는 워드 프레스 컨테이너에 연결되어야합니다. 또한 MySQL 데이터베이스에 연결될 Php Myadmin 용 컨테이너가 하나 더 필요합니다. 기본적으로 MySQL 데이터베이스에 액세스하는 데 사용됩니다.

자바에서 동기화는 무엇입니까

위에서 언급 한 예제를 실제로 실행하는 것은 어떻습니까?

관련 단계 :

  1. Docker Compose 설치 :
  2. WordPress 설치: 우리는 공식을 사용할 것입니다 워드 프레스MariaDB Docker 이미지.
  3. MariaDB를 설치합니다. 세계에서 가장 인기있는 데이터베이스 서버 중 하나입니다. MySQL의 원래 개발자가 만든 것입니다. MariaDB는 오픈 소스 소프트웨어로 개발되었으며 관계형 데이터베이스로 데이터 액세스를위한 SQL 인터페이스를 제공합니다.
  4. PhpMyAdmin 설치: 웹을 통한 MySQL 관리를 처리하기 위해 PHP로 작성된 무료 소프트웨어 도구입니다.
  5. WordPress 사이트 만들기 :

시작하자!

Docker Compose를 설치합니다.

먼저 Python Pip을 설치합니다.

sudo apt-get install python-pip

이제 Docker Compose를 설치할 수 있습니다.

sudo pip install docker-compose

WordPress 설치 :

WordPress 디렉토리를 만듭니다.

mkdir 워드 프레스

다음 워드 프레스 디렉토리 입력 :

cd 워드 프레스 /

이 디렉터리에서 Docker Compose YAML 파일을 만든 다음 gedit를 사용하여 편집합니다.

sudo gedit docker-compose.yml

해당 yaml 파일에 아래 코드 줄을 붙여 넣습니다.

wordpress : 이미지 : wordpress 링크 :-wordpress_db : mysql 포트 :-8080 : 80 wordpress_db : 이미지 : mariadb 환경 : MYSQL_ROOT_PASSWORD : edureka phpmyadmin : 이미지 : corbinu / docker-phpmyadmin 링크 :-wordpress_db : mysql 포트 :-8181 : 80 환경 : MYSQL_USERNAME : 루트 MYSQL_ROOT_PASSWORD : edureka

이 코드에 대한 설명을 원하신다는 것을 알고 있으므로이 코드의 작은 부분을 취해 무슨 일이 일어나는지 설명하겠습니다.

wordpress_db : ... 환경 : MYSQL_ROOT_PASSWORD : edureka ...

이렇게하면 원하는 암호로 MYSQL_ROOT_PASSWORD라는 wordpress_db 컨테이너 내부의 환경 변수가 설정됩니다. MariaDB Docker 이미지는 시작할 때이 환경 변수를 확인하도록 구성되며 MYSQL_ROOT_PASSWORD로 정의 된 암호를 사용하여 루트 계정으로 DB를 설정합니다.

워드 프레스 : ... 포트 :-8080 : 80 ...

첫 번째 포트 번호는 호스트의 포트 번호이고 두 번째 포트 번호는 컨테이너 내부의 포트입니다. 따라서이 구성은 호스트의 포트 8080에서 요청을 컨테이너 내부의 기본 웹 서버 포트 80으로 전달합니다.

phpmyadmin : 이미지 : corbinu / docker-phpmyadmin 링크 :-wordpress_db : mysql 포트 :-8181 : 80 환경 : MYSQL_USERNAME : 루트 MYSQL_ROOT_PASSWORD : edureka

이것은 커뮤니티 회원 corbinu에 의해 docker-phpmyadmin을 잡고 mysql이라는 이름으로 wordpress_db 컨테이너에 연결합니다 (phpmyadmin 컨테이너 내부에서 mysql 호스트 이름에 대한 참조가 wordpress_db 컨테이너로 전달됨을 의미 함). 포트 80을 포트 8181에 노출합니다. 호스트 시스템을 사용하고 마지막으로 MariaDB 사용자 이름과 암호로 몇 가지 환경 변수를 설정합니다. 이 이미지는 wordpress 이미지와 같은 방식으로 wordpress_dbcontainer의 환경에서 MYSQL_ROOT_PASSWORD 환경 변수를 자동으로 가져 오지 않습니다. 실제로 wordpress_db 컨테이너에서 MYSQL_ROOT_PASSWORD : edureka 줄을 복사하고 사용자 이름을 root로 설정해야합니다.

이제 애플리케이션 그룹을 시작하십시오.

도커 구성 -d

그게 당신이해야 할 전부입니다. 이 방법으로 원하는만큼 컨테이너를 추가하고 원하는 방식으로 모두 연결할 수 있습니다.

이제 브라우저에서 아래와 같이 공용 IP 또는 호스트 이름을 사용하여 포트 8080으로 이동합니다.

localhost : 8080

이 양식을 작성하고 WordPress 설치를 클릭하십시오.

완료되면 서버의 IP 주소를 다시 방문합니다 (이번에는 포트 8181 사용, 예 : localhost : 8181). phpMyAdmin 로그인 화면이 표시됩니다.

for 루프를 사용하여 Java에서 숫자의 자릿수 합계

YAML 파일에 설정 한 사용자 이름 루트와 비밀번호를 사용하여 로그인하면 데이터베이스를 탐색 할 수 있습니다. 서버에 WordPress 설치의 모든 데이터가 포함 된 wordpress 데이터베이스가 포함되어 있음을 알 수 있습니다.

여기에서 Docker Container 블로그를 종료합니다. 이 게시물을 즐기 셨기를 바랍니다. 당신은 확인할 수 있습니다 다른 블로그 이 시리즈에서도 Docker의 기본 사항을 다룹니다.

이 Docker Container 블로그와 관련이있는 경우 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka DevOps 인증 교육 과정은 학습자가 SDLC의 여러 단계를 자동화하기위한 Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack 및 GIT와 같은 다양한 DevOps 프로세스 및 도구에 대한 전문 지식을 습득하는 데 도움이됩니다.

질문이 있으십니까? 의견란에 언급 해 주시면 다시 연락 드리겠습니다.