Python 응용 프로그램 비활성화
개요
Python은 비교적 유행하는 프로그래밍 언어로 백엔드 구축부터 신경 네트워크 구축까지 광범위하게 응용된다.그러나 위에서 알 수 있듯이 프로젝트 간에Python 환경의 일치성을 유지하는 것은 고통스러운 일일 수 있다.
이것이 바로 Docker의 용무지이다.Docker는 응용 프로그램의 용기화를 허용합니다. 이것은 서비스와 응용 프로그램을 실행할 수 있는 독립적인 실례를 의미합니다.또한 Docker는 응용 프로그램과 서비스를 Docker Compose와 연결할 수 있게 하여 Python 응용 프로그램의 구축을 매우 편리하게 합니다.
본고에서 인용한 모든 코드는 이 Github repo 에서 나온 것입니다.이것은 특정 버전의 코드가 아직 생산될 준비가 되지 않았지만, Docker를 통해 모든 내용을 실행할 수 있는 실시간 응용 프로그램입니다.
Docker가 뭐예요?
도커는 도대체 뭐야?나는 위에서 간단명료하게 그것을 소개했다. 앞에서 언급한 바와 같이, 그것은 일종의 소프트웨어로 응용 프로그램과 서비스를 포장할 수 있다.여러 버전의 Python을 설치하거나 사용하지 않고 여러 가상 환경을 관리하지 않아도 되고, Docker가 각각의 독립된 환경을 사용하여 각각의 응용 프로그램을 구축할 수 있다는 장점이 있습니다.
이것은 우리가
python -m venv venv
및 DockerFile
파일을 설정하기만 하면 새 프로젝트를 구축할 때마다 실행할 필요가 없다는 것을 의미한다.이미지, 컨테이너 및 합성
멋있어, 지금 우리는 빠른vocab를 개술해야 해.
먼저 Docker 이미지입니다.Docker의 이미지는 기본적으로 응용 프로그램의 변경할 수 없는 스냅샷입니다.새 용기에서 프로그램을 시작하는 설명을 포함하고 다른 이미지로 구축할 수 있습니다.불변성은 매우 중요하다. 왜냐하면 우리는 같은 응용 프로그램의 여러 버전을 가지고 이미지 버전을 충돌시키지 않기 때문이다.
두 번째는 Docker 컨테이너입니다.Docker 컨테이너는 이미지 기반 어플리케이션의 인스턴스입니다.위의 스냅샷 복제와 유사하여 공유할 수 없습니다.그러나 우리는 필요에 따라 임의의 특정 이미지의 Docker 컨테이너를 시작할 수 있습니다. 이것은 데이터베이스와 유사한 서비스에 매우 편리합니다!
Docker 설치
아직 없으면 설치Docker Desktop가 필요합니다.만약 당신이 그것을 가지고 그것을 어떻게 통과하는지 알고 있다면, 당신은 next section 으로 뛰어갈 수 있다.
Docker CLI를 사용하여 실행할 수 있는 명령도 간략하게 설명합니다.
docker image ls
docker-compose.yml
컴퓨터에서 현재 사용 가능한 모든 이미지가 나열됩니다. docker container ls
docker image ls
현재 시작/활성 컨테이너가 모두 나열됩니다. docker container ls -a
docker container ls
모든 컨테이너가 시작되었든 활성 상태였든 나열됩니다.docker container ls -a
표지는 -a
의 줄임말이다. docker container rm <first 3 symbols of the container ID or container name> [...other containers you want to remove]
--all
나열된 컨테이너를 제거합니다.contaienr ID/용기 이름의 세 번째 기호가 필요하며, 용기를 삭제하기 전에 용기가 실행될 수 없습니다. docker [COMMAND] --help
도움말 플래그는 모든 명령과 함께 사용할 수 있는 유용합니다.이 명령을 사용하는 방법에 대한 일반적인 설명과 옵션 목록을 제공합니다.Docker Env 설정
그렇긴 하지만 Docker env를 만들려면 뭔가가 필요합니다.
docker container rm
의 용도이다.Dockerfile
는 응용 프로그램을 설정하고 실행하는 데 필요한 명령행 매개 변수를 정의하는 파일입니다.영어에서는 응용 프로그램을 설치하고 실행하는 데 필요한 최소한의 한도를 지정하는 파일입니다.다음은
Dockerfile
의 예입니다.FROM python:3.8
WORKDIR /src
COPY ./requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["flask", "run", "--host", "0.0.0.0"]
Dockerfile에 뭐가 있어요.
따라서 모든 것이 무엇인지 신속하게 요약해 보십시오.
첫 번째 줄은 응용 프로그램의 이미지를Python 3.8 기반 이미지로 지정합니다.
Dockerfile
는 3.8 표시두 번째 줄은 용기의 작업 디렉터리를 설정합니다.이것은 매우 중요하다. 왜냐하면 이것은 우리 응용 프로그램의 파일이 있는 곳이기 때문이다.
세 번째 줄은
python:3.8
파일을 우리의 작업 디렉터리에 복사합니다.우리는 한 번에 모든 내용을 복제할 수 있지만, 실제로는 중요한 원인이 하나 있다. 우리는 이렇게 하지 않는다. 이것은 아래에서 설명할 것이다.네 번째 줄은 우리가 열거한 모든 명령을 실행합니다.파이썬 패키지는
requirements.txt
파일에서 설치됩니다.COPY . ./my-subdirectory
여섯 번째 행위는 우리가 컨테이너에 접근하는 포트를 제공했다.그래서 여기는 5000포트입니다.마지막 줄은 용기가 시작될 때 실행되는 기본 명령을 설명합니다.명령의 모든 부분은 하나의 그룹에 있습니다.
Docker 작성
멋있어요. 그럼 데이터베이스는요?물론 우리는 로컬에서 데이터베이스를 실행할 수 있지만, Docker에도 데이터베이스 이미지가 있기 때문에, 우리는 실제로 데이터베이스를 포함하는 용기를 임의로 실행할 수 있다.
그러나 큰 문제가 하나 있다. 우리는 응용 프로그램이 의존하는 모든 서비스를 수동으로 만들고 시작하고 싶지 않다.물론 우리가 데이터베이스를 하나 가지고 있으면 되지만, 우리는 두 개의 다른 데이터베이스와 다른 데이터베이스를 필요로 하는 응용 프로그램/서비스가 있습니까?
이것이 바로
requirements.txt
의 의도이다.응용 프로그램이 의존하는 서비스 용기를 수동으로 시작하고 만들지 않고 requirements.txt
파일을 사용하여 대부분의 것을 자동화할 수 있습니다.다음 예제 링크 보기
package.json
file.유감스럽게도 이것은 Docker Compose 파일을 만드는 완전한 안내서가 아니지만, 나는 일부 내용을 개괄할 것이다.
따라서 파일에는 다음과 같은 내용이 있습니다.
version: '3.5' # Docker compose version
services:
app:
build:
context: .
# Binding the current working directory to the new container
volumes:
- .:/
# The working directory in the app Dockerfile
working_dir: ''
command: ''
links:
- app-redis
# ENV configuration
env_file: .env
# Additional app secrets
environment:
APP_TOKEN: /run/secrets/app_token
secrets:
- app_token
ports:
- '5000:5000'
app-redis:
image: redis:5
ports:
- '6379:6379'
# App secret registration
secrets:
app_token:
file: app_token.txt
일반적으로 문서 작성에는 다음과 같은 세 가지 주요 부분이 있습니다.컨테이너를 다른 서비스에 연결(Redis)
docker-compose
속성은 docker-compose.yml
서비스가 Python 응용 프로그램의 의존항임을 명확하게 나타낸다.이것은 우리가 Flask 응용 프로그램에서 데이터베이스에 접근하는 방식이 정상적인 상황과 다르다는 것을 의미하지만, 우리는 이 점을 할 것이다.저희 Python 응용 프로그램은 업데이트가 필요합니다.
현재 우리는 이미
docker-compose.yml
개의 파일을 가지고 있으며, 우리가 상상하는 것처럼 우리의 Redis 실례에 접근할 수 없습니다.따라서 Python 응용 프로그램이 Redis 인스턴스에 액세스하도록 하려면 links
을 사용하지 않고 서비스 이름을 사용하도록 업데이트해야 합니다.# Fetch.py
# Std lib imports
import os
import json
from pathlib import Path
## Lib Imports
import redis
import requests
from dotenv import load_dotenv
# Global Module Var
isDocker = os.getenv('IS_DOCKER')
cacheHost = 'app-redis'
# ...Extra code
red_cache = redis.Redis(host = cacheHost, port = 6379)
# ...Rest of the module's implementation
매우 빠르고 간단합니다. 응용 프로그램 디렉터리에서 app-redis
을 실행하고 Flask 응용 프로그램을 시작할 수 있습니다.결론
따라서 Python 응용 프로그램인 Dockerize를 신속하게 처리하는 방법을 정리했습니다.여기에는 다음이 포함됩니다.
docker-compose.yml
을 만듭니다.Reference
이 문제에 관하여(Python 응용 프로그램 비활성화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wilsonj806/dockerizing-a-python-app-2ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)