Computer >> 컴퓨터 >  >> 소프트웨어 >> 가상 기기

Docker Engine 스웜 모드 - 소개 튜토리얼

펑크 록 밴드처럼 들립니다. 그러나 이는 완전히 새로운 오케스트레이션 메커니즘 또는 도커에서 사용 가능한 오케스트레이션의 개선입니다. 짧고 유용하게 유지하기 위해 이전 버전의 Docker를 사용하는 경우 Swarm을 수동으로 설정하여 Docker 클러스터를 생성해야 합니다. 버전 1.12부터 Docker 엔진은 원활한 클러스터링 설정을 허용하는 기본 구현과 함께 제공됩니다. 우리가 여기 있는 이유.

이 튜토리얼에서는 오케스트레이션과 관련하여 Docker가 할 수 있는 일을 맛보기로 보여드리겠습니다. 이 기사는 결코 모든 것을 포함하거나 모든 것을 알고 있는 것은 아니지만 클러스터링 여정을 시작하는 데 필요한 내용을 담고 있습니다. 나 후에.

기술 개요

매우 상세하고 매우 유용한 Docker 설명서 기사를 다시 해시하는 것은 부끄러운 일이므로 기술에 대한 간략한 개요만 설명하겠습니다. 그래서 우리에게는 Docker가 있습니다. 이제 하나 이상의 서버를 Docker 호스트로 사용하려고 하지만 동일한 논리적 엔터티에 속하기를 원합니다. 따라서 클러스터링.

하나의 클러스터부터 시작하겠습니다. 호스트에서 swarm을 시작하면 클러스터의 관리자가 됩니다. 기술적으로는 한 노드의 합의 그룹이 됩니다. 이면의 수학적 논리는 Raft 알고리즘을 기반으로 합니다. 관리자는 작업 스케줄링을 담당합니다. 작업은 한 번 그리고 Swarm에 합류하는 경우 작업자 노드에 위임됩니다. 이것은 Node API에 의해 관리됩니다. API라는 단어가 싫지만 여기서는 사용해야 합니다.

서비스 API는 이 구현의 두 번째 구성 요소입니다. 이를 통해 관리자 노드는 Swarm의 모든 노드에서 분산 서비스를 생성할 수 있습니다. 서비스는 복제될 수 있습니다. 즉, 분산 메커니즘을 사용하여 클러스터 전체에 분산되거나 서비스 인스턴스가 각 노드에서 실행되는 전역적일 수 있습니다.

여기에는 훨씬 더 많은 작업이 있지만 이것은 당신을 준비시키고 펌핑하기에 충분합니다. 이제 실제 실습을 해봅시다. 우리의 대상 플랫폼은 CentOS 7.2입니다. 이 튜토리얼을 작성할 당시 리포지토리에는 Docker 1.10만 있었고 swarm을 사용하려면 프레임워크를 수동으로 업그레이드해야 했기 때문에 매우 흥미로웠습니다. 이에 대해서는 별도의 자습서에서 설명합니다. 그런 다음 새 노드를 클러스터에 결합하고 Fedora로 비대칭 설정을 시도하는 후속 가이드도 제공됩니다. 이 시점에서 올바른 설정이 되어 있다고 가정하고 클러스터 서비스를 시작하고 실행해 보겠습니다.

이미지 및 서비스 설정

단일 IP 주소를 통해 콘텐츠를 제공하는 여러 인스턴스가 있는 부하 분산된 Apache 서비스를 설정하려고 합니다. 꽤 표준. 또한 클러스터 구성을 사용하는 일반적인 이유(가용성, 중복성, 수평 확장 및 성능)를 강조합니다. 물론 네트워킹 부분과 스토리지도 고려해야 하지만 이는 이 가이드의 범위를 넘어선 것입니다.

실제 Dockerfile 템플릿은 httpd 아래의 공식 저장소에서 사용할 수 있습니다. 진행하려면 최소한의 설정이 필요합니다. 이미지를 다운로드하는 방법, 직접 만드는 방법 등에 대한 자세한 내용은 이 튜토리얼의 시작 부분에 링크된 내 소개 가이드에서 확인할 수 있습니다.

도커 빌드 -t my-apache2 .
Docker 데몬 2.048kB에 빌드 컨텍스트 보내기
1단계:httpd:2.4에서
저장소 docker.io/library/httpd를 가져오려고 시도 중...
2.4:docker.io/library/httpd에서 가져오기

8ad8b3f87b37:풀 완료
c95e1f92326d:풀 완료
96e8046a7a4e:풀 완료
00a0d292c371:풀 완료
3f7586acab34:당기기 완료
다이제스트:sha256:3ad4d7c4f1815bd1c16788a57f81b413...a915e50a0d3a4
상태:docker.io/httpd:2.4용 최신 이미지 다운로드
---> fe3336dd034d
2단계:../public-html/ /usr/local/apache2/htdocs/ 복사
...

더 진행하기 전에 단일 인스턴스를 시작하고 컨테이너가 오류 없이 생성되고 웹 서버에 연결할 수 있는지 확인해야 합니다. 이를 설정하면 분산 서비스를 만들 것입니다.

docker run -dit --name my-running-app my-apache2

IP 주소를 확인하고 브라우저에 들어가 무엇이 제공되는지 확인하십시오.

Swarm 시작 및 설정

다음 단계는 무리를 이동시키는 것입니다. 다음은 작업을 진행할 수 있는 가장 기본적인 명령이며 Docker 블로그에서 사용된 예와 매우 유사합니다.

도커 서비스 생성 --이름 프런트엔드 --replicas 5 -p 80:80/tcp my-apache2:latest

여기에 무엇이 있습니까? 5개의 컨테이너 인스턴스가 있는 프런트엔드라는 서비스를 만들고 있습니다. 우리는 또한 hostPort 80을 containerPort 80과 바인딩하고 있습니다. 그리고 이를 위해 새로 만든 Apache 이미지를 사용하고 있습니다. 그러나 이렇게 하면 다음 오류가 발생합니다.

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
데몬의 오류 응답:이 노드는 Swarm 관리자가 아닙니다. "docker swarm init" 또는 "docker swarm join"을 사용하여 이 노드를 swarm에 연결하고 다시 시도하십시오.

이는 현재 호스트(노드)를 스웜 관리자로 설정하지 않았음을 의미합니다. 떼를 초기화하거나 기존 떼에 가입해야 합니다. 아직 가지고 있지 않으므로 초기화하겠습니다:

도커 스웜 초기화
Swarm 초기화됨:현재 노드(dm58mmsczqemiikazbfyfwqpd)가 이제 관리자입니다.

이 스웜에 작업자를 추가하려면 다음 명령을 실행합니다.

docker swarm 조인 \
--토큰 SWMTKN-1-4ofd46a2nfyvrqwu8w5oeetukrbylyznxla
9srf9vxkxysj4p8-eu5d68pu5f1ci66s7w4wjps1u \
10.0.2.15:2377

이 스웜에 관리자를 추가하려면 'docker swarm join-token manager'를 실행하고 지침을 따릅니다.

출력은 상당히 자명합니다. 우리는 떼를 만들었습니다. 새 노드는 Swarm에 참여하기 위해 올바른 토큰을 사용해야 합니다. 방화벽 규칙이 필요한 경우 식별된 IP 주소와 포트도 있습니다. 또한 스웜에 관리자를 추가할 수도 있습니다. 이제 서비스 생성 명령을 다시 실행하십시오:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
6lrx1vhxsar2i50is8arh4ud1

테스트 연결

이제 서비스가 실제로 작동하는지 확인해 봅시다. 어떤 면에서 이것은 우리가 Vagrant 및 coreOS에서 수행한 것과 유사합니다. 결국 개념은 거의 동일합니다. 같은 아이디어를 다르게 구현한 것일 뿐입니다. 먼저 docker ps가 올바른 출력을 표시해야 합니다. 생성된 서비스에 대한 여러 복제본이 있어야 합니다.

도커 ps
컨테이너 ID 이미지 명령 생성됨 상태 포트
이름
cda532f67d55 my-apache2:latest "httpd-foreground"
2분 전 최대 2분 80/tcp frontend.1.2sobjfchdyucschtu2xw6ms9a
75fe6e0aa77b my-apache2:latest "httpd-foreground"
2분 전 최대 2분 80/tcp frontend.4.ag77qtdeby9fyvif5v6c4zcpc
3ce824d3151f my-apache2:latest "httpd-foreground"
2분 전 최대 2분 80/tcp frontend.2.b6fqg6sf4hkeqs86ps4zjyq65
eda01569181d my-apache2:latest "httpd-foreground"
2분 전 최대 2분 80/tcp frontend.5.0rmei3zeeh8usagg7fn3olsp4
497ef904e381 my-apache2:latest "httpd-foreground"
2분 전 최대 2분 80/tcp frontend.3.7m83qsilli5dk8rncw3u10g5a

또한 기본이 아닌 다른 포트로 테스트했으며 잘 작동합니다. 서버에 연결하고 응답을 받는 방법에는 많은 여유가 있습니다. 올바른 포트와 함께 localhost 또는 도커 인터페이스 IP 주소를 사용할 수 있습니다. 아래 예는 포트 1080을 보여줍니다.

자, 이것은 매우 거칠고 매우 단순한 시작입니다. 진정한 도전은 최적화되고 확장 가능한 서비스를 만드는 것이지만 적절한 기술 사용 사례가 필요합니다. 또한 docker info 및 docker service(inspect|ps) 명령을 사용하여 클러스터가 어떻게 작동하는지 자세히 알아볼 수 있습니다.

가능한 문제

Docker 및 swarm을 사용하는 동안 약간의 작은(또는 그렇게 작지 않은) 문제가 발생할 수 있습니다. 예를 들어 SELinux는 불법적인 작업을 시도하고 있다고 불평할 수 있습니다. 그러나 오류와 경고가 너무 많이 방해해서는 안됩니다.

도커 서비스는 도커 명령이 아닙니다

복제된 서비스를 시작하기 위해 필요한 명령을 실행하려고 하면 docker:'service' is not a docker command라는 오류가 발생합니다. 이는 올바른 버전의 Docker가 없음을 의미합니다(-v로 확인). 후속 자습서에서 이 문제를 해결할 것입니다.

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
docker:'service'는 docker 명령이 아닙니다.

도커 태그가 인식되지 않음

다음 오류가 표시될 수도 있습니다.

docker service create -name frontend -replicas 5 -p 80:80/tcp my-apache2:latest
데몬의 오류 응답:rpc 오류:코드 =3 desc =ContainerSpec:"-name"은 유효한 저장소/태그가 아닙니다.

이에 대한 여러 토론 스레드가 있습니다. 오류는 실제로 무해할 수 있습니다. 브라우저에서 명령을 복사했을 수 있으며 하이픈이 올바르게 구문 분석되지 않을 수 있습니다. 저것과 같이 쉬운.

더 읽어보기

Docker 1.12 이전의 Swarm 구현과 Docker 엔진의 현재 버전을 포함하여 이 주제에 대해 더 많은 이야기가 있습니다. 다시 말해, 게으르지 말고 시간을 내어 읽어 보십시오:

Docker Swarm 개요(독립 실행형 Swarm 설치용)

프로덕션용 Swarm 클러스터 구축(독립형 설정)

Docker Swarm 설치 및 생성(독립 실행형 설정)

Docker 엔진 스웜 개요(버전 1.12용)

스웜 모드 시작하기(버전 1.12용)

결론

자. 이 시점에서 너무 거창한 것은 아니지만 이 기사가 유용하다고 생각합니다. It covers several key concepts, there's an overview of how the swarm mode works and what it does, and we successfully managed to download and create our own Web server image and then run several clustered instances of it. We did this on a single node for now, but we will expand in the future. Also, we tackled some common problems.

I hope you find this guide interesting. Combined with my previous work on Docker, this should give you a decent understand of how to work with images, the networking stack, storage, and now clusters. Warming up. Indeed, enjoy and see you soon with fresh new tutorials on Docker. I just can't contain [sic] myself.

건배.