본문 바로가기

DevOps/Docker

(12)
Python WAS (Django, Wsgi, Nginx) 구축하기 - 로컬 0. 들어가며 docker와 django 배포 작업을 안한지 너무 오래되었고, 기억이 잘 안나서 이 참에 블로그로 정리해보려고 한다. Python으로 rest api 서비스를 오픈할 수 있지만 Django의 runserver는 단순히 테스트만을 위한 기능이기 때문에 운영 배포 목적으로 하는 서비스에서 사용하면 성능상 문제를 겪게 된다. Web Application은 Django를 사용할 것이며, 앞단에 Web Server인 Nginx를 리버스 프록시로 두고 Django와 Nginx를 Wsgi(Gunicorn)으로 연동하는 작업을 할 것이다. Gunicorn을 사용하는 이유는 uWSGI나 Gunicorn 등은 Nginx로 들어오는 HTTP Request를 파이썬이 이해할 수 있게 동시 통역하는 존재들이다...
[Docker] 도커의 데이터 관리 및 저장 (volume, mount) 1. Volume 볼륨 기본적으로 도커 컨테이너는 독립적인 저장소를 가지고 있다. 하나의 이미지 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨이 할당되고 컨테이너가 삭제되면 해당 볼륨 또한 삭제된다. 여기서 문제는 컨제이너 내부에 저장된 데이터는 컨테이너가 삭제되었을 경우 같이 삭제된다. 도커에서 돌아가는 애플리케이션이 컨테이너의 생명주기와 관계없이 데이터를 영속적으로 저장해야할 필요가 있다. 특히 여러 개의 도커 컨테이너가 하나의 저장 공간을 공유해서 데이터를 읽거나 써야한다. 도커에서 데이터의 영속성을 보장하기 위해서는 볼륨과 바인드 마운트를 이용해야한다. 도커 공식 문서에서 권장하는 방식으로 도커 엔진이 관리하는 도커 스토리지 디렉토리에 새 디렉토리를 생성하여 컨테이너 내부의 볼륨 데이터..
[Docker] ports (docker run -p)와 Dockerfile의 EXPOSE 차이점 1. ports (docker run -p) 도커 run 명령어로 도커 컨테이너를 실행시킬 때, -p 옵션으로 호스트의 운영체제 포트와 컨테이너 포트를 매핑시킬 수 있다. docker run -it -p 8000:8000 django 위 명령어의 의미는 호스트의 8000번 포트와 도커 컨테이너의 8000번 포트를 매핑된다는 뜻이다. 즉, 호스트 운영체제의 8000번 포트로 전달되는 정보들이 도커를 통해 컨테이너의 8000번 포트로 포워딩된다는 의미이다. 위의 이지미에서 이미지와 함께 보자면, 호스트OS 내부를 'WORLD INSIDE DOCKER'로 보시면 되고 외부 호스트를 'WORLD OUTSIDE DOCKER'로 보시면 된다. ports는 호스트 OS와 컨테이너의 포트를 바인딩 시켜준다. (port..
[Docker] 로컬에서 docker-compose를 이용한 Gunicorn 적용 (2) 앞서 적용한 django와 mysql 이후로 python manage.py runserver 로 서버를 구동하지 않고, gunicorn을 이용해서 서버를 구동시키려 한다. 1. gunicorn을 사용하기 위한 static 설정 static을 모두 복사하기 위해 아래의 코드를 터미널에 입력한다. python manage.py collectstatic​ 그 다음, 아래의 라이브러리를 설치한다. pip install whitenoise pip freeze > requirements.txt 라이브러리를 설치하였으면, settings.py 와 urls.py에서 static 옵션을 수정 및 추가한다. # config/settings.py . . STATICFILES_STORAGE = 'whitenoise.stora..
[Docker] 로컬 환경에서 Django와 MySQL을 docker-compose로 구동 (with. .env파일생성) (1) 본인이 공부하기 위해 작성한 것이므로 오류가 있을 수 있습니다. 1. .env 파일 생성 mange.py 파일이 있는 경로에서 .env 파일을 새로 생성한다. pip install django-environ # 설치​ 위의 라이브러리를 설치한 다음, settings.py를 수정해야한다. # config/settings.py import environ, os env = environ.Env( DEBUG=(bool, False) ) # 경로에 있는 .env 파일 연동 environ.Env.read_env( env_file=os.path.join(BASE_DIR, '.env') ) # 장고 스페셜 키를 .env 파일에서 가져오기 SECRET_KEY = env('SECRET_KEY')​ 위의 코드를 settin..
[Docker] Docker 이미지 종류 (with. Python) 들어가기 앞서.. 로컬에서 개발을 한 후에, 로컬 내에 도커를 사용하려고 했지만, Dockerfile을 작성할 때 slim으로만 작성하고 있었다. 문득 여러 이미지 종류가 있는데 왜 slim만 사용했을까 라는 의문을 가지기 시작해서 도커의 이미지 종류에 대해서 공부해보려고 한다. 개인적인 공부 목적으로 작성한 것이므로, 잘못 이해하는 부분이 있을 수 있습니다. 1. 이미지 종류 name:version name:version-stretch name:version-buster name:version-jessie name:version-slim name:verseion-alpine 1) name:version 가장 기본이 되는 이미지로 보통 사람들이 무엇을 사용해야할지 모르는 상황일 때 해당 이미지를 사용한다..
[Docker] GCP 에서 docker로 django 웹 서버 구동 이번에는 장고 프로젝트 내에서의 docker로 웹 서버를 구동시키지 않고, GCP 가상머신에서 maraidb와 django 웹 서버 구동을 시킬 것이다. 또한, Nginx를 사용하지 않을 것이다. 장고 개발 모드 컨테이너 생성 python:3이라는 이미지를 바탕으로 python__1 이라는 이름의 컨테이너를 생성한다. 시간대는 Asia/Seoul로 기준을 잡고, 포트는 8000번대 포트로 설정한다. ls /docker_projects 명령어로 django__1이라는 파일이 생성된 것을 확인할 수 있다. 내부 프로그램 업데이트 pip를 통해서 최신판으로 업데이트를 진행한다. # python__1 컨테이너 생성 docker run -d \ --name python__1 \ --restart unless-st..
[Docker] django 터미널에서 docker-compose를 이용하여 개발환경 구성하기 docker-compose를 이용하면 현재 개발중인 프로젝트 django 이미지와 mariadb 이미지 또는 nginx까지 합쳐서 구동시킬 수 있다. docker-compose.yml 파일 생성 및 작성 # docker-compose.yml version: "3.9" services: mariadbtest: image: mariadb:10.5 networks: - docker ports: - 3306:3306 volumes: - ${PWD}/database:/var/lib/mysql environment: MARIADB_ROOT_PASSWORD: 1234 MARIADB_DATABASE: django djangotest: build: context: . dockerfile: ./localbind.Docke..