docker-compose×Django×VScode를 이용한 개발 환경 구축
VScode Remote Development 실행 시 Docker 컨테이너 자동 시작
지정된 포트에서 runserver를 실행하면 Django의 개발 환경이 VScode에서 완성됩니다
환상적인 환경을 조성하다.
장점
개발 환경을 열 때마다 docker-compose exec 명령을 걸 필요가 없습니다.
컨테이너 내 환경에서 VScode를 사용할 수 있으므로 VScode의 code runner 또는 보충을 사용할 수 있습니다.
전제 조건
• Docker 설치
· VScode 설치
· VScode를 설치한 extentionRemoteDevelopment
컨디션
Mac OS Catalina(10.15.7)
Docker 20.10.0
절차.
우선 이번 컨테이너 환경 구축 대상의 목록 구성은 다음과 같다.
최종 디렉토리 구조
이번에는 위에서 말한 My Project 응용 프로그램을 제작하는 것을 고려합니다.
준비해야 할 서류는 다음과 같은 네 개다.파일 내용에 관해서는 단계를 참조하십시오.
파일 이름
개요
Dockerfile
응용 프로그램의 이미지 설계도
docker-compose.yml
응용 프로그램 만들기 서비스 설명
requirements.txt
build Docker file에 필요한python 라이브러리 목록
.devcontainer.json
VScode로 원격 환경 설정 파일 만들기
여기서부터.
• 컨테이너 로컬 생성
· VScode에서 컨테이너 열기
크게 두 단계로 나뉜다.
[로컬에서 컨테이너 만들기]
참조https://docs.docker.jp/compose/django.html 로컬에서 용기를 만듭니다.
1. 로컬 위치에 디렉토리 만들기
이번에는 My Project라는 카탈로그를 만들었습니다.
2. My Project에서 다음 Docker file 만들기
Dockerfile
FROM python:3.8.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
첫 번째 행은 Docker Hub의python 이미지를 참조합니다.세 번째 줄의 용기에 코드라는 디렉터리를 만듭니다.
(디렉토리 이름은 원하는 대로 지정할 수 있습니다.)
다섯 번째 줄은 로컬requirements입니다.txt를 용기 내의 코드 디렉터리로 복사합니다.
여섯 번째 줄requirements.txt에 기재된 라이브러리를 용기에 설치합니다.
3. My Project에는 다음과 같은 Requirements가 있습니다.txt 만들기
requirements.txt
argon2-cffi==20.1.0
asgiref==3.3.1
certifi==2020.11.8
cffi==1.14.4
Django==3.1.3
Pillow==8.1.0
pycparser==2.20
pytz==2020.4
six==1.15.0
sqlparse==0.4.1
최소한 필요한 건 땡고밖에 없어.pip freeze > requirements.txt 명령을 입력하면 로컬 환경의 라이브러리를 위에서 설명한 대로 한눈에 볼 수 있습니다.
4. My Project에는 다음과 같은 docker-compose가 있습니다.yml 만들기
docker-compose.yml
version: '3'
services:
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
docker-compose는 여러 용기를 집중적으로 관리할 수 있는 구조입니다.서비스 아래에 서비스 이름을 써서 관리합니다.
상술한 예시에서, 단지 하나의 서비스만이 웹이라고 불린다.
9https://docs.docker.jp/compose/django.html.이 예시에서db 서비스도 보충하였다.Postgres를 이용해 Docker Hub에서 이미지 파일을 가져왔습니다.)
build . Docker file을 build로 만들어 컨테이너를 만듭니다.
command로 용기를 시작할 때 자동으로 실행되는 명령을 지정합니다.여기에 Djnago 서버를 구축했습니다.
volumes는 용기에 마운트할 로컬 디렉터리를 지정합니다.(로컬): (컨테이너) 순서대로 기재합니다.
위의 예에서 로컬 My Project 디렉토리는 컨테이너의 코드 디렉토리에 로드됩니다.즉, 코드에서 로컬 My Project 내의 폴더를 볼 수 있습니다.
5. Django 프로젝트를 생성하기 위해 My Project 디렉터리로 이동한 후 다음 명령을 실행합니다
docker-compose run web django-admin.py startproject sample .
이것은 두 개의 명령을 연속으로 집행하는 것이다.①docker-compose run web
docker-compose 명령으로 run이 4에서 언급한 웹 서비스입니다.
이 시간에 용기를 생성합니다.
②django-admin.py startproject sample .
여기서는 ①에서 시작하는 컨테이너 내에서 Django 명령을 실행할 수 있습니다.
이로써 Sample이라는 Django의 초기 폴더와 관리자가 표시됩니다.py라는 파일을 만듭니다.
Sample은 임의의 이름을 사용할 수 있습니다.
[VScode에서 컨테이너 열기]
뒷부분은 VScode에서 그 컨테이너를 열었다.(정확히 말하면 VScode에서 컨테이너에 접근한다.)
6.My Project에는 다음과 같은 내용이 있습니다.devcontainer.제이슨을 만들다.
.devcontainer.json
{
"dockerComposeFile": "docker-compose.yml",
"service": "web",
"workspaceFolder": "/code",
"extensions": []
}
VScode의 Remote Development에서 컨테이너 내에서 로컬 파일을 열 때의 설정 화면입니다.숨겨진 파일이라서 터치 명령으로 만들었어요.두 번째 줄은 My Project 내의 docker-compose입니다.yml을 지정하여 exec를 진행합니다.
세 번째 줄docker-compose.yml에서 지정한 웹 서비스를 지정합니다.대응할 필요가 있다.
4행에서 VScode로 열 루트 디렉토리를 지정합니다.4단계에서 설명한 바와 같이 용기 내의 코드 디렉터리는 로컬 My Project 디렉터리의 설치 목적지이기 때문에 이 코드를 루트 디렉터리로 설정하는 것이 좋습니다.
5행에서는 VScode의 extensions에서 사용하려는 항목을 정렬에 채워 넣습니다.이번 예는 빈 칸이다.
7. VScode에서 My Project를 열고 Reopen in Contaainer를 클릭
.devcontainer.json이 어떤 상태에서 VScode를 열었을 때 Remote Development는 오른쪽 하단에 "컨테이너로 다시 열어야 하나요?"의 팝업을 클릭하고 [Reopen in Contaainer]를 선택합니다.그래서 다음과 같이 화면이 옮겨져 용기에 넣었는지 확인할 수 있다.
또한 용기를 시작할 때 명령으로 실행된runserver도 실행되었음을 확인할 수 있습니다.
(docker-composie.yml의 여섯 번째 줄에 기재된psyhon3manage.py runserver가 0.0.0.0.0.0.0.0:8000을 실행했기 때문에localhost:8000에서 서버가 일어섰습니다.)
[향후 개발 절차에 관해]
앞으로 개발할 때 만약에 Requirements가txt를 덮어쓰면
개발 프로젝트의 루트 디렉토리(Docker file이 있는 계층)
용기를 삭제하면 터미널에서 docker 시스템 prune을 실행합니다.
그리고 7을 진행하면 이미지 파일만 변경해 새로운 용기를 만든다.
Reference
이 문제에 관하여(docker-compose×Django×VScode를 이용한 개발 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kinopee0120/items/4f9aac19fd0c79873264텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)