Docker-Compose에서 여러 명령 실행

Isaac Tony 2024년2월15일
Docker-Compose에서 여러 명령 실행

Docker를 사용하면 개발자가 컨테이너라고 하는 표준화된 단위로 애플리케이션을 래핑하여 종속성에 대한 걱정 없이 애플리케이션을 더 쉽게 빌드, 테스트 및 배포할 수 있습니다. Docker-compose는 다중 컨테이너 애플리케이션을 관리하기 위한 고급 필수 도구입니다.

docker-compose를 사용하여 여러 Docker 컨테이너에 의존하는 서비스를 관리하는 지침을 정의할 수 있습니다.

docker-compose는 둘 이상의 컨테이너를 관리할 수 있는 것 외에도 애플리케이션 서비스를 위한 격리된 환경 및 컨테이너 생성 시 볼륨 데이터 보존과 같은 다른 이점도 제공합니다.

Docker-Compose에서 여러 명령 실행

Docker-compose는 Mac 및 Windows 시스템에서 Docker와 함께 설치되는 Docker 엔진에서 실행됩니다. 아래 명령을 사용하면 컴퓨터에 docker-compose가 올바르게 설정되었는지 확인할 수 있습니다.

$ docker-compose version
Docker Compose version v2.2.3

다음 예제에서는 docker-compose를 사용하여 Django, PostgreSQL 애플리케이션을 설정하는 방법을 살펴봅니다. docker-compose에서 여러 명령을 실행하는 방법을 살펴보겠습니다.

먼저 아래와 같이 간단한 항목으로 간단한 Dockerfile을 만듭니다. 이 파일은 Docker 이미지를 생성하기 위해 실행될 명령을 설명합니다.

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /tonyloi
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /tonyloi/

Dockerfile은 Python3을 기본 이미지로 정의합니다. 그러나 프로젝트가 작동하는 데 필요한 다른 요구 사항을 명시하기 위해 requirements.txt 파일도 정의했습니다.

Django>=3.0,<4.0
psycopg2>=2.8

이제 이 두 파일이 준비되었으므로 이 프로젝트의 루트 디렉터리에 docker-compose.yml 파일을 만들 수 있습니다. 이 파일은 우리가 구축하려는 애플리케이션의 서비스인 데이터베이스와 웹 서버를 설명합니다.

이 외에도 이러한 서비스에서 사용하는 Docker 이미지와 마운트하려는 다른 Docker 볼륨도 정의할 것입니다. 마지막으로 서비스가 노출할 포트도 지정해야 합니다.

이것은 Django 애플리케이션이므로 마이그레이션을 실행하고 개발 서버를 시작할 수 있는 명령도 지정해야 합니다. sh 또는 bash를 사용하여 이를 수행하는 몇 가지 방법이 있습니다.

이 경우 Unix 기반 시스템에서 사용할 수 있는 sh를 사용합니다.

docker-compose.yml:

version: "3.9"

services:
  DB:
    image: Postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: >
      sh -c "
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8080"
    volumes:

      - .:/tonyloi
    ports:
      - "8080:8080"
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    depends_on:
      - DB

아래의 docker-compose run 명령을 실행하여 이 Django 프로젝트를 생성합니다. 이 명령을 실행하기 전에 루트 디렉터리에 있는지 확인해야 합니다.

그렇지 않은 경우 cd 명령을 사용하여 루트 디렉토리로 이동하십시오.

~/django_app$ sudo docker-compose run web Django-admin startproject new_app .

Docker-Compose 실행

출력:

Successfully built 00a4c8d65c91
Successfully tagged django_app_web:latest
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating django_app_db_1 ... done
Creating django_app_web_run ... done

이 명령은 docker-compose 및 Docker 파일을 사용하여 Django 프로젝트를 만듭니다. 이 예에서는 프로젝트 이름을 new_app로 지정했습니다.

이제 프로젝트를 탐색하고 프로젝트 파일을 나열할 수 있습니다.

isaac@DESKTOP-HV44HT6:~/django_app$ cd new_app
isaac@DESKTOP-HV44HT6:~/django_app/new_app$ ls
__init__.py  asgi.py  settings.py  urls.py  wsgi.py
isaac@DESKTOP-HV44HT6:~/django_app/new_app$

이 기사에서는 sh를 사용하여 docker-compose 파일에서 여러 명령을 실행하는 방법을 강조했습니다. 또는 아래와 같이 bash -c를 사용할 수도 있습니다.

command: bash -c "
   python manage.py migrate  &&
   python manage.py runserver 0.0.0.0:8080
 "

settings.py 파일에서 데이터베이스 설정을 구성하여 나머지 Django 애플리케이션 생성을 완료할 수 있습니다.

Django는 기본적으로 개발 중에 SQLite를 사용합니다. 따라서 PostgreSQL을 사용하므로 아래와 같은 필수 구성이 필요합니다. 데이터베이스와 사용자 이름을 자신의 것으로 바꾸십시오.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('postgres'),
        'USER': os.environ.get('postgres'),
        'PASSWORD': os.environ.get('enter_your database'),
        'HOST': 'db',
        'PORT': 5432,
    }
}

마지막으로 시작하기 위해 애플리케이션은 프로젝트의 기본 디렉토리에서 sudo docker-compose up 명령을 실행합니다. docker-compose 파일에 지정한 http://0.0.0.0:8080/에서 개발 서버를 시작합니다.

~/django_app$ sudo docker-compose up

Docker-작성하기

작가: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

관련 문장 - Docker Compose