Docker Compose로 호스트 실행 파일 실행하는 방법 🐳
Docker Compose로 호스트 실행 파일 실행하는 방법 🐳
컨테이너는 기본적으로 격리된 환경에서 실행되지만, 때로는 호스트(운영체제)의 특정 파일이나 프로그램을 컨테이너 내부에서 사용해야 할 필요가 있습니다. 이때 **볼륨 마운트(Volume Mount)**를 사용하여 호스트의 실행 파일을 컨테이너에 공유하고 실행할 수 있습니다.
이번 글에서는 Docker Compose를 사용해 컨테이너에서 호스트의 실행 파일을 실행하는 방법을 알아보겠습니다.
1. 볼륨 마운트의 기본 원리
볼륨 마운트는 호스트의 특정 디렉터리나 파일을 컨테이너의 특정 경로에 연결하는 기능입니다. 이를 통해 컨테이너는 격리된 환경을 유지하면서도 호스트의 파일에 직접 접근할 수 있게 됩니다.
docker-compose
에서 이 설정을 하려면 volumes
키를 사용합니다.
volumes:
- /호스트/경로:/컨테이너/경로
2. Docker Compose로 호스트 실행 파일 실행하기
예를 들어, 호스트에 /home/user/scripts/my_script.sh
라는 셸 스크립트가 있고, 이 스크립트를 Docker Compose로 실행하는 컨테이너에서 사용하고 싶다고 가정해 봅시다.
단계 1: 실행할 스크립트 작성
먼저 호스트에 간단한 셸 스크립트를 생성합니다.
# /home/user/scripts/my_script.sh
#!/bin/bash
echo "Hello from a script on the host!"
echo "Current directory: $(pwd)"
echo "Executing in container: $(hostname)"
스크립트에 실행 권한을 부여하는 것을 잊지 마세요.
chmod +x /home/user/scripts/my_script.sh
단계 2: docker-compose.yml 파일 작성
다음과 같이 docker-compose.yml
파일을 작성합니다.
version: '3.8'
services:
script-runner:
image: ubuntu:latest
container_name: script-runner-container
volumes:
- /home/user/scripts/my_script.sh:/usr/local/bin/my_script.sh:ro
command: /usr/local/bin/my_script.sh
volumes
:my_script.sh
파일을 컨테이너의/usr/local/bin/
경로에 **읽기 전용(:ro
)**으로 마운트합니다. 읽기 전용으로 설정하면 컨테이너가 호스트의 원본 파일을 수정하거나 삭제하는 것을 방지하여 보안을 강화할 수 있습니다.command
: 컨테이너가 시작될 때 자동으로 실행할 명령어를 정의합니다. 여기서는 마운트된 스크립트 파일을 실행하도록 설정했습니다.
단계 3: 컨테이너 실행
docker-compose.yml
파일이 있는 디렉터리에서 다음 명령어를 실행합니다.
docker-compose up
명령어를 실행하면, script-runner
컨테이너가 생성되고, 호스트에 있던 스크립트가 컨테이너 내부에서 실행되는 것을 확인할 수 있습니다.
script-runner-container | Hello from a script on the host!
script-runner-container | Current directory: /
script-runner-container | Executing in container: <container_id>
3. 유의사항 및 권장 사항
- 권한 문제: 마운트된 파일이 컨테이너에서 실행 권한이 없는 경우,
permission denied
오류가 발생할 수 있습니다. 호스트에서chmod +x
로 실행 권한을 부여하거나, Dockerfile에 권한을 설정하는 단계를 추가해야 합니다. - 의존성: 실행 파일이 호스트에 설치된 특정 라이브러리나 다른 프로그램에 의존한다면, 해당 의존성을 컨테이너 이미지에 포함시켜야 합니다.
- 보안: 호스트의 중요한 파일을 마운트할 때는 읽기 전용(
:ro
) 옵션을 사용하여 보안 위험을 최소화하는 것이 좋습니다.
Docker Compose를 사용하면 이처럼 복잡한 설정을 .yml
파일 하나로 관리하여, 컨테이너 환경을 더 효율적이고 유연하게 구성할 수 있습니다.
카테고리 다른 글
Date | Title | Author |
---|---|---|
Aug 24, 2025 | 도커 소켓 마운트: 컨테이너에서 도커를 제어하는 방법 | |
Aug 2, 2025 | docker-compose PostgreSQL DB 백업 및 복원 | |
Aug 1, 2025 | GCP VM 인스턴스에 도메인 연결하기 | |
Jul 26, 2025 | GCP VM 인스턴스에서 DB 및 서비스 이전 가이드 | |
Jul 19, 2025 | 윈도우에 ngrok 설치하고 사용하기 | |
Jun 5, 2025 | FastAPI에서 문서 접속을 환경설정으로 제한하는 방법 | |
May 5, 2025 | 포트를 점유하고 있는 서비스 제거하기 | |
Mar 20, 2025 | 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 | |
Feb 4, 2025 | Windows 11에서 WSL 설치 및 Docker 연결하기 | |
Oct 7, 2024 | Docker Compose로 Jenkins 설치 및 사용하기 | |
Aug 23, 2024 | 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 | |
Jul 24, 2024 | GitHub Actions 시작하기 | |
Dec 31, 2023 | 우분투와 윈도우 파일 공유하기 (samba) | |
Dec 5, 2023 | crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 | |
Nov 27, 2023 | 우분투 docker, docker-compse 설치 | |
Nov 26, 2023 | AWS 호스팅 EC2 와 Lightsail의 차이 | |
Nov 20, 2023 | wsl 이미지 저장 위치 변경 및 백업 | |
Nov 20, 2023 | airflow postgresoperator 사용하기 | |
Nov 18, 2023 | docker-compose로 airflow 설치하기 | |
Nov 15, 2023 | wsl2에 docker 설치하기 | |
Nov 15, 2023 | mkfifo를 이용한 IPC | |
Oct 9, 2023 | Github Pull Request 템플릿 적용하기 |