FROM python:3
#기반이 될 이미지
WORKDIR /usr/src/app
# 작업디렉토리(default)설정
COPY requirements.txt ./
#현재 패키지 설치 정보를 도커 이미지에 복사
RUN pip install -r requirements.txt
#설치정보를 읽어 들여서 패키지를 설치
COPY . .
#현재경로에 존재하는 모든 소스파일을 이미지에 복사
EXPOSE 8000
#8000번 포트를 외부에 개방하도록 설정
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "프로젝트명.wsgi:application"]
#gunicorn을 사용해서 서버를 실행
version: '3'
# 버전 (3으로 시작하는 최신 버전)
services: # 컨테이너 정의: 컴포즈에서는 컨테이너 대신 서비스라는 개념을 사용
db:
image: postgres # dockerhub의 공식 postgres 이미지: postgres
volumes:
- ./docker/data:/var/lib/postgresql/data
# docker run으로 db컨테이너 실행 시 --volume 옵션을 사용해 db의 데이터를 로컬 컴터에 저장한 부분과 같음. docker/data 디렉터리에 데이터를 저장함.
environment:
- POSTGRES_DB=sampledb
- POSTGRES_USER=sampleuser
- POSTGRES_PASSWORD=samplesecret
- POSTGRES_INITDB_ARGS=--encoding=UTF-8
django: # 장고(앱서비스)
build: # db와 달리 앱 서비스는 특정 이미지 대신 build 옵션 추가
context: . # docker build 명령을 실행할 디렉터리 경로라고 보면 됨
dockerfile: ./compose/django/Dockerfile-dev # 개발용 도커 이미지 빌드에 사용할 Dockerfile을 지정하면 됨. Dockerfile-dev 파일에서는 (운영용 Dockerfile과는 달리) 소스코드를 컨테이너에 넣지 않음.
environment: # 각 값은 앱 서비스의 환경 변수로 설정되고, Django 설정 파일(settings.py)에서 불러와 사용함. 데이터베이스 관련 정보들은 db 서비스에서 설정한 값들과 일치해야함.
- DJANGO_DEBUG=True
- DJANGO_DB_HOST=db
- DJANGO_DB_PORT=5432
- DJANGO_DB_NAME=sampledb
- DJANGO_DB_USERNAME=sampleuser
- DJANGO_DB_PASSWORD=samplesecret
- DJANGO_SECRET_KEY=dev_secret_key
ports: # 포트에 해당하는 부분 (왼: 외부에서 컨테이너 열고 들어오는 포트/오: 내부연결포트)
- "8000:8000"
command: # docker run으로 앱 컨테이너 실행할 때 가장 마지막에 적었떤 명령어
- python manage.py runserver 0:8000
volumes: # docker run으로 앱 컨테이너 실행 시 -v 옵션 사용해 프로젝트 루트 디렉터리를 컨테이너 안의 /app 디렉터리와 연결했떤 부분과 같음.
- ./:/app/
$ docker-compose up -d
# ec2 인스턴스에서 포트번호 새로 할당해주기
# 할당된 포트번호 docker-compose에도 추가해주기
$ ssh -i keypair ubuntu@<ip주소>
# 우분투로 접속
$ git clone https://github.com/Pre-Onboarding-Listerine/8percent-assignment.git
# git clone 받기 (docker랑 docker-compose 깔려있는지 확인)
# pip install docker-compose
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ apt-cache madison docker-ce
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ docker-compose up
# 에러날때1
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 에러날때2 (permission denied)
$ sudo chmod 666 /var/run/docker.sock
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose up
# docker login하고는 상관없음!
# 연결되는지 확인!
>> Successfully built 1c852716fdb0
>> Successfully tagged 8percent-assignment_backend:latest
$ docker-compose down
$ docker-compose up -d
# 데몬에서 실행시켜주기
# public ip : 포트번호
출처: docker 공식문서(https://docs.docker.com/engine/install/ubuntu/)
참고1: 도커파일 작성시 유의사항(https://velog.io/@seheon99/%EC%B5%9C%EA%B3%A0%EC%9D%98-Dockerfile-%EC%9E%91%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%AA%87-%EA%B0%80%EC%A7%80-%EC%8A%B5%EA%B4%80%EB%93%A4)
참고2: https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker%EC%A0%95%EB%A6%AC/#dockerfile-%EA%B8%B0%EB%B3%B8-%EB%AA%85%EB%A0%B9%EC%96%B4