docker 클 러 스 터 (단일 호스트) 웹 애플 리 케 이 션 입문 배치 (Nginx)
11962 단어 docker
본 고 에서 연구 한 장면 은 Nginx 를 사용 하여 하나의 응용 을 배치 하 는 것 이다. Nginx 서비스, 웹 서비스, 웹 서비스, 캐 시 서비스, 데이터 베이스 서비스 등 과 관련 될 수 있다. 이때 여러 개의 용기 협력 이 필요 하 다. 이런 용기 간 의존 관 계 는 매우 복잡 하 다.동적 주소 에 직면 하여 우 리 는 모든 용기 네트워크 주 소 를 검사 한 후에 설정 하기 어렵다.여 기 는 단기 docker copose 의 응용 만 간단하게 소개 합 니 다.
준비 환경
sudo docker pull nginx
sudo docker run -d --name ng1 -p 8080:80 nginx
curl http://localhost:8080/
sudo docker rm -f ng1
pip --version
python --version
pip 가 없 는 python 과 python 버 전이 일치 하지 않 으 면 설치 / 재 pip 가 필요 합 니 다.
https://pip.pypa.io/en/stable/installing/ get-pip.py
python get-pip.py
설치 검사 docker compose, 더 자세 한 내용 은 2 참조:
pip install docker-compose
docker-compose --version
1. docker compose 안내
docker - compose. yml 파일 로 여러 docker 응용 서 비 스 를 설정 하고 간단 한 명령 으로 이 프로그램 을 만 들 고 시작 합 니 다.
공식 적 으로 해석 이 간결 하 다.docker - compose. yml (YAML 은 프로그래머 에 대한 우호 적 인 데이터 서열 화 표준 3) 의 사례 를 보 여 줍 니 다.
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
이 텍스트 차원 구 조 는 두 가지 서비스 (services, 주: docker 는 개념 이 container 이 고 서비스 개념 이 유행 하면 서 새로운 설 은 하나의 서비스 용기) 가 각각 웹 과 redis, 그리고 하나의 docker 볼 륨 이 라 고 정의 했다.이 명령 들 은 설명 할 필요 가 거의 없습니다. docker run, docker create 등 명령 과 유사 합 니 다. 예 를 들 어 port 는 - p 매개 변수 입 니 다. 상세 한 참고: Compose file reference
* 공식 빠 른 안내 *
1. 작업 디 렉 터 리 만 들 기
mkdir composetest
cd composetest
2. python 웹 애플 리 케 이 션 app. py 만 들 기
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! I have been seen {} times.
'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
3. Dockerfile 만 들 기
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install flask redis
CMD ["python", "app.py"]
이 파일 은 docker 에 게 새로운 미 러 를 만 드 는 데 사용 할 설정 을 알려 줍 니 다.
위 내용 에 따라 docker - compose. yml 을 만 듭 니 다.
운행 하 다.
sudo docker-compose up
sudo docker ps
몇 개의 서비스 (용기) 가 요구 에 따라 시작 되 는 것 을 보 았 다.입력:
curl http://localhost:5000
복귀 결과:
Hello World! I have been seen 1 times.
2. 핵심 서비스 - app 네트워크python 프로그램 에서 코드 redis = Redis (host = 'redis', port = 6379) 에서 host =' redis' 는 절대 주 소 를 사용 하지 않 습 니 다!!,사실, 당신 은 그 중의 어떤 용기 에 들 어가 도 핑 레 디 스, 핑 웹 은 모두 통 합 니 다.
공식 문서 docker - compose 는 모든 항목 의 기본 값 으로 [procject name] 을 만 듭 니 다.default 네트워크 는 서비스 간 에 편리 한 통신 을 할 수 있 도록 합 니 다.
3. Nginx 배치 웹 응용
3.1 모든 서비스 지우 기 (용기)
sudo docker rm -f $(sudo docker ps -a -q)
3.2 Nginx 용기 파일 공간 알 아 보기
sudo docker run -it --rm nginx /bin/bash
nginx 용기 에 들 어 갑 니 다.홈 페이지 정보 에 따라 디 렉 터 리 와 파일 보기:
sudo docker cp 9899eb303ff6:/etc/nginx/conf.d $(pwd)/conf.d
이 때 로 컬 에 가상 컴퓨터 를 설정 하 는 템 플 릿 이 있 습 니 다.
3.3 docker - compose. yml 설정 수정
nginx 와 웹 서비스 추가:
version: '2'
services:
nginx:
image: nginx
volumes:
- ./conf.d:/etc/nginx/conf.d
ports:
- "8080:80"
links:
- web1
- web2
web1:
image: web1:1.0
links:
- redis
web2:
image: web1:2.0
volumes:
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
웹 미 러 구축
sudo docker build . -t web1:1.0
app. py 의 출력 문 구 를 수정 합 니 다. 예 를 들 어 'I' 를 'They' 로 바 꾸 어 미 러 를 구별 합 니 다.그리고:
sudo docker build . -t web1:2.0
서비스 시작 및 테스트:
sudo docker-compose up
curl http://localhost:8080
sudo docker ps
nginx ID, :b4372021a8e1。
sudo docker exec -it b4372021a8e1 /bin/bash
ping web1 -c4
ping web2 -c4
ping redis -c4
exit
ctrl+c
에 따라 용기 서 비 스 를 중지 하고 모든 서 비 스 를 삭제 합 니 다.3.4 conf. d / default. conf 수정
upstream backends {
server web1:5000;
server web2:5000;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location = / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy to webs
location = /test {
proxy_pass http://backends/;
}
}
3.5 실행 프로그램
sudo docker-compose up
모든 서비스 출력, 특히 Nginx 의 출력 에 주의 하 십시오. Nginx 가 먼저 시작 하면 웹 서버 를 찾 을 수 없 을 수도 있 습 니 다.
서비스 시작 순서, up 함수, 현재 프로젝트 의 모든 서 비 스 를 받 고 서비스의 의존성 (links, external links – 본 프로젝트 나 docker - compose 이외 의 용기, 다 중 프로젝트 공용 용기, 네트워크 용기 net - from 및 데이터 용기 volume - from) 에 따라 정렬 합 니 다.
사례 docker - compose. yml 실제 시작 순서:
Creating composetest_redis_1
Creating composetest_web2_1
Creating composetest_web1_1
Creating composetest_nginx_1
... ...
테스트 출력:
[~]$ curl http://localhost:8080/test
Hello World! I have been seen 1 times.
[~]$ curl http://localhost:8080/test
Hello World! They have been seen 2 times.
[~]$ curl http://localhost:8080/test
Hello World! I have been seen 3 times.
[~]$ curl http://localhost:8080/test
Hello World! They have been seen 4 times.
작은 매듭
docker copose 는 설정 파일 을 사용 하여 서비스 클 러 스 터 를 시작 하고 클 러 스 터 내부 네트워크 지원 을 제공 하여 배 치 를 편리 하 게 합 니 다.서비스 간 의존 관계 로 인해 의존 (links 등 이용) 을 정확하게 정의 하고 불확실 성 bug 를 줄 여야 합 니 다.
[참고]
Deploying NGINX and NGINX Plus with Docker https://www.nginx.com/blog/deploying-nginx-nginx-plus-docker/ ↩
Install Docker Compose. https://docs.docker.com/compose/install/ ↩
http://yaml.org/ ↩
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swarm의 도커 비밀이 게시물에서는 Redis를 사용한 실제 시나리오 예제를 제공하여 사용 방법을 보여주고자 합니다. Docker 기술에 대한 기본 지식 Docker Swarm 오케스트레이터에 대한 기본 지식 "Docker Swarm ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.