일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- table cell size
- Dependency Injection
- Django column 값 가져오기
- html cell
- Django 특정 값 가져오기
- table tag
- DI
- html
- Dependency
- Spring
- Django
- html cell size
- Today
- Total
emluy 개발 일기
Trip surfer - # 0 Docker Django PostgreSQL 본문
<시작하기 전>
*왜 docker를 사용할까?
- django 환경을 docker img로 만드는 이유 : 우리가 django project를 할 때 가상환경 만들어주고 접속하고 django설치하고 하는것들을 docker img에 넣어주면 img실행하는 것만으로도 자동으로 우리가 해 줄 일을 해주니까 편리하다.
*Trip surfer에서는 docker로 뭘 해줘야할까?
- django 환경을 담은 docker img를 생성해주고
- django docker img와 postgresql docker img를 각각 실행하여 컨테이너로 만든 후
- 컨테이너가 2개 이상이므로 한꺼번에 두개의 컨테이너를 실행해야 한다. ( 도커 컴포즈 이용해야 함 )
*도커와 도커 컴포즈는 뭐가 다른가?
- 둘다 도커 파일을 만들어주고 빌드하고 컨테이너를 실행하는 과정은 같다.
- 그러나 도커로 할 경우, postgreSQL 컨테이너를 먼저 실행해주고 django 환경 컨테이너를 실행해줘야 db 컨테이너를 django환경 컨테이너가 찾아서 연결할 수 있다. (왜냐면 컨테이너는 실행 직후 외부의 상황과 완벽 격리되기때문에 다른 컨테이너가 실행되고 있는지 여부를 알지 못한다. 따라서 postgreSQL컨테이너를 먼저 실행해주면서 db라는 이름을 붙이고 그 후 django 컨테이너가 db라는 이름으로 접근하게 해서 두 컨테이너를 연결한다.)
- 따라서 도커 컴포즈를 이용해서 여럿을 함께 띄우는 것이다. 컨테이너 간 의존성을 docker-compose.yml 파일에 적어 실행한다. ( version 3이후 부터는 link 옵션이 없어도 서로 한 네트워크에서 자동으로 연결된다.)
- dockerfile vs dockerfile-dev: 서버 구성 문서화한 것
- docker build vs docker-compose build : 도커 이미지 만들기 ( 클래스 선언을 애플리케이션에 로드)
- Docker run 의 옵션들 vs docker-compose.yml : img에 붙이는 것들 ( 컨테이너(인스턴스)의 변수들 )
- docker run vs docker-compose up : 컨테이너 생성 및 실행 (인스턴스 생성)
==============================================================================
0. 미리 해야할 것
*순서
0-1. django project 생성
0-2. Docker GUI사용 위한 애플리케이션 설치
subicura.com/2017/01/19/docker-guide-for-beginners-1.html
1. root에 dockerfile 만들기
2. root에 docker-compose.yml 만들기
2-1. web에 대한 컨테이너만 만들기
#docker-compose.yml
- 1 : Docker-compose 버전 3 사용
- 4 : web이라는 컨테이너 만들 것이다 ( 사용자 지정 )
- 5 : 루트에 존재하는 dockerfile 을 build 할 것이다.
- 6 : 컨테이너 완성 후 실행하는 커맨드
- 7 : 도커 실행 후 일어난 웹의 정보들을 루트아래에 있는 모든 파일에 각각 다시 저장되게 한다.
- 8 : ":"를 기준으로 오른쪽은 도커에 존재하는 디렉터리, 왼쪽은 로컬저장소의 디렉터리 의미. 오른쪽에서 왼쪽으로 데이터 이동
. ( django 프로젝트의 루트) : web ( 도커안에 존재하는 폴더 , 사용자 지정 아님)
- 9 : docker의 port와 로컬 port 연결
2-2. 컨테이너 실행
$ docker-compose up -d
2-3. error 없는지 확인
localhost:8000 접속 후 홈페이지 뜨는지 확인
2-4. PostgreSQL 연결해야하므로 지금까지 실행했던 컨테이너 종료
$ docker-compose down
===========PostgreSQL 연결 전 web 컨테이너 오류 없이 작동하는지 확인============
<PostgreSQL 컨테이너 만들고 web 컨테이너와 연결>
3. docker-compose.yml 수정 : db 관련 코드 추가
- 14 : db 라는 이름으로 컨테이너 생성
- 15 : web은 우리 프로젝트에 맞게 만들어진 dockerfile을 build해서 img로 만들었지만 postgres는 만들어진 공식적인 img가 있으므로 그것을 가져와서 사용함
- 16 : web에서 했던 것과 마찬가지로 컨테이너를 종료하면 data도 함께 삭제되기 때문에 docker 실행하면서 docker위에서 postgresql에 저장된 data를 로컬 저장소에도 저장해주어 데이터를 잃지 않도록 함
- 17 : 루트에 docker/data라는 폴더를 만들어서 (사용자지정) docker에 존재하는 폴더인 /var/lib/postgresql/data 폴더에 있는 데이터를 가져와서 저장한다.
18 : db 컨테이너에 적용할 옵션들 (공식문서 참고)
4. django project의 settings.py 수정 : 기본 db인 sqlite 말고 postgreSQL로 default 바꿔줌
=> 3번에서 작성했던 db의 environment에 적은 name, user, password, host와 같게 적어줘야함
5. psycopg2 설치 (doker-compose up -d 상태에서 해야함: docker 컨테이너 실행상태에서)
5-1. Docker 컨테이너에서 설치
$ docker-compose exec web pip install psycopg2
=> error log 확인 : $docker-compose logs
5-2. 내 로컬에도 설치
$ pip3 install psycopg2
6. psycopg2-binary 설치
$ docker-compose exec web pip install psycopg2-binary==2.8.5
7. 이전 컨테이너가 실행중이라면 이전 컨테이너 종료 시킴
$ docker-compose down
8. 다시 build 해서 psycopg2가 설치된 컨테이너 실행
$ docker-compose up -d --build
9. 새로운 db인 postgreSQL 연결 했으니 migrate 해주고 createsuperuser 해줘야함.
9-1. migrate
$ docker-compose exec web python manage.py migrate
9-2. createsuperuser
$ docker-compose exec web python manage.py createsuperuser
===============참고자료========================
가장 잘 정리된 django와 docker-compose 연결하는 방법
djangoforprofessionals.com/postgresql/
// docker와 postgres 공식문서 : 사용가능한 postgres 버전 확인 & postgres 컨테이너 실행시 옵션
hub.docker.com/_/postgres?tab=description
==============================그외 참고=================================
//local에서 postgreSQL 이용
dongsik93.github.io/til/2019/10/13/til-django-postgresql/
docker-compose 작성 순서
learndjango.com/tutorials/django-docker-and-postgresql-tutorial
'웹 개발 > project' 카테고리의 다른 글
python - Crawling 의류 데이터 크롤링 (0) | 2021.07.03 |
---|---|
Trip surfer - #1 Geodjango, PostGIS, googlemap 중 Trip surfer 구현 시 필요한 것 고르기 (0) | 2020.10.30 |
특허관점기업분석 - ajax로클릭 시 새로고침 안하고 DB에서 값 가져온 후 띄워주기 (0) | 2020.06.18 |