DOCKER 배포 정리본 🪓

On a regular basis·2021년 11월 12일
0

1. Dockerfile

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을 사용해서 서버를 실행

2. docker-compose.yml

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.yml 다 작성.
$ docker-compose up -d
  • http://127.0.0.1:<포트번호> 여기에 접속해보면 개발 서버가 작동되는 것.

EC2, Docker 배포

# 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 : 포트번호
  • 오늘 도커 배포 완료 ! 시행착오가 많았지만 팀원분의 도움과 도커 공식문서의 도움으로 완료 ! 항상 공식문서 먼저보기를 습관화하기...💟
  • 도커와의 혈투에서 0.8만큼 이긴 느낌... 배포가 능숙해질때까지 힘내..💟

출처: 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

profile
개발 기록

0개의 댓글