실행 명령어를 파일로 남겨야 할 때
테스트에 쓴 긴 명령어를 운영 문서에 그대로 붙여 넣으면 나중에 어떤 옵션이 바뀌었는지 찾기 어렵습니다. compose.yaml로 정리하면 이미지, 환경 변수, 포트를 따로 확인할 수 있어 배포 설정을 Git으로 관리하거나 서버를 옮길 때 유용합니다.
한 번에 명령어 하나를 서비스 하나로 변환합니다. 실행 중인 컨테이너를 조회하거나 다른 서비스와의 의존 관계를 알아내지는 않습니다. 변환만으로 기존 컨테이너가 바뀌는 일도 없습니다.
명령어를 넣고, 실행 환경을 확인하세요
docker run 또는 docker container run으로 시작하는 명령어를 붙여 넣으세요. 여러 줄이면 줄 끝의 역슬래시를 유지해야 합니다. 서비스 이름을 따로 입력해도 --name으로 지정한 container_name은 그대로 남습니다.
결과를 저장한 뒤 변환 참고 사항을 읽고, 마운트할 디렉터리와 환경 변수 파일의 위치를 확인하세요. docker compose config로 구성을 검사한 다음 상시 실행할 서비스는 docker compose up -d로 시작할 수 있습니다.
Nginx 포트와 재시작 정책 변환 예제
호스트의 8080번 포트를 컨테이너의 80번 포트에 연결합니다. 재시작 정책은 YAML에 들어가지만, 백그라운드 실행 옵션인 -d는 Compose를 시작할 때 지정합니다.
docker run -d --name web -p 8080:80 \
--restart unless-stopped nginx:alpineservices:
web:
image: "nginx:alpine"
container_name: "web"
ports:
- "8080:80"
restart: "unless-stopped"
network_mode: "bridge"
데이터가 다른 볼륨에 연결되지 않도록
이름 있는 볼륨은 원래 이름을 유지하며 external: true로 선언합니다. Compose 프로젝트 접두사가 붙은 새 볼륨을 만드는 대신 기존 볼륨을 참조하기 위한 처리입니다. 새로 설치하는 경우에는 볼륨을 먼저 만들거나 이 설정을 제거하세요. 데이터 자체를 복사하는 기능은 아닙니다.
상대 경로는 Compose 파일이 있는 디렉터리를 기준으로 해석합니다. 사용자 지정 네트워크도 기존 외부 네트워크로 처리합니다. 별도 네트워크 옵션이 없으면 network_mode: bridge를 유지합니다. Compose 전용 네트워크와 서비스 이름 검색을 쓰려면 해당 항목을 제거하세요.
셸에서 처리할 값은 먼저 확정하세요
POSIX 방식의 따옴표, 이스케이프, 줄 연결을 지원합니다. PowerShell, CMD, 파이프, 여러 명령어, Docker 전역 옵션은 지원하지 않습니다. $(pwd)나 셸 변수는 실제 값으로 바꿔야 합니다. 달러 기호 자체를 전달하려면 작은따옴표나 이스케이프를 사용하세요. 출력에서는 $$로 보존합니다.
--env-file은 format: raw로 변환하므로 Docker Compose 2.30.0 이상이 필요합니다. 파일 내용을 읽거나 포트 사용 여부와 이미지를 검사하지 않습니다. 설정 파일 검사가 통과해도 애플리케이션 실행까지 보장하지는 않습니다.
Docker 옵션과 Compose 설정 비교
| Docker 옵션 | Compose 항목 | 변환 내용 |
|---|---|---|
IMAGE | image | 이미지 이름과 태그 유지 |
--name | container_name | 지정한 컨테이너 이름 유지 |
-p, --publish | ports | 호스트와 컨테이너 포트 연결 |
-e, --env | environment | 값 생략 시 실행 환경에서 확인 |
-v, --volume / --mount | volumes | 바인드 마운트 및 이름 있는 볼륨·익명 볼륨 |
--network | networks / network_mode | 네트워크 이름 또는 모드 |
--restart | restart | 컨테이너 재시작 정책 |
IMAGE [COMMAND] [ARG…] | command | 실행 인수를 배열로 유지 |
자주 묻는 질문
version이 없어도 되나요?
현재 Compose Specification에 맞춰 services를 최상위 항목으로 사용합니다. 이전 형식의 version은 추가하지 않습니다. docker compose 명령어로 검사하세요.
--rm 옵션은 어디에 들어가나요?
일회성 작업은 docker compose run --rm --service-ports SERVICE로 실행하세요. SERVICE를 서비스 이름으로 바꾸면 됩니다. --service-ports는 설정한 포트 매핑을 적용합니다.
--gpus를 넣으면 왜 결과가 사라지나요?
GPU나 기존 --link, 일부 고급 마운트 설정은 직접 작성해야 합니다. 지원하지 않는 옵션을 누락한 채 결과를 내보내지 않도록 변환을 중단합니다.
여러 컨테이너를 한 파일로 합칠 수 있나요?
각 명령어를 따로 변환한 후 서비스 정의를 합치세요. 공유 볼륨과 네트워크를 정리하고 의존 관계는 직접 설정해야 합니다.
환경 변수에 넣은 비밀번호는 전송되나요?
입력 명령어는 업로드하지 않고 브라우저에서 변환합니다. 생성 파일에는 입력한 값이 포함되므로 저장소에 올리기 전에 내용을 확인하세요.
기존 컨테이너와 이름이 겹치면 어떻게 되나요?
변환 중에는 아무 컨테이너도 조작하지 않습니다. 실제 Compose 실행 전에 사용 중인 컨테이너 이름과 포트 충돌을 해결해야 합니다.
Docker 공식 문서: docker run · Compose · $$
