기존 애플리케이션을 Docker와 Swarm으로 서버화하십시오.
12173 단어 Docker
원자재
BUILDING SERVERLESS APPS WITH DOCKER
개요
Docker Blog 재미있는 글이 있어요. 소개/해설.
기존의 웹 응용 프로그램을 Docker와 swarm에 서버가 없는 소프트웨어로 만듭니다.
자세한 내용은 위 원자재를 참조하십시오.
본고는 각 요점에 대한 기교를 소개할 것이다.
또한 각 소스 코드는 아래 창고에서 공개된다.
GiitHub/일반 구성(기존 웹 응용프로그램)의 소스 코드
서버 구성이 없는 소스 코드
---추기 6/26
상기 프레젠테이션 프로그램은 swarm 클래스를 형성하지 않았습니다.
스웨덴에서 활동하는 샘플여기.에서 제작해 보았습니다.( 차분 변경 )
Docker Toolbox(VirtualBox) 활동의 샘플이기 때문에 환경이 있는 분들은 한번 시도해 보세요.Docker in Docker(Swarmクラスタ)
의 샘플도 참고하세요.
추기는 여기까지다
---추기 6/30
원재료의 일본어 번역이 창작라인에 공개됐다.
http://www.creationline.com/lab/docker/14211
추기는 여기까지다
서버 아키텍처가 없는 기존 어플리케이션 지원
변환 객체의 응용 프로그램은 투표 응용 프로그램입니다.
기능으로
Docker Blog 재미있는 글이 있어요. 소개/해설.
기존의 웹 응용 프로그램을 Docker와 swarm에 서버가 없는 소프트웨어로 만듭니다.
자세한 내용은 위 원자재를 참조하십시오.
본고는 각 요점에 대한 기교를 소개할 것이다.
또한 각 소스 코드는 아래 창고에서 공개된다.
GiitHub/일반 구성(기존 웹 응용프로그램)의 소스 코드
서버 구성이 없는 소스 코드
---추기 6/26
상기 프레젠테이션 프로그램은 swarm 클래스를 형성하지 않았습니다.
스웨덴에서 활동하는 샘플여기.에서 제작해 보았습니다.( 차분 변경 )
Docker Toolbox(VirtualBox) 활동의 샘플이기 때문에 환경이 있는 분들은 한번 시도해 보세요.
Docker in Docker(Swarmクラスタ)
의 샘플도 참고하세요.추기는 여기까지다
---추기 6/30
원재료의 일본어 번역이 창작라인에 공개됐다.
http://www.creationline.com/lab/docker/14211
추기는 여기까지다
서버 아키텍처가 없는 기존 어플리케이션 지원
변환 객체의 응용 프로그램은 투표 응용 프로그램입니다.
기능으로
투표 화면
결과 화면 표시
이 응용 프로그램은 아래 5개의 서비스/서버로 구성되어 있다.
(DockkerCon16에 사용된 vote 응용 프로그램. 소스 코드는 여기. 에 있음)
출처: BUILDING SERVELESS APPS WITH DOCKER
각자의 역할은 다음과 같다.
이름:
이루어지다
과업
voting app
Python
투표 화면
message queue
Redis
작업 대기열
worker
.Net(C#)
작업에 대한 디버깅, DB에 대한 INSERT
database
PostgreSQL
투표 결과를 저장할 DB
result app
Node.js
결과 화면 표시
이것을 아래의 구성으로 만들어 보세요.
출처: BUILDING SERVELESS APPS WITH DOCKER
빨간색 배경은 자주 시작하는 서비스(서버)입니다.
녹색 섹션은 필요에 따라 부팅할 서버가 없는 섹션입니다.
(소스는 여기. 중)
각자의 역할은 다음과 같다.
이름:
이루어지다
과업
entrypoint
Golang
HTTP 요청에 응답하여 Docker 컨테이너 시작
handle vote
Python
투표 화면
process vote task
Java
DB 투표
database
PostgreSQL
투표 결과를 저장할 DB
handle result
Perl
결과 화면 표시
다음은 각 주문한 소스/비교.
주안점
요청 처리 부분
voting app
및 result app
entrypoint
의 서비스를 받아 각각 담당하는 Docker 컨테이너를 가동한다.
요청 처리부의 차이
voting app
와 result app
는 각각 이상한 점이 없는 웹 응용 프로그램이다.voting app
는 파이톤/플래시, result app
는 노트다.js/express로 만들기)
상대적으로 entrypoint
도 웹 응용 프로그램(Go 언어)이고 net/http
에서 요청을 받은 후go-dcgi
라는 프로그램 라이브러리에서 Docker 컨테이너를 시작합니다.
이 부분 소스 좀 봐.
매우 짧기 때문에 전문이 모두 실렸다.(댓글은 내가 추기했다)
entrypoint.gopackage main
import (
"net/http"
"github.com/bfirsh/go-dcgi"
"github.com/docker/engine-api/client"
"github.com/docker/engine-api/types/container"
)
func main() {
// Dockerクライアントの初期化
cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.23", nil, nil)
if err != nil {
panic(err)
}
// 起動するコンテナのネットワーク/ボリュームの設定
hostConfig := &container.HostConfig{
NetworkMode: "serverlessdockervotingapp_default",
Binds: []string{"/var/run/docker.sock:/var/run/docker.sock"},
}
// リクエストURLごとにDockerコンテナを起動して処理するハンドラを登録
http.Handle("/vote/", &dcgi.Handler{
Image: "bfirsh/serverless-vote",
Client: cli,
HostConfig: hostConfig,
Root: "/vote", // strip /vote from all URLs
})
http.Handle("/result/", &dcgi.Handler{
Image: "bfirsh/serverless-result",
Client: cli,
HostConfig: hostConfig,
Root: "/result",
})
// 80番ポートで待ち受け開始
http.ListenAndServe(":80", nil)
}
go-dcgi
지정된 Docker 클라이언트/설정/이미지를 사용하여 Docker 컨테이너를 시작합니다.
요점: 컨테이너에서 컨테이너 가동(docker.sock의 연결)
중점은 /var/run/docker.sock
의 인수인계다.
이것을 사용하여 Docker 컨테이너에서 Docker API를 호출합니다.
또한 이 응용 프로그램 자체도 Docker 컨테이너입니다.docker-compose가 시작될 때
Docker 호스트var/run/docker.sock
의 음량은 다음과 같습니다.
서버 버전이 없는 docker-compose입니다.ymlversion: "2"
services:
entrypoint:
build: entrypoint
ports:
- 80:80
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
db:
image: postgres:9.4
Docker 호스트 docker.sock~entrypoint
컨테이너~HTTP 처리용 컨테이너
docker.sock이 바뀌었습니다.
투표 결과 등록
투표 결과 등록부의 차이
일반적인 서버 구성에서
package main
import (
"net/http"
"github.com/bfirsh/go-dcgi"
"github.com/docker/engine-api/client"
"github.com/docker/engine-api/types/container"
)
func main() {
// Dockerクライアントの初期化
cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.23", nil, nil)
if err != nil {
panic(err)
}
// 起動するコンテナのネットワーク/ボリュームの設定
hostConfig := &container.HostConfig{
NetworkMode: "serverlessdockervotingapp_default",
Binds: []string{"/var/run/docker.sock:/var/run/docker.sock"},
}
// リクエストURLごとにDockerコンテナを起動して処理するハンドラを登録
http.Handle("/vote/", &dcgi.Handler{
Image: "bfirsh/serverless-vote",
Client: cli,
HostConfig: hostConfig,
Root: "/vote", // strip /vote from all URLs
})
http.Handle("/result/", &dcgi.Handler{
Image: "bfirsh/serverless-result",
Client: cli,
HostConfig: hostConfig,
Root: "/result",
})
// 80番ポートで待ち受け開始
http.ListenAndServe(":80", nil)
}
version: "2"
services:
entrypoint:
build: entrypoint
ports:
- 80:80
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
db:
image: postgres:9.4
3개의 서비스는 자주 시작되지만 서버가 없는 설정은 매번 컨테이너 처리를 시작하는 형식이다.
웹 응용 프로그램 소스에서는 Redis의 대기열 처리가 Docker에서 처리가 시작되는 정도만 수정되었습니다.
투표 결과 등록부의 출처가 다르다
Redis 호출과 Docker 클라이언트 처리가 라이브러리화되었기 때문에
소스 자체의 수정은 매우 적다.
요점: 매번 swarm 집단에서 시작하는 장점
Docker 컨테이너의 시동이 swarm에서 집단에서 투명하게 운행되는 부분에 중점을 두었다.
swarm에서 실행을 통해 집단상의 빈 자원 관리/부하 균형 처리 등을 swarm에 맡깁니다.
동시에 요구가 있으면 swarm 집단이 처리할 수 있는 부분까지 마음대로 축소할 수 있습니다.
---추기 6/26
이 모델 프로그램은 swarm 폴더로 구성되지 않았습니다.
swarm 집단 구성에서 실행할 때 Docker 플러그인 인터페이스 부분을 적당히 변경해야 한다.
(예: swarm master에 대한 NW 통신, 컨테이너에 DOCKER HOST 환경 변수 또는 DOCKER CERT PATH 환경 변수 설정 등)
이 근처는 이 데모어 프라이과제.입니다.
-- 6/26 추기: 2차---
swarm에서 활동하는 샘플을 여기.에 놓습니다.
swarm에 대응하는 변화가 어디에 있는지 참조(Giithub/변경차).
추기는 여기까지다
기타 차이점
그리고 DB 로그인을 하는 워크맨/task도 Redis에서 시작하는 디버깅을 기점으로 합니다
외부에서 시작하는 것을 기점으로 하는 차이는 있지만 소스에서는 별 차이가 없다.
다른 자세한 부분은 소스를 비교해 주세요.
끝맺다
어때요?
Swarm에서 Docker 컨테이너를 시작할 때마다 swarm으로 하여금 부하 균형과 비례를 제어할 수 있다
자주 시작하는 서버(서비스)가 적어지기 때문에 운용 작업도 좀 수월해진다?내 생각엔
이번 서버 구조화 없이 사용된 프로그램 라이브러리 등은 다음과 같은 페이지에 요약되어 있다.
Github/Serverless Docker
또한, docker v1.12에서는 다중 호스트의 데모 기능인 Docker 바디에 설치되어 있기 때문에
swarm 집단의 구축이 쉬워졌다.
이번 기회에 Docker의 서버 없는 구조를 연구해 보는 게 어때요?
그게 다야.
Reference
이 문제에 관하여(기존 애플리케이션을 Docker와 Swarm으로 서버화하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamamoto-febc/items/1a92768729e0f5ee248b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(기존 애플리케이션을 Docker와 Swarm으로 서버화하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamamoto-febc/items/1a92768729e0f5ee248b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)