docker - compose 실행 Flask 응용 최 적 실천

6119 단어 Docker
배경
『 8195 』 예전 에 응용 을 배 치 했 을 때 각종 환경 설정 이 필요 하고 각종 셸 작업 이 있어 야 사용 가능 한 서 비 스 를 구축 할 수 있 습 니 다.현재 Docker 가 생 긴 후에 배치 방식 이 더욱 쉬 워 지고 설정 오류 가 발생 하기 쉽 지 않 으 며 환경 이 일치 하지 않 습 니 다.로 컬 환경 에서 운행 할 수 있 고 온라인 으로 이전 하 는 데 여러 가지 문제 가 발생 하 는 것 을 해결 했다. 이런 문 제 는 대부분 온라인 과 로 컬 환경 에 차이 가 있 고 설정 에 오류 가 발생 하기 쉽다.그렇다면 docker - compose 와 docker 사이 에는 어떤 관계 가 있 습 니까?
先来看看docker-compose 的定义:
「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」

    docker 는 Dockerfile 템 플 릿 파일 을 통 해 응용 용 기 를 정의 할 수 있다 는 것 을 알 고 있 습 니 다.실제 응용 프로그램 에 서 는 여러 용기 가 함께 프로그램 을 실행 하 는 경우 가 많다.예 를 들 어 Flask 응용 을 실현 하려 면 Flask 서비스 자 체 를 제외 하고 데이터베이스 서비스 용기 등 이 필요 하 다.Compose 는 이러한 수 요 를 마침 만족 시 켰 다.이것 은 사용자 가 하나의 docker - compose. yml 템 플 릿 파일 (YAML 형식) 을 통 해 연 결 된 응용 용 기 를 프로젝트 (procject) 로 정의 할 수 있 도록 합 니 다.    Docker - Compose 사용 자 를 통 해 하나의 프로필 로 여러 용기 의 응용 을 쉽게 정의 한 다음 에 하나의 명령 으로 이 응용 프로그램의 모든 의존 도 를 설치 하여 구축 을 완성 할 수 있 습 니 다.Docker - Compose 는 용기 와 용기 간 에 편성 을 어떻게 관리 하 는 지 에 대한 문 제 를 해결 했다.
실시 절차
Dockerfile 사용자 정의 미 러 사용 하기
* 8195: 미 러 의 맞 춤 형 제작 은 실제 적 으로 각 층 에 추 가 된 설정, 파일 을 맞 추 는 것 입 니 다. Flask 응용 은 환경 의존 이 있어 야 실행 할 수 있 기 때 문 입 니 다.따라서 Flask 를 Docker 용기 에서 실행 하려 면 이 용 기 는 모든 환경 을 설치 해 야 합 니 다.Dockerfile 은 환경 의존 설정 등 을 제공 합 니 다.Dockerfile 은 하나의 텍스트 파일 로 그 안에 하나의 명령 (Instruction) 이 포함 되 어 있 고 모든 명령 이 한 층 씩 구축 되 어 있 기 때문에 모든 명령 의 내용 은 이 층 이 어떻게 구축 해 야 하 는 지 설명 하 는 것 이다.
다음은 제 GitHub 프로젝트 flask - v2ex 에 적 용 된 Dockerfile 파일 을 예 로 들 어 보 겠 습 니 다.
FROM daocloud.io/python:3.5

MAINTAINER Guoweikuang 
RUN mkdir -p /home/guoweikuang/app 
WORKDIR /home/guoweikuang/app 

ADD ./requirements.txt /home/guoweikuang/app/requirements.txt 

RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip 
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 

ADD . /home/guoweikuang/app 

CMD python manage.py runserver -h 0.0.0.0

FROM: 指定了基础镜像,以该镜像为基础,在其上进行定制操作
MAINTAINER: 用来指定镜像创建者信息
RUN: 创建了 **/home/guoweikuang/app** 文件夹 (后面 RUN pip3 安装Python扩展库)
WORKDIR: 切换目录,可以多次切换(相当于cd命令)
ADD: 从本地目录相应文件拷贝到容器路径里
CMD: 设置container启动时执行的操作,运行 Flask 应用并设置host为0.0.0.0

docker - compose. yml 파일 작성
docker - compose. yml 파일 은 모든 것 을 연결 합 니 다.이 는 응용 구성 (웹 서비스 와 데이터베이스), 사용 하 는 Docker 미 러, 미 러 간 연결, 용기 에 마 운 트 된 볼 륨, 서비스 열 린 포트 를 묘사 합 니 다.
다음은 제 GitHub 프로젝트 flask - v2ex 에 적 용 된 docker - compose. yml 파일 을 예 로 들 어 보 겠 습 니 다.
version: '2'

services:
  web:
    build: .
    container_name: flask_v2ex
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

compose 에서 두 개의 서비스 웹 과 redis 를 정의 합 니 다.
  • 웹 서비스
  • build: 현재 디 렉 터 리 의 Dockerfile build 미 러 사용
  • ports: 호스트 5000 포트 에서 용기 5000 포트
  • container_name: 용기 이름 지정
  • redis 서비스
  • image: Docker Hub 의 redis 미 러 사용

  • copose 를 사용 하여 Flask 응용 프로그램 을 구축 하고 실행 합 니 다.
    docker - compose up 을 실행 하기 전에 프로젝트 의 redis 연결 설정 을 수정 해 야 합 니 다.
    r = redis.Redis(host='localhost', port=6379, decode_responses=True)
    
    修改为:
    
    r = redis.Redis(host='redis', port=6379, decode_responses=True)
    

    flask - v2ex 프로젝트 의 루트 디 렉 터 리 에서 docker - compose up 명령 을 사용 합 니 다. 다음 과 같 습 니 다.
    $ docker-compose up
    
    Starting flask_v2ex         ... done
    Starting flask_v2ex_redis_1 ... done
    Attaching to flask_v2ex_redis_1, flask_v2ex
    redis_1  | 1:C 01 Jul 07:46:52.053 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis_1  | 1:C 01 Jul 07:46:52.053 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
    redis_1  | 1:C 01 Jul 07:46:52.053 # 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 01 Jul 07:46:52.064 * Running mode=standalone, port=6379.
    redis_1  | 1:M 01 Jul 07:46:52.064 # 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 01 Jul 07:46:52.064 # Server initialized
    redis_1  | 1:M 01 Jul 07:46:52.065 # 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 01 Jul 07:46:52.065 * DB loaded from disk: 0.000 seconds
    redis_1  | 1:M 01 Jul 07:46:52.065 * Ready to accept connections
    flask_v2ex |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    flask_v2ex |  * Restarting with stat
    flask_v2ex |  * Debugger is active!
    flask_v2ex |  * Debugger PIN: 742-073-002
    

    Docker 데 몬 에서 5000 포트 를 감청 하고 있 는 것 을 볼 수 있 습 니 다.통과 가능http://localhost:5000 Flask 응용 프로그램 에 접근 합 니 다.
    docker - compose 사용
  • docker - compose up - d: 배경 실행
  • docker - compose stop: 실행 중인 서 비 스 를 중단 합 니 다
  • docker - compose down: 모든 용 기 를 닫 고 삭제 합 니 다. 기본 데이터 볼 륨 유지
  • docker - compose ps: 현재 실행 중인 서비스 상태 와 관련 정 보 를 보 여 줍 니 다
  • $ docker-compose ps
           Name                     Command               State           Ports
    ------------------------------------------------------------------------------------
    flask_v2ex           /bin/sh -c python manage.p ...   Up      0.0.0.0:5000->5000/tcp
    flask_v2ex_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
    
  • docker - compose run: 일회 성 명령.예 를 들 어 웹 서비스의 환경 변 수 를 봅 니 다.
  • $ docker-compose run web env 
    
    PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=e4b6b17f39dc
    TERM=xterm
    LANG=C.UTF-8
    GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
    PYTHON_VERSION=3.5.4
    PYTHON_PIP_VERSION=9.0.1
    HOME=/root
    

    실행 중인 서 비 스 를 중단 하려 면 ctrl + c 또는 docker - compose stop 을 통 해 서 비 스 를 중단 할 수 있 습 니 다.
    레 퍼 런 스
    Docker 입문 부터 실천 까지 - 실전 Django Dockerfile 로 Docker 미 러 구축

    좋은 웹페이지 즐겨찾기