Dockerfile 작성
배포를 위해 현재까지 진행한 단계는, 아래와 같습니다.
각 단계마다 매우 꼬이고 있어서, 순서를 좀 정리 해봅니다.
- AWS EC2 생성
- AWS RDS 생성 - PostgreSQL 을 Django 프로젝트에 적용
- AWS S3 생성 및 Django 프로젝트에 적용
- AWS S3 정적 이미지와 CSS 파일 적용
- Docker 설치
- Dockerfile 작성 후 이미지 생성
- DockerHub Push
Dockerfile 이란?
Dockerfile 은 Docker 이미지를 생성하기 위해 필요한 명령어를 가지고 있는 파일로,
이 파일이 있는 디렉토리에서, Docker 이미지를 만들수 있습니다.
Dockerfile 에 나열되어 있는 명령어들을 자동으로 실행하여, 이미지를 빌드할때 해당 이미지에 필요한
파일과 설정값들을 정할수 있습니다.
확장자 없이도 동작하고,
RUN
,COPY
,WORKDIR
과 같은, Dockerfile 언어로 작성할수 있습니다.
잘 작성된 Dockerfile 을 사용하여, 이미지를 생성할수 있고, 이미지는 컨테이너 실행에 필요한 파일들과 설정값들을 포함하고 있습니다.
일단 dockerfile 과 start 파일을 작성해 보려 합니다. 작성을 마친뒤에는, 작성된 Dockerfile 을 사용하여, 이미지를 생성해 볼겁니다.
프로젝트 구조 확인하기
1 | . |
확장자가 없는, Dockerfile
과 start
파일을 생성해 줍니다
Dockerfile 파일과 start 파일
컨테이너 실행에 필요한 이미지는 아래 사항들을 바탕으로 작성되어야 합니다
기본 이미지는 Python 3.8 을 베이스로 합니다
이 이미지는, 로컬에 존재하는 todolist 프로젝트 파일들을 복사해서 가지고 있습니다
이미지 안에, todo/requirements.txt 를 가지고 있기 때문에,
pip install -r /todo/requirements.txt
를 실행하여, 필요 패키지들을 설치 합니다
이 이미지를 사용하여 실행되는 컨테이너는, runserver 를 실행 시킵니다 (runserver 명령어를 실행하기 이전에 공통된 명령어들,
python manage.py makemigrations
,python manage.py migrate
그리고python manage.py runserver
같은 명령어들은, todo/start 파일에 담겨져 잇어서, 해당 이미지는 이 start 파일을 실행시켜서 서버를 시작합니다.)
todolist/Dockerfile 을 아래와 같이 작성
1 | # 기본설정 |
todolist/start 파일을 아래와 같이 작성
- 참고 : start 파일은 확장자가 없음
1 |
|
Dockerfile 로 이미지 생성하기
Dockerfile 과 start 파일을 작성해 주었으니,
이 파일들을 이용하여, 이미지를 하나 생성해 볼수 있습니다.
프로젝트 폴더인, todolist/폴더로 이동하여, 아래 명령어를 사용합니다.
1 | docker build -t todolist . |
-t
: 생성될 이미지의 이름을 지정
.
: Dockerfile 과 프로젝트 파일들이 있는 경로를 표시, Dockerfile 이 있는 위치이므로, 현재경로인 .
을 입력
docker images 명령어를 사용하여,
todolist:latest 와 Base 이미지인, python 3.8 이 있는것을 확인 할수 있습니다.
영상참고
https://blog.naver.com/headfat1218/221975245936
Docker 실행 시키기
이미지가 생성되었으니, Docker 를 로컬에서 실행 시켜 보려 합니다.
8000번 포트를 열어 주기 때문에, -p 8000:8000
옵션을 넣어줍니다.
1 | docker run -d -p 8000:8000 --name todolist todolist:latest |
옵션 | descriptions |
---|---|
-d | 백그라운드 실행 |
-p 8000:8000 | 호스트와 컨테이너 포트를 매핑 |
–name todolist | 컨테이너의 이름을 todolist 로 지정 |
todolist:latest | 이미지의 이름과 버전을 지정 |
todolist:latest
이미지를 사용하여, 컨테이너를 하나 실행 시켜 주었습니다.
이 컨테이너는, 백그라운드로 실행이 되고, dockerfile 에서 지정해준대로, runserver 를 구동하고 있습니다
브라우저로, 서버에 접속해 봅니다 (http://127.0.0.1:8000)
로컬에서는 잘 작동하는것을 확인 할수 있습니다.
마치며..
배포가 제일 어려운것 같습니다. 틀린 순서일지도 모르지만,
지나온 순서를 다시 리마인드 합니다.
AWS EC2 생성
AWS RDS 생성 - PostgreSQL 적용
AWS S3 생성 및 적용
AWS S3 정적 이미지와 CSS 파일 적용
Docker 설치
Dockerfile 작성 후 이미지 생성
DockerHub Push