Dockerfile
생성!이제 Docker image 구하러 가기 (dockerhub <- 여기서 탐색!)
dockerhub에 회원가입 후 원하는 docker image를 searchbar에 검색(e.g python, ubuntu 등등) -> 나의 경우 python!
python card를 클릭해 안으로 들어가면 simple tags들이 많이 있는데 이중에 alpine
은 light weight이기 때문에 동작이 빠르다! -> 나의 경우 3.7-alpine
을 사용 예정
FROM <내가 원하는 docker 이미지>
작성in Dockerfile
# docker 기반이 될 이미지 FROM python:3.7-alpine
ENV <>
(여기서는 모든 문자를 대문자로!)in Dockerfile
ENV PYTHONUNBUFFERED 1
- 도커 컨테이너 안에서 python을 실행할 때 unbuffered mode를 추천
- buffer의 아웃풋을 허용하지 않고 바로 프린트를 해준다.
- python이 실행될 때 도커이미지와 관련된 것들의 일부 충돌을 막아준다.
COPY <복사할 친구> <도커 컨테이너에 붙여넣기할 친구>
in Dockerfile
COPY ./requirements.txt /requirements.txt
- root 경로에 있는 requirements.txt파일을 컨테이너에 requirements.txt로 복사
in Dockerfile
RUN pip install -r /requirements.txt
- 컨테이너 안에서 실행할 command line
in Dockerfile
RUN mkdir /app WORKDIR /app COPY ./app /app
- 현재 경로에 빈 디렉토리 생성(/app)
- default directory 변경
- 로컬에 있는 app디렉토리를 container에 복사!
유저 생성 -D : 프로젝트 안에서 프로세스 실행 시 유저 생성
in Dockerfile
RUN adduser -D user USER user
- 보안을 목적으로 설정
- default인 root 계정으로 도커 이미지를 실행하는 것을 추천하지 않음
- 만약 root 계정으로 실행 시 누군가 application을 손상시키면 전체 이미지에 대한 root access 권한을 가질 수 있고 악의 적인 행위 외의 작업을 수행 할 수 있게 된다.
requirements.txt
, app/
requirements.txt
에 들어갈 라이브러리는 원하는 것들!!
docker build .
프로젝트 root경로에 docker-compose.yml
파일 생성
첫줄에 Docker compose의 version을 설정
version: "3"
서비스를 설정한다! (services에)
services:
- 다음줄에 서버 이름을 설정
서비스 이름! 나의 경우 app
services: app:
- 서비스 이름 안에 요소들을 채운다.(build, ports, volumes, command)
요소들
- build : container에 빌드할 것들 설정(context: .
: 은 project root에 있는 것들 전부 build한다는 뜻)
>
-> 다음 줄에 쓰겠다는 의미, sh
-> shell을 의미, -c
-> command를 의미)services: app: build: context: . ports: - "8000:8000" volumes: - ./app:/app command: > sh -c "python manage.py runserver 0.0.0.0:8000"
docker-compose build
project root경로에서 명령어 실행
docker-compose run app sh -c "django-admin.py startproject config ."
docker-compose run <docker-compose.yml의 services에 설정한 이름나의 경우 app> sh -c "명령어"
dockerfile에 working directory를 app으로 설정해주었기 때문에 app에서 django 명령어가 실행이 된다.
app directory안에 django project가 이쁘게 생성된 것을 볼 수 있다.