Docker 다 중 용기 배치 실천 (nginx + node. js)
이전에 소개 한 nginx 관련 글 은 모두 호스트 에 nginx 를 직접 설치 하여 관련 기능 을 실현 하 였 으 며, 현 재 는 nginx 와 docker 를 결합 하여 nginx 의 용기 화 를 실현 하 였 다.
1. 기초
본 고 는 node. js 가 구축 한 가장 간단 한 웹 app 을 사용 하고 다른 python 과 유사 한 것 도 유사 합 니 다.
기본 적 인 운영 환경 과 소프트웨어 버 전 및 프로젝트 구 조 는 다음 과 같다.
1.1 기초 환경
OS: CentOS7.2
Docker : 1.12.2
Docker Compose : 1.9.0-rc4
1.2 기초 docker 미 러
Nginx: latest.
Node.js: latest. (7.1)
1.3 프로젝트 디 렉 터 리 구조
home/name/a/dd #
- compose # , , , .
- docker-compose.yml
- nginx
- nginx.conf ( , nginx )
- node
- app.js
2. 구체 적 인 파일 정의
전체 항목 에 사용 되 는 파일 이 많 지 않 습 니 다.
compose,nginx node
폴 더 아래 세 개의 관련 파일 만 있 습 니 다. 아래 에 구체 적 인 각 파일 의 설정 을 보 여 줍 니 다.2.1 app.js
var http = require("http");
http.createServer(function (req,res){
time = (new Date).getTime().toString()+"
";
res.writeHeader(200,{"Content-Type":"text/plain"});
res.end(time); #
}).listen(3000); # 3000
console.log("Starting server running at http://127.0.0.1:3000/");
이것 은 가장 간단 한 웹 app 입 니 다. 3000 포트 를 감청 하고 매번 날짜 시간 을 되 돌려 달라 고 요청 합 니 다.
2.2 nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 512;
}
http {
log_format main '$remote_addr - $remote_user[$time_local] "$http_user_agent" "$http_x_forwarded_for" "$upstream_addr"'; # log
access_log /etc/nginx/access.log main; # log
upstream dd_server { # server ,
server compose_web_1:3000; # server, 5 web app , 5 , .
server compose_web_2:3000;
server compose_web_3:3000;
server compose_web_4:3000;
server compose_web_5:3000;
}
server {
listen 5000; #
location / {
proxy_pass http://dd_server/; # dd_server
}
}
}
중점 은
upstream
안의 모든 server
뒤의 주소 매개 변수 이다. 예 를 들 어 compose_web_1:3000
는 다음 과 같다.compose_web_1
그 중에서 compose
은 docker-compose.yml
파일 이 있 는
이 고 web
는 docker-compose.yml
정 의 된 웹 app service
이 며 번호 1 은 첫 번 째 를 나타 내 고 후속 사용 scale
명령 을 순서대로 2, 3, 4 로 별명 을 지 었 다. 3000
웹 app 감청 포트 입 니 다. version: '2' # compose file , 2
services:
web: # service
image: node #
volumes: #
- $HOME/a/dd/node:/usr/src/app #
working_dir: /usr/src/app
command: node app.js #
proxy:
image: nginx
volumes:
- $HOME/a/dd/nginx:/etc/nginx
ports:
- "4000:5000" #
links:
- web # ,web
여기 서 정 의 된 웹 app 이라는 service 의 이름
web
을 볼 수 있 습 니 다. 그리고 이 docker-compose.yml
은 compose
디 렉 터 리 에 있 습 니 다. service 에 기본 별명 compose_web_1
을 생 성 합 니 다. 이것 이 바로 우리 가 nginx.conf
에서 upstream
명령 한 이름 입 니 다.3. 시동
상기 파일 내용 을 준비 하고 상기 프로젝트 파일 구조 에 부합 하면 시작 할 수 있 습 니 다. 세 가지 절차 가 있 습 니 다.
yml
명령 의 실행 은 yml 파일 을 참고 하고 전환 하지 않 아 도 됩 니 다. 디 렉 터 리 는 명령 에 파 라 메 터 리 를 추가 할 수 있 지만 번 거 로 운 docker-compose
가 필요 합 니 다. 기본 적 인 상황 에서 docker copose 는 기본 네트워크 이름 network
네트워크 를 만 듭 니 다. 이름 규칙 은 compose_default
이 고 구체 적 으로 Networking in Compose 를 볼 수 있 습 니 다. cd ~/a/dd/compose # 1.
docker network create compose_default # 2.
docker-compose up --scale web=5 # 3. 5 web app
비슷 한 출력 이 있 을 수 있 습 니 다:
Attaching to compose_web_4, compose_web_3, compose_web_5, compose_web_1, compose_web_2, compose_proxy_1
web_3 | Starting server running at http://127.0.0.1:3000/
web_4 | Starting server running at http://127.0.0.1:3000/
web_5 | Starting server running at http://127.0.0.1:3000/
web_2 | Starting server running at http://127.0.0.1:3000/
web_1 | Starting server running at http://127.0.0.1:3000/
용기 의 ip 보기:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
172.19.0.7
172.19.0.6
172.19.0.5
172.19.0.4
172.19.0.3
172.19.0.2
이것 이 바로 실행 중인 용기 의 ip 입 니 다.
4. 테스트
방식 은 여러 가지 가 있 습 니 다.
_default
명령 을 직접 사용 하여 측정 할 수 있 습 니 다.curl -I 127.0.0.1:4000 # yml nginx ports
몇 번 더 실행 한 다음
curl
디 렉 터 리 에 있 는 nginx
파일 을 열 면 다음 과 같은 정 보 를 볼 수 있 습 니 다.172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.2:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.4:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.5:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.3:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.6:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.2:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.4:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.5:3000"
172.19.0.1 - -[11/Nov/2016:17:12:40 +0000] "curl/7.29.0" "-" "172.19.0.3:3000"
172.19.0.1 - -[11/Nov/2016:17:12:41 +0000] "curl/7.29.0" "-" "172.19.0.6:3000"
172.19.0.1 - -[11/Nov/2016:17:12:41 +0000] "curl/7.29.0" "-" "172.19.0.2:3000"
마지막 열
access.log
의 주 소 를 보면 우리 의 구체 적 인 용기 의 ip 입 니 다. 매번 nginx 를 요청 할 때마다 알고리즘 에 따라 예약 하기 때문에 이 주소 들 은 변화 하고 배치 성공 을 설명 합 니 다.5. 총화
172.19.0.2:3000
명령 을 사용 하지 않 고 yml 파일 에서 직접 scale
할 수 있 지만 이것 은 비교적 간단 하 다. 이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.