DOCKER 학습 노트 4 인식 DockerCompose 다 중 용기 편성

7725 단어
머리말
지난 절 학습 을 통 해 리 눅 스 환경 에서 Docker 를 구축 하고 Springboot 프로젝트 를 배치 하 는 방법 을 배 웠 고 성공 적 으로 달 렸 습 니 다. 물론 생산 환경 에서 백 엔 드 웹 프로젝트 뿐만 아니 라 Nginx 를 역방향 대리 로 해 야 합 니 다.데이터베이스 도 하나의 용기 에 따로 배치 해 야 한다. 만약 우리 가 이전에 배 운 것 처럼 하나하나 배치 해 야 한다 면 매우 번 거 롭 지 않 겠 는가.
그래서 우 리 는 이 기능 을 실현 하 는 데 도움 을 줄 것 이 필요 하 다. 그것 이 바로 오늘 배 워 야 할 Docker Compose 용기 편성 기술 이다.
Docker Compose
Docker Compose 는 다 중 용기 Docker 프로그램 을 정의 하고 실행 하 는 도구 로 YAML 파일 을 통 해 프로그램의 서 비 스 를 정의 합 니 다.이후 하나의 명령 을 통 해 이 용기 들 이 만 든 서 비 스 를 시작 할 수 있다.
기본 단계:
  • 정의 Dockerfile 사용자 정의 미 러
  • 편집 docker-compose.yml 용기 서비스 편성
  • docker-compose up 용기 서비스 생 성 및 시작
  • 설치 Compose
    Github 설치
    github 에서 최신 버 전의 Compose 로 컬 컴 파일 설치.추천 방식, 오류 가 적어 직접 설치 할 수 있 습 니 다.
    github https://github.com/docker/compose/releases
    현재 Github 최신 버 전 1.25.4
    ##       Docker Compose     
    curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
    ##        
    chmod +x /usr/local/bin/docker-compose
    
    ##       
    docker-compose -v
    

    pip 설치
    이것 은 비교적 보수적인 설치 방법 으로 위의 설치 방법 에 비해 위의 설치 방법 을 사용 하 는 것 을 권장 합 니까? 아니면 위의 설치 방법 을 사용 하 는 것 을 권장 합 니까?
    ##   epel     
    yum -y install epel-release
    
    ##   python-pip
    yum -y install python-pip
    
    ##   pip      
    pip install -U pip
    
    ## install
    pip install docker-componse
    
    ##       
    docker-compose -v
    

    테스트 사용
    Docker Compose 가 정상적으로 설치 되 어 있 는 지 확인 하 십시오. 홈 페이지 의 데모 로 프레젠테이션 을 진행 할 것 입 니 다. Python 과 Redis 를 설치 할 필요 가 없습니다.
    1. 디 렉 터 리 만 들 기
    
    mkdir -p composetest
    
    cd composetest
    

    2. pyton 웹 만 들 기
    
    ##   app.py
    vi app.py
    
    ##               
    
    import time
    
    import redis
    from flask import Flask
    
    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)
    
    
    def get_hit_count():
        retries = 5
        while True:
            try:
                return cache.incr('hits')
            except redis.exceptions.ConnectionError as exc:
                if retries == 0:
                    raise exc
                retries -= 1
                time.sleep(0.5)
    
    
    @app.route('/')
    def hello():
        count = get_hit_count()
        return 'Hello World! I have been seen {} times.
    '.format(count) ## vi requirements.txt ## flask redis

    사용자 정의 미 러
    
    ##     Dockerfile 
    vi Dockerfile
    
    ##       
    
    FROM python:3.7-alpine
    WORKDIR /code
    ENV FLASK_APP app.py
    ENV FLASK_RUN_HOST 0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["flask", "run"]
    

    이것 은 Docker 에 게 알려 줍 니 다.
    Python 3.7 이미지 부터 이미지 구축.작업 디 렉 터 리 를 / 로 설정 합 니 다.code 명령 에 사용 할 환경 변 수 를 설정 합 니 다.Markup Safe 나 SQLAlchemy 같은 Python 패 키 지 를 컴 파일 할 수 있 도록 gcc 를 설치 합 니 다.Python 의존 항목 을 복사 하고 설치 합 니 다.requirements. txt 는 프로젝트 의 현재 디 렉 터 리 를 이미지 의 작업 디 렉 터 리 로 복사 합 니 다.용기 의 기본 명령 을 설정 합 니 다.flask run
    용기 편성 작성
    
    ##   docker-compose.yml   
    vi docker-compose.yml
    
    ##       
    
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: "redis:alpine"

    네트워크 서비스
    이 웹 서 비 스 는 Dockerfile 현재 디 렉 터 리 에서 구 축 된 이미 지 를 사용 합 니 다.그리고 용기 와 호스트 를 노출 된 포트 5000 에 연결 합 니 다.이 예제 서 비 스 는 Flask 웹 서버 의 기본 포트 5000 을 사용 합 니 다.
    Redis 서비스
    이 redis 서 비 스 는 Docker Hub 레 지 스 트 에서 추출 한 공공 Redis 이미 지 를 사용 합 니 다.
    서비스 실행docker-compose up
    Starting composetest_redis_1 ... done
    Recreating composetest_web_1 ... done
    Attaching to composetest_redis_1, composetest_web_1
    redis_1  | 1:C 09 Feb 2020 02:14:31.462 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis_1  | 1:C 09 Feb 2020 02:14:31.462 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=1, just started
    redis_1  | 1:C 09 Feb 2020 02:14:31.462 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 * Running mode=standalone, port=6379.
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 # Server initialized
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 * DB loaded from disk: 0.000 seconds
    redis_1  | 1:M 09 Feb 2020 02:14:31.463 * Ready to accept connections
    web_1    |  * Serving Flask app "app.py"
    web_1    |  * Environment: production
    web_1    |    WARNING: This is a development server. Do not use it in a production deployment.
    web_1    |    Use a production WSGI server instead.
    web_1    |  * Debug mode: off
    web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    

    서비스 가 5000 포트 에서 성공 적 으로 실행 되 었 습 니 다. 방문 시 도 를 한 다음 에 새로 고침 하고 카운터 의 변 화 를 관찰 합 니 다!
    상용 명령docker-compose up -d 백 스테이지 운영 서비스
    [root@mrclinux composetest]# docker-compose up -d
    Starting composetest_web_1   ... done
    Starting composetest_redis_1 ... done
    docker-compose ps 현재 실행 용기 보기
    [root@mrclinux composetest]# docker-compose ps
           Name                      Command               State           Ports         
    -------------------------------------------------------------------------------------
    composetest_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp              
    composetest_web_1     flask run                        Up      0.0.0.0:8080->5000/tcp
    
    docker-compose images 이미 존재 하 는 미 러 정보 보기
    [root@mrclinux composetest]# docker-compose images
         Container          Repository       Tag       Image Id       Size  
    ------------------------------------------------------------------------
    composetest_redis_1   docker.io/redis   alpine   b68707e68547   29.78 MB
    composetest_web_1     composetest_web   latest   0a812986cca6   221.8 MB
    
    docker-compose stop 용 기 를 멈 추고 삭제 하지 않 으 면 start 를 다시 사용 할 수 있 습 니 다.
    [root@mrclinux composetest]# docker-compose stop
    Stopping composetest_web_1   ... done
    Stopping composetest_redis_1 ... done
    
    docker-compose start start 를 사용 하여 존재 하 는 용기 서 비 스 를 시작 합 니 다.
    [root@mrclinux composetest]# docker-compose start
    Starting web   ... done
    Starting redis ... done
    docker-compose down 서비스 정지 및 용기 제거
    
    [root@mrclinux composetest]# docker-compose down
    Stopping composetest_web_1   ... done
    Stopping composetest_redis_1 ... done
    Removing composetest_web_1   ... done
    Removing composetest_redis_1 ... done
    Removing network composetest_default
    
    docker-compose up 서비스 생 성 및 시작
    레 퍼 런 스
    https://docs.docker.com/compose/
    https://www.cnblogs.com/ityouknow/p/8648467.html

    좋은 웹페이지 즐겨찾기