DOCKER配備まとめ🪓


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
  • 2http://127.0.0.1:<ポート番号>に接続すると、開発サーバが起動します.
  • EC 2、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