docker 클 러 스 터 (단일 호스트) 웹 애플 리 케 이 션 입문 배치 (Nginx)

11962 단어 docker
docker 클 러 스 터 (단일 호스트) 웹 애플 리 케 이 션 입문 배치 (Nginx)
본 고 에서 연구 한 장면 은 Nginx 를 사용 하여 하나의 응용 을 배치 하 는 것 이다. Nginx 서비스, 웹 서비스, 웹 서비스, 캐 시 서비스, 데이터 베이스 서비스 등 과 관련 될 수 있다. 이때 여러 개의 용기 협력 이 필요 하 다. 이런 용기 간 의존 관 계 는 매우 복잡 하 다.동적 주소 에 직면 하여 우 리 는 모든 용기 네트워크 주 소 를 검사 한 후에 설정 하기 어렵다.여 기 는 단기 docker copose 의 응용 만 간단하게 소개 합 니 다.
준비 환경
  • docker run 등 명령 에 익숙 하 다 고 가정 하 세 요
  • Nginx 설정 에 대해 간단히 알 아 보기
  • Nginx 다운로드 및 검사 1
  • sudo docker pull nginx
    sudo docker run -d --name ng1 -p 8080:80 nginx
    curl http://localhost:8080/
    sudo docker rm -f ng1
  • docker compose 설치
  • (중요) pip 와 python 버 전의 일치 성 검사
    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 에 게 새로운 미 러 를 만 드 는 데 사용 할 설정 을 알려 줍 니 다.
  • 기본 설정 원본 python: 3.4 - alpine
  • 현재 디 렉 터 리 를 미 러 / code 경로 에 추가 합 니 다
  • 미 러 시작 시 현재 작업 디 렉 터 리 / code
  • 설정
  • 미 러 에 python 의 flask 웹 프레임 워 크 와 redis 방문 클 라 이언 트 를 설치 합 니 다
  • 시작 시 명령 을 실행 합 니 다 python app. py
  • 4 、 Compose 로 미 러 를 만 들 고 실행
    위 내용 에 따라 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 용기 에 들 어 갑 니 다.홈 페이지 정보 에 따라 디 렉 터 리 와 파일 보기:
  • / etc / nginx 각종 프로필, 그 중에서 nginx. conf 는 주 프로필 로 수정 할 필요 가 없습니다
  • / etc / nginx / conf. d 가상 컴퓨터 설정 디 렉 터 리.default. conf 파일 이 하나 밖 에 없습니다
  • / usr / share / nginx / html 공식 추천 정적 파일 마 운 트 지점
  • ~ / copostest 디 렉 터 리 에서 실행
    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/;
        }
    }
  • upstream backends 는 웹 부하 균형 에 참여 하 는 서 비 스 를 정의 했다.상세 upstream 설정
  • location 은 서로 다른 url 의 처 리 를 정의 했다.자세 한 nginx 위치 매 칭 규칙
  • proxy_패스 는 프 록 시 대상 을 정의 합 니 다.url 과 url 이 없 는 차이 점 을 주의 하 십시오 (rewrite, transport).자세 한 프 록 시pass

  • 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/ ↩

    좋은 웹페이지 즐겨찾기