도커와 쿠버네티스 5: 도커를 활용한 django 실습
추가 실습 환경 구촉
pyenv 설치
django를 활용하기 위해 pyenv를 설치해야 되는데 이는 파이썬 가상 환경을 관리할 수 있게 해주는 소프트웨어이다
- 먼저 아래와 같은 프로그램을 설치해야 된다
- 다음은 아래와 같이 pyenv를 설치할 수 있다
- 홈 디렉터리에서 아래 명령어를 입력하여 .bashrc 파일이 있는지 확인한다
- 오호 있다
vim .bashrc
명령어를 입력하여 .bashrc 파일을 아래와 같이 수정한다아래 명령어를 이용하여 셸을 재시작
- 터미널에서
pyenv
를 입력하면 pyenv가 성공적으로 설치되었는지 확인할 수 있다
pyenv를 활용한 파이썬 가상 환경 구축
- 아래와 같은 명령어를 입력하면 설치 가능한 파이썬 버전을 확인한다.
- 교재와 같이 3.11.6 버전을 설치하겠다
- 3.11.6 버전을 잘 설치되었는지 확인
pyenv virtualenv
명령어를 활용하여 py3_11_6이라는 가상 환경을 만들고 목록 확인- 아래와 같이 가상 환경을 실행한다
- 아래 명령어를 입력하여 필요한 라이브러리를 설치한다
1 2 3
pip install django pip install gunicorn pip install psycopg2-binary
- django: 웹 프레임워크
- gunicorn: 웹 서버와 통신하기 위한 라이브러리
- PostgreSQL을 활용하기 위해 사용하는 라이브러리
- 아래와 같이 각자 라이브러리의 버전 확인
tree 설치
- 리눅스 시스템에서 파일 시스템 구조를 시각적으로 쉽게 확인할 수 있는 tree를 설치한다
- 설치 후에
tree [경로]
를 입력하면 해당 경로를 포함한 하위 디렉터리 및 파일 구조를 확인할 수 있다
django를 실행하기 위한 네트워크 설정
- Tools의 Properties에 들어가고, 여기서 NAT Networks 선택하고 아래와 같이 포트포워딩을 설정한다
- 호스트 포트의 8000변과 ubuntu-server01의 IP인 10.0.2.4의 8000번 포트를 연결하고, 호스트 포트의 80번 포트를 ubuntu-server01의 80번 포트를 연결시킨다
- 이 과정을 통해서 호스트에서 가상 머신으로 접속이 가능하다
YAML 기초
YAML의 개념
- YAML Ain’t Markup Language의 졸임말인데 도커 컴포즈를 사용할 때 YAML 파일을 활용며, 쿠버네티스에서도 YAML 파일을 사용한다
pyyaml 설치
- 먼저 pyyaml 라이브러리를 설치한다
- yaml 라이브러리를 잘 설치되었는지 확인
YAML 문법
- 먼저 실습 디렉터리를 생성하겠다
vim
명령어를 사용해서 yaml_practice.yml 파일을 생성하여 수정한다- YAML 파일은 기본적으로
{key:value}
구조를 사용하는 파이썬의 딕셔너리 자료형과 비슷한다
- YAML 파일은 기본적으로
- 아래와 같이 생성한 YAML 파일을 분석한다
{'name':'nginx', 'image': 'nginx:latest'}
와 같이 name과 image에 대한 데이터가 같은 딕셔너리로 구성되는데, 이를 가능하게 하는 것이 yaml 파일에서의 ‘-‘이다- ’-‘로 시작하는 줄은 한 요소의 시작헤 해당하면 ‘-‘로 시작하지 않는 줄은 ‘-‘로 시작하는 줄의 다음 요소호 추가된다
도커를 활용한 django 실행
도커 호스트에 django 프로젝트 생성
- ch05 폴더에서 ex02라는 디렉터리를 생성하여 들어간다
- 새로운 django 프로젝트를 생성하고 파일 목록 확인
vim settings.py
를 입력하고 settings.py를 아래와 같이 수정한다- django 프로젝트를 실행하기 전에 데이터베이스 변경사항을 적용한다
runserver
명령어를 이용하여 django 프로젝트 실행- 0.0.0.0:8000: 8000번 포트를 활용하겠다는 뜻
- 웹 브라우저 주소창에 127.0.0.1:8000을 입력하면 접속이 잘 되는 것 확인
django 이미지 빌드
requirements.txt 파일 작성
Dockerfile 파일 작성
- 도커 이미지 파일을 생성하기 위해 필요한 명령어를 모아 놓은 파일을 Dockerfile이라고 함
vim Dockerfile
명령어를 이용해서 Dockerfile을 생성하는데 아래와 같이 작성한다FROM
: 베이스 이미지WORKDIR
: 리눅스의 cd 명령어롸 비슷하다COPY
호스트에 존재하는 파일을 도커 이미지의 파일 시스템 경로로 복사하는 명령어RUN
: 이미지 빌드 시 실행하고 싶은 명령어를 실행CMD
: 서비스(컨테이너)를 실행EXPOSE
: 8000번 포트를 연다
- ex03 파일 목록 확인
이미지 빌드
django 컨테이너 실행
Nginx, django 연동 후 실행
Nginx 컨테이너 실행
디렉터리 정리
이미지 빌드
컨테이너 실행
gunicorn을 통한 연동
- django와 Nginx를 연동하기 위해서는 중간에는 gunicorn이 필요한다 → Nginx와 django를 연결해주는 역할을 수행한다고 생각하면 됨
django 이미지 빌드
디렉터리 정리
django 이미지 빌드
Nginx 이미지 빌드
Nginx 디렉터리 정리
- 아까 생성한 MyNginx02 폴더에 들어간다
- MyNginx02에서 default.conf라는 파일을 생성하고 아래와 같이 작성한다
- djangotest: django를 이용해 생성하게 될 컨테이너 이름이다
- Nginx는 80번 포트로 받은 요청을 djangotest 컨테이너의 8000번 포트로 전송하겠다는 뜻
- djangotest: django를 이용해 생성하게 될 컨테이너 이름이다
- Dockerfile를 아래와 같이 수정한다
Nginx 이미지 빌드
django와 Nginx 연동 후 컨테이너 실행
컨테이너 실행
호스트의 웹 브라우저에서 주소창에 127.0.0.1:80을 입력하면 포트포워딩 기능을 통해 10.0.2.4:80으로 트래픽이 전달됨 → nginxtest 컨테이너를 통과한 후 djangotest 컨테이너에 접속하게 되어 django 서비스를 활용할 수 있게 됨
- mynetwork02를 활용한 djangotest 컨테이너를 생성하여 실행해보겠다
- 마찬가지로 nginxtest 컨테이너를 실행해보겠다
- 127.0.0.1:80로 들어가보면 아래와 같이 나타나게 된다
Nginx, django, PosgreSQL 컨테이너 연동
PostgreSQL 컨테이너 실행
디렉터리 정리
Dockerfile 작성
이미지 빌드
컨테이너 실행
django, Nginx, PostgreSQL 연동
디렉터리 정리
django 이미지 빌드
Nginx 이미지 빌드
django, Nginx, PostgreSQL 연동 후 컨테이너 실행
호스트에서 웹 브라우저를 실행한 후 127.0.0.1:80에 접속하면 포트포워딩을 통해 10.0.2.4:80으로 트래픽이 전달됨 → nginxtest 컨테이너를 거쳐 djangotest 컨테이너에 접속할 수 있으며, djangotest 컨테이너는 postgrestest 컨테이너를 통해 데이터베이스를 활용하게 됨
- 먼저 네트워크를 생성해야 된다
- PostgreSQL 컨테이너를 실행한다
- 이전 실습에 생성한 djangotest와 nginxtest 컨테이너를 삭제하고 새로운 걸로 실행한다
- nginxtest 컨테이너 실행
- djangotest 컨테이너 내부에 들어가 django와 PostgreSQL이 연결되었는지 확인
Nginx, django와 로컬 PostgreSQL 연동
PostgreSQL 로컬 설치
- 리포지토리 설정 파일을 생성한다
- 리포지토리 인증키를 불러온다
- 우분투 패키지 리스트를 업데이트한다
- 최종적으로 PostgreSQL을 설치한다
- PostgreSQL이 실행 중인지 확인
- PostgreSQL에 postgres 사용자로 접속한다
- 데이터베이스 목록 확인
- 비밀번호를 설정한다
- /etc/postgresql/16/main에 있는 pg_hba.conf 파일을 아래와 같이 수정한다
- postgresql.conf를 아래와 같이 수정한다
- PostgreSQL을 재시작하고 상태를 확인한다
django 이미지 빌드
- 디렉터리를 아래와 같이 정리한다
- django와 Nginx는 컨테이너 형태로 실행되는 반면 PostgreSQL은 호스트 (가상머신의 로컬_에 설치되어 있기 때문에
ifconfig
명령어를 이용하여 docker0의 IP주소를 확인한다 → django와 PostgreSQL이 서로 통신하려면 docker0을 이용해야 한다 - myapp/myapp에 들어가 settings.py를 아래와 같이 수정한다
- requirements.txt와 Dockerfile를 수정할 필요가 없어서 바로 이미지를 빌드한다
Nginx 이미지 빌드
django, Nginx, PostgreSQL 연동
- 컨테이너를 실행 후 연동한다
- 먼저 네트워크를 생성한다
- djangotest와 nginxtest 컨테이너를 실행한다
- django가 잘 실행하고 있는지 확인
- djangotest 내부에 들어가고 데이터베이스 연결 상태를 확인한다
도커 컴포즈를 활용한 컨테이너 실행
도커 컴포즈의 개념
- 도커 컴포즈: 도커를 활용하여 다수의 컨테이너 형태의 애플리케이션을 실행할 수 있는 도구
- 실행하고자 하는 애플리케이션의 설정 내용들을 YAML 파일로 작성하는 방법으로 고커 컴포즈를 활용할 수 있다
도커 컴포즈 설치
실습 디렉터리 구성
docker-compose.yml 파일 작성
빌드 및 실행
추가 실습
This post is licensed under CC BY 4.0 by the author.