Post

도커와 쿠버네티스 5: 도커를 활용한 django 실습

추가 실습 환경 구촉

pyenv 설치

django를 활용하기 위해 pyenv를 설치해야 되는데 이는 파이썬 가상 환경을 관리할 수 있게 해주는 소프트웨어이다

  • 먼저 아래와 같은 프로그램을 설치해야 된다 photo 1
  • 다음은 아래와 같이 pyenv를 설치할 수 있다 photo 2
  • 홈 디렉터리에서 아래 명령어를 입력하여 .bashrc 파일이 있는지 확인한다 photo 3
    • 오호 있다
  • vim .bashrc 명령어를 입력하여 .bashrc 파일을 아래와 같이 수정한다 photo 4
  • 아래 명령어를 이용하여 셸을 재시작

    photo 5

  • 터미널에서 pyenv를 입력하면 pyenv가 성공적으로 설치되었는지 확인할 수 있다 photo 6

pyenv를 활용한 파이썬 가상 환경 구축

  • 아래와 같은 명령어를 입력하면 설치 가능한 파이썬 버전을 확인한다. photo 7
  • 교재와 같이 3.11.6 버전을 설치하겠다 photo 8
  • 3.11.6 버전을 잘 설치되었는지 확인 photo 9
  • pyenv virtualenv 명령어를 활용하여 py3_11_6이라는 가상 환경을 만들고 목록 확인 photo 10
  • 아래와 같이 가상 환경을 실행한다 photo 11
  • 아래 명령어를 입력하여 필요한 라이브러리를 설치한다
    1
    2
    3
    
    pip install django
    pip install gunicorn
    pip install psycopg2-binary
    
    • django: 웹 프레임워크
    • gunicorn: 웹 서버와 통신하기 위한 라이브러리
    • PostgreSQL을 활용하기 위해 사용하는 라이브러리
  • 아래와 같이 각자 라이브러리의 버전 확인 photo 12

tree 설치

  • 리눅스 시스템에서 파일 시스템 구조를 시각적으로 쉽게 확인할 수 있는 tree를 설치한다 photo 13
  • 설치 후에 tree [경로]를 입력하면 해당 경로를 포함한 하위 디렉터리 및 파일 구조를 확인할 수 있다 photo 14

django를 실행하기 위한 네트워크 설정

  • Tools의 Properties에 들어가고, 여기서 NAT Networks 선택하고 아래와 같이 포트포워딩을 설정한다 photo 15
    • 호스트 포트의 8000변과 ubuntu-server01의 IP인 10.0.2.4의 8000번 포트를 연결하고, 호스트 포트의 80번 포트를 ubuntu-server01의 80번 포트를 연결시킨다
    • 이 과정을 통해서 호스트에서 가상 머신으로 접속이 가능하다

YAML 기초

YAML의 개념

  • YAML Ain’t Markup Language의 졸임말인데 도커 컴포즈를 사용할 때 YAML 파일을 활용며, 쿠버네티스에서도 YAML 파일을 사용한다

    pyyaml 설치

  • 먼저 pyyaml 라이브러리를 설치한다 photo 16
  • yaml 라이브러리를 잘 설치되었는지 확인 photo 17

YAML 문법

  • 먼저 실습 디렉터리를 생성하겠다 photo 18
  • vim 명령어를 사용해서 yaml_practice.yml 파일을 생성하여 수정한다 photo 19
    • YAML 파일은 기본적으로 {key:value} 구조를 사용하는 파이썬의 딕셔너리 자료형과 비슷한다
  • 아래와 같이 생성한 YAML 파일을 분석한다 photo 20
  • {'name':'nginx', 'image': 'nginx:latest'}와 같이 name과 image에 대한 데이터가 같은 딕셔너리로 구성되는데, 이를 가능하게 하는 것이 yaml 파일에서의 ‘-‘이다
    • ’-‘로 시작하는 줄은 한 요소의 시작헤 해당하면 ‘-‘로 시작하지 않는 줄은 ‘-‘로 시작하는 줄의 다음 요소호 추가된다

도커를 활용한 django 실행

도커 호스트에 django 프로젝트 생성

  • ch05 폴더에서 ex02라는 디렉터리를 생성하여 들어간다 photo 21
  • 새로운 django 프로젝트를 생성하고 파일 목록 확인 photo 22
  • vim settings.py를 입력하고 settings.py를 아래와 같이 수정한다 photo 23
  • django 프로젝트를 실행하기 전에 데이터베이스 변경사항을 적용한다 photo 24
  • runserver 명령어를 이용하여 django 프로젝트 실행 photo 25
    • 0.0.0.0:8000: 8000번 포트를 활용하겠다는 뜻
  • 웹 브라우저 주소창에 127.0.0.1:8000을 입력하면 접속이 잘 되는 것 확인 photo 26

django 이미지 빌드

  • django 이미지 빌드 과정
    • 디렉터리 정리 → requirements.txt 파일 작성 → Dockerfile 파일 작성 → 이미지 빌드

      디렉터리 정리

  • ch05 폴더에서 ex02를 ex03라는 폴더로 복사고 파일 목록을 확인한다 photo 27

requirements.txt 파일 작성

  • requirements.txt 파일을 만들고 django 버전을 추가한다 photo 28

Dockerfile 파일 작성

  • 도커 이미지 파일을 생성하기 위해 필요한 명령어를 모아 놓은 파일을 Dockerfile이라고 함
  • vim Dockerfile 명령어를 이용해서 Dockerfile을 생성하는데 아래와 같이 작성한다 photo 29
    • FROM: 베이스 이미지
    • WORKDIR: 리눅스의 cd 명령어롸 비슷하다
    • COPY 호스트에 존재하는 파일을 도커 이미지의 파일 시스템 경로로 복사하는 명령어
    • RUN: 이미지 빌드 시 실행하고 싶은 명령어를 실행
    • CMD: 서비스(컨테이너)를 실행
    • EXPOSE: 8000번 포트를 연다
  • ex03 파일 목록 확인 photo 30

이미지 빌드

  • 도커 클라이언트에서 아래와 같은 명령어를 도커 데몬에 전달하면 django 이미지를 생성한다 photo 31
  • 이미지 생성되었는지 확인 photo 32

django 컨테이너 실행

  • -d 옵션을 이용하여 컨테이너를 백그라운드로 실행하고 -p <도커 호스트 포트>:<컨테이너 포트> 옵션은 포트토워딩 옵션이다 photo 33
  • django가 잘 실행되는지 확인 photo 34

Nginx, django 연동 후 실행

Nginx 컨테이너 실행

디렉터리 정리

  • ch05 폴더에서 ex04라는 폴더를 생성하고 들어간다 photo 35
  • 아래와 같은 Dockerfile을 생성하고 작성한다

    photo 36

이미지 빌드

  • 이전 실습과 비슷하게 docker image build 명령어를 이용하여 이미지를 빌드하겠다 photo 37
  • 도커 이미지 목록 확인 photo 38

컨테이너 실행

  • 도커 컨테이너를 실행하고 실행중인 컨테이너 목록 확인 photo 39
  • Nginx가 잘 실행되는지 확인 photo 40
  • Nginx 내부 설정 파일 확인 photo 41

gunicorn을 통한 연동

  • django와 Nginx를 연동하기 위해서는 중간에는 gunicorn이 필요한다 → Nginx와 django를 연결해주는 역할을 수행한다고 생각하면 됨

django 이미지 빌드

디렉터리 정리

  • 디렉터리를 아래와 같이 정리한다 photo 42
  • ex05 디렉터리에 들어가고 requirements.txt를 아래와 같이 수정한다 photo 43
  • 그리고 Dockerfile도 아래와 같이 수정한다 photo 44

django 이미지 빌드

  • 아래와 같이 이미지 빌드한다 photo 45
  • 이미지 목록 확인 photo 46

Nginx 이미지 빌드

Nginx 디렉터리 정리

  • 아까 생성한 MyNginx02 폴더에 들어간다 photo 47
  • MyNginx02에서 default.conf라는 파일을 생성하고 아래와 같이 작성한다 photo 48
    • djangotest: django를 이용해 생성하게 될 컨테이너 이름이다
      • Nginx는 80번 포트로 받은 요청을 djangotest 컨테이너의 8000번 포트로 전송하겠다는 뜻
  • Dockerfile를 아래와 같이 수정한다 photo 49

Nginx 이미지 빌드

  • 이전 마찬가지로 docker image build 명령어를 통해서 Nginx 이미지를 빌드하겠다 photo 50

django와 Nginx 연동 후 컨테이너 실행

컨테이너 실행

  • 먼저 도커 네트워크를 생성해야 된다고 한다 photo 51

  • 호스트의 웹 브라우저에서 주소창에 127.0.0.1:80을 입력하면 포트포워딩 기능을 통해 10.0.2.4:80으로 트래픽이 전달됨 → nginxtest 컨테이너를 통과한 후 djangotest 컨테이너에 접속하게 되어 django 서비스를 활용할 수 있게 됨

  • mynetwork02를 활용한 djangotest 컨테이너를 생성하여 실행해보겠다 photo 52
  • 마찬가지로 nginxtest 컨테이너를 실행해보겠다 photo 53
  • 127.0.0.1:80로 들어가보면 아래와 같이 나타나게 된다 photo 54

Nginx, django, PosgreSQL 컨테이너 연동

PostgreSQL 컨테이너 실행

디렉터리 정리

  • ex06라는 폴더를 생성하고 들어간다 photo 55

Dockerfile 작성

  • Dockerfile를 아래와 같이 작성한다 photo 56

이미지 빌드

  • 아래와 같아 이미지를 빌드한다 photo 57

컨테이너 실행

  • 먼저 도커 볼륨을 생성해야 된다 photo 58
  • 다음은 아래와 같이 컨테이너를 실행해보겠다 photo 59
    • -e 옵션을 이용하여 환경변수를 수정한다

django, Nginx, PostgreSQL 연동

디렉터리 정리

  • 아래와 같이 정리한다 photo 60

django 이미지 빌드

  • myapp 폴더에 있는 myapp폴더에 들어가고 settings.py를 아래와 같이 수정한다 photo 61
  • 그리고 myDjango03에 있는 requirements.txt를 아래와 같이 수정한다 photo 62

  • Dockerfile에 추가할 내용을 없어서 따로 수정하지 않았다
  • 아래와 같이 빌드한다 photo 63

Nginx 이미지 빌드

  • 수정 없이 빌드 photo 64

django, Nginx, PostgreSQL 연동 후 컨테이너 실행

호스트에서 웹 브라우저를 실행한 후 127.0.0.1:80에 접속하면 포트포워딩을 통해 10.0.2.4:80으로 트래픽이 전달됨 → nginxtest 컨테이너를 거쳐 djangotest 컨테이너에 접속할 수 있으며, djangotest 컨테이너는 postgrestest 컨테이너를 통해 데이터베이스를 활용하게 됨

  • 먼저 네트워크를 생성해야 된다 photo 65
  • PostgreSQL 컨테이너를 실행한다 photo 66
  • 이전 실습에 생성한 djangotest와 nginxtest 컨테이너를 삭제하고 새로운 걸로 실행한다 photo 67
  • nginxtest 컨테이너 실행 photo 68
  • django가 잘 실행하는 걸 확인 photo 69

  • djangotest 컨테이너 내부에 들어가 django와 PostgreSQL이 연결되었는지 확인 photo 70

Nginx, django와 로컬 PostgreSQL 연동

PostgreSQL 로컬 설치

  • 리포지토리 설정 파일을 생성한다 photo 71
  • 리포지토리 인증키를 불러온다 photo 72
  • 우분투 패키지 리스트를 업데이트한다 photo 73
  • 최종적으로 PostgreSQL을 설치한다 photo 74
  • PostgreSQL이 실행 중인지 확인 photo 75
  • PostgreSQL에 postgres 사용자로 접속한다 photo 76
  • 데이터베이스 목록 확인 photo 77
  • 비밀번호를 설정한다 photo 78
  • /etc/postgresql/16/main에 있는 pg_hba.conf 파일을 아래와 같이 수정한다 photo 79
  • postgresql.conf를 아래와 같이 수정한다 photo 80
  • PostgreSQL을 재시작하고 상태를 확인한다 photo 81

django 이미지 빌드

  • 디렉터리를 아래와 같이 정리한다 photo 82
  • django와 Nginx는 컨테이너 형태로 실행되는 반면 PostgreSQL은 호스트 (가상머신의 로컬_에 설치되어 있기 때문에 ifconfig 명령어를 이용하여 docker0의 IP주소를 확인한다 → django와 PostgreSQL이 서로 통신하려면 docker0을 이용해야 한다photo 83
  • myapp/myapp에 들어가 settings.py를 아래와 같이 수정한다 photo 84
  • requirements.txt와 Dockerfile를 수정할 필요가 없어서 바로 이미지를 빌드한다photo 85

Nginx 이미지 빌드

  • default.conf와 Dockerfile을 수정할 필요가 없어서 그대로 빌드한다 photo 86

django, Nginx, PostgreSQL 연동

  • 컨테이너를 실행 후 연동한다
  • 먼저 네트워크를 생성한다 photo 87
  • djangotest와 nginxtest 컨테이너를 실행한다 photo 88
  • django가 잘 실행하고 있는지 확인 photo 89
  • djangotest 내부에 들어가고 데이터베이스 연결 상태를 확인한다 photo 90

도커 컴포즈를 활용한 컨테이너 실행

도커 컴포즈의 개념

  • 도커 컴포즈: 도커를 활용하여 다수의 컨테이너 형태의 애플리케이션을 실행할 수 있는 도구
  • 실행하고자 하는 애플리케이션의 설정 내용들을 YAML 파일로 작성하는 방법으로 고커 컴포즈를 활용할 수 있다

도커 컴포즈 설치

  • 먼저 pip3를 설치한다 photo 91
  • 그리고 도커 컴포즈를 설치한다 photo 92
    • 오류가 나오긴 하지만 도커 컴포즈가 있다고 해서 괜찮을 듯…?

실습 디렉터리 구성

  • 아래와 같이 디렉터리를 구성한다 photo 93

docker-compose.yml 파일 작성

  • docker-compose.yml을 생성하고 아래와 같이 작성한다 photo 94
    • restart: always: 컨테이너가 정지되면 재실행하라는 명령어

빌드 및 실행

  • 아래와 같이 컨테이너를 실행한다 photo 95
  • 성공쓰 photo 96
  • django 컨테이너 내부에 들어가 데이터베이스 연결 상태 확인 photo 97

추가 실습

  • django, Nginx 컨테이너가 로컬 PostgreSQL과 연결하는 실습을 도커 컴포즈로 진행해본다
  • 먼저 디렉터리를 아래와 같이 정리한다 photo 98
  • docker-compose.yml 파일을 아래와 같이 작성한다 photo 99
  • 아래와 같이 빌드한다 photo 100
  • 컨테이너가 실행 중인지 확인 photo 101
  • PostgreSQL과 연동되었는지 확인 photo 102
  • 컨테이너를 정지시킨다 photo 103
This post is licensed under CC BY 4.0 by the author.

Trending Tags