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 .
출력:
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
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