Docker을 이용해 간단히 작업물 배포해보기
('배포' 라기 보다는) 단순하게 이미지를 만들고, 배포할 서버에서 컨테이너를 실행해보기
임의로 간단한 페이지 하나 만들고 실행해보기
# velog/config/urls.py
from django.http import HttpResponse
# 임의의 API
def sample(request):
return HttpResponse('환영합니다!!')
urlpatterns = [
# ...
path('', sample),
]
# velog/
python manage.py runserver
velog/Dockerfile
파일 생성
# velog/Dockerfile
# python:3-slim 이미지 사용
FROM python:3-slim
# 배포 서버 업데이트
RUN apt -y -qq update & apt -y -qq dist-upgrade && apt -y -qq autoremove
# pip 업그레이드
RUN pip install --upgrade pip
# /tmp 폴더에 requirements.txt 파일 복사
COPY ./requirements.txt /tmp
# requirements.txt에 있는 라이브러리 설치
RUN pip install -r /tmp/requirements.txt
# 현재 프로젝트를 /srv/velog 폴더에 복사
COPY . /srv/velog
# Docker 이미지 실행시 경로
WORKDIR /srv/velog
# Docker 컨테이너 생성시 default로 실행하는 명령어
CMD /bin/bash
velog/.dockerignore
파일 생성해 이미지 생성시 제외할 파일들 추가 (.env
파일 반드시 추가!)
# velog/.dockerignore
.env
.python-version
.idea
배포 서버에서 pip를 이용해 라이브러리를 설치할 수 있도록 requirements.txt
파일 생성
# velog/
poetry export -f requirements.txt > requirements.txt
velog/config/settings/prod.py
파일에서 ALLOWED_HOSTS
주소 변경
# velog/config/settings/prod.py
# ...
ALLOWED_HOSTS = [
'192.168.0.4' # 배포할 서버의 호스트 주소
]
# ...
Docker 로그인
docker login
# username: raccoonhj33
# ...
Docker 이미지 생성
# velog/
docker build -t raccoonhj33/velog . # Docker 이미지 생성
docker push raccoonhj33/velog # Docker Hub의 velog 레포에 이미지 push
velog/.env
파일을 배포 서버 내 /tmp 폴더에 따로 복사
scp .env hg@192.168.0.4:/tmp
배포 서버에 원격 접속하여 이미지 불러오기
ssh hg@192.168.0.4 # ssh 접속
docker pull raccoonhj33/velog # Docker 이미지 pull
(원격 접속) Docker 컨테이너 실행
docker run --rm -d -p 80:80 --name velog raccoonhj33/velog # Docker 컨테이너 실행
docker cp /tmp/.env velog:/srv/velog # /tmp/.env 파일을 Docker 컨테이너 내 /srv/velog 폴더에 복사
docker exec -d velog python manage.py runserver --settings=config.settings.prod 0.0.0.0:80 # Docker 컨테이너에 명령어 전달
--rm
: 컨테이너 종료시 삭제-d
: 데몬(백그라운드)으로 실행-p 80:80
: 호스트 컴퓨터 포트 80에 컨테이너 포트 80이 바인딩--name velog
: 컨테이너 이름을 'velog'로 지정python manage.py runserver --settings=config.settings.prod 0.0.0.0:80
: 외부 80 포트로 Django 서버 실행 명령어API 주소로 접속하여 동작 확인 (http://192.168.0.4:80
)
(원격 접속) Docker 컨테이너 종료
docker stop velog
.
├── .dockerignore
├── .env
├── .idea
├── .python-version
├── Dockerfile
├── config
│ ├── __init__.py
│ ├── __pycache__
│ ├── asgi.py
│ ├── settings
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── _base.py
│ │ ├── dev.py
│ │ └── prod.py
│ ├── urls.py
│ └── wsgi
│ ├── __init__.py
│ ├── __pycache__
│ ├── dev.py
│ └── prod.py
├── manage.py
├── poetry.lock
├── pyproject.toml
└── requirements.txt