Docker
은 가상화 기술입니다. Container Virtualization
은 Docker
라는 회사가 개발하기 전에도 존재했었습니다. Docker
가 가상화 컨테이너에 application
배포를 자동화 시켜주는 오픈소스 엔진으로 많은 기업들이 사용해서 저처럼 기술의 또 다른 이름으로 오해하시는 분들도 있습니다. 오늘은 Docker
의 요소들을 소개하고, Django
프로젝트를 배포해보겠습니다.
Image
는 Docker
의 LifeCycle
에서 Build
의 부분에 해당합니다. 컨테이너에서 실행시키고 싶은 application
을 docker
이미지로 빌드해서 실행시킵니다.
Image
는 파일시스템들의 layer
로 만들어졌습니다. 또한 컨테이너를 실행시키기 위해 필요로 한 파일들과 설정값을 포함하고 있습니다. 이러한 설정값들은 수정할 수 없게 되어있습니다. 컨테이너의 상태가 변경되거나 삭제되어도 이미지는 변하지 않습니다.
Image
를 만들기 위해서는 우선 Dockerfile
을 만들어야한다. Dockerfile
에는 설정 파일로 안에 다양한 명령어들이 들어있습니다. Dockerfile
이 Docker
배포의 기본입니다.
Dockerfile 예시
#./Dockerfile
FROM python:3
#기반이 될 이미지
# 작업디렉토리(default)설정
WORKDIR /usr/src/app
## Install packages
#현재 패키지 설치 정보를 도커 이미지에 복사
COPY requirements.txt ./
#설치정보를 읽어 들여서 패키지를 설치
RUN pip install -r requirements.txt
## Copy all src files
#현재경로에 존재하는 모든 소스파일을 이미지에 복사
COPY . .
## Run the application on the port 8080
#8000번 포트를 외부에 개방하도록 설정
EXPOSE 8000
#CMD ["python", "./setup.py", "runserver", "--host=0.0.0.0", "-p 8080"]
#gunicorn을 사용해서 서버를 실행
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "bestgo.wsgi:application"]
Image
를 만들기 위해서는 build
명령어를 써야합니다.
$ docker build -t {docker_id}/{이미지 이름}:0.1
Build
과정에서 Dockerfile
을 찾지 못하는 경우가 있습니다. 그 경우에는 directory
가 맞는지와 Dockerfile
에 확장자가 부여됬는지 확인해보세요.
Dockerfile.txt => .txt 파일이면
build
가 되지 않습니다.
Build
가 되었으면 $ docker images
명령어로 제대로 만들어졌는지 확인해볼 수 있습니다.
Docker Image
를 이제 Docker Hub
로 Push
해야 합니다. Push
된 이미지는 나중에 EC2
에서 Pull
하면 됩니다.
Docker Image
를 EC2
에서 pull
했다면 이제는 실행시켜주어야 합니다. Run
명령어는 아래와 같은 구조입니다.
$ docker run -d -p 8000:8000 --name best_go_test jun17114/bestgo:0.1
-d
옵션을 사용하면 컨테이너가 detached mode로 실행됩니다. 컨테이너가 백그라운드에서 실행됩니다.
-p
는 포트포워딩입니다. 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출시킵니다.
--name
뒤에 실행될 컨테이너의 이름을 정해줍니다.