기존에 개발된 장고 프로젝트 내에서 docker를 돌릴 것이며, docker-compose를 이용해서 DB와 함께 구동시킬 것이다.
즉, docker-compose를 이용하여 웹서버를 구동시킬 것이다. docker-compose는 다음 글에서 확인해볼 것이다.
Docker 설치
https://docs.docker.com/get-docker/
위 링크로 들어가서 본인의 운영체제에 맞는 docker를 다운 받습니다.
설치가 완료되면 터미널에서 아래의 명령어로 설치가 정상적으로 되었는지 확인해본다.
- docker -v : 도커의 버전을 확인해주는 명령어
프로그램이 정상적으로 설치가 되었다면, 프로그램을 실행시켜주자.
장고 프로젝트 내의 터미널을 새로 실행시켜주고, 아래의 명령어로 도커가 잘 설치되어있는지 확인해본다.
- docker -v
- docker-compose -v
docker-compose를 사용할 것이기 때문에 만약 설치가 안되어있다면, 개발 툴 터미널에서 도커 컴포즈를 설치하면 된다. 반드시 가상환경 내에서 설치해야한다.
- pip install docker-compose
Dockerfile 작성
현재 우리가 개발한 장고 프로젝트를 하나의 이미지로 생성해서 실행시키기 위해서는 Dockerfile이라는 파일을 작성해서 이미지를 생성하여야 한다.
FROM python:3.9.0
COPY ./ /home/Docker_Practice/
WORKDIR /home/Docker_Practice/
RUN apt-get update
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["bash", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"]
FROM python:3.9.0
- 도커 허브에서 python의 3.9.0버전의 이미지를 기반으로 두고 이미지를 만들겠다는 뜻이다.
- Dockerfile로 이미지를 생성할 때는 항상 기존에 있는 이미지를 기반으로 새 이미지를 만들어야 하기 때문에 FROM은 반드시 설정해야한다.
- 태그를 붙히지 않으면 자동으로 lateset가 생성된다.
COPY ./ /home/Docker_Practice/
- COPY[복사할 호스트 파일 경로] [이미지에서 복사한 파일이 위치할 경로] 형식이다.
- [복사할 호스트 파일 결로] 는 항상 현재 Dockerfile이 위치한 경로 내부에 있는 파일만 가능하다.
- [이미지에서 복사할 파일이 위치할 경로] 는 항상 절대 경로로 설정해야한다.
- COPY 명령어 덕분에 이미지를 만들 때, git에서 파일을 가져올 필요가 없어진다.
WORKDIR /home/Docker_Practice/
- WORKDIR [경로] 형식이다.
- WORKDIR 뒤에 오는 모든 RUN, CMD, ENTRYPOINT에 적용된다.
- 리눅스의 cd와 같은 개념으로, [경로]로 작업 디렉토리로 이동한다고 보면 이해하기 쉬운 의미이다.
RUN apt-get update
RUN pip install -r requirements.txt
- FROM에서 설정한 이미지 위에서 스크립트나 명령을 실행한다.
- RUN으로 실행한 결과는 캐시되며 다음빌드 때 재사용한다.
- apit-get update 로 환경파일을 업데이트 한다.
- requirements.txt파일에 있는 의존성을 설치한다.
EXPOSE 8000
- 호스트와 연결한 포트 번호를 설정해 준다. docker run에서의 --export 명령과 동일.
CMD ["bash", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"]
- 도커 컨테이너가 구동될 때, 실행하는 명령어들의 집합이다.
- CMD가 여러개인 경우, 마지막 CMD만 실행된다.
- bash 쉘에서 여러개의 명령어를 사용하려면 && 연산자로 명령어를 나누어주면 된다.
컨테이너 생성하기
docker network create django
docker run -d --name djangotest -v ${PWD}:/home/Docker_Practice -p 8000:8000 \
--net=django django:test
네트워크 만들기 : docker network create {네트워크 이름}
Docker의 network는 목적에 따라 다양한 종류의 네트워크 드라이버를 지원한다.
- bridge : 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있게 해준다.
- host : 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용됨.
--net을 통해서 네트워크 연결을 깜빡했다면
docker network connect django djangotest
django 네트워크에 djangotest 컨테이너를 위와같이 연결해줄 수 있다.
docker network inspect django
inspect 명령어를 통해서 'django' 네트워크의 상태를 볼 수 있다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] GCP 에서 docker로 django 웹 서버 구동 (0) | 2022.04.04 |
---|---|
[Docker] django 터미널에서 docker-compose를 이용하여 개발환경 구성하기 (0) | 2022.04.03 |
[Docker] 3. Nginx 컨테이너 설치 및 웹서버 구동 (0) | 2022.04.02 |
[Docker] 2. mariadb 컨테이너 설치 및 세팅 (0) | 2022.04.02 |
[Docker] 1. 도커(docker) 설치하기 (0) | 2022.04.02 |