[Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결

2025. 6. 1. 01:20·개발 (Development)/Docker

최근 온프레미스(on-premise) 환경에서 Docker Compose로 서비스를 구성하는 작업을 진행하게 되었습니다. 그런데 예상대로 문제가 하나 생겼습니다. Compose 파일 내의 일부 서비스는 build: 지시어를 통해 Dockerfile을 기반으로 이미지를 빌드하도록 되어 있었는데, 온프레미스 환경에서는 외부 인터넷이 차단되어 있어 apk update, apt-get install 등 외부 패키지 설치 명령이 전혀 작동하지 않았습니다.

1. 외부 네트워크 환경에서 이미지 미리 빌드

먼저, 외부 인터넷이 가능한 환경에서 Dockerfile 기반으로 필요한 이미지를 미리 빌드했습니다.

docker build -t myapp:latest .

이렇게 하면 myapp:latest라는 이름의 Docker 이미지가 생성됩니다.

2. 이미지 저장 및 내보내기

온프레미스 환경으로 옮기기 위해 위에서 빌드한 이미지를 .tar 파일로 저장했습니다.

docker save -o myapp.tar myapp:latest

이미지 크기가 꽤 컸기 때문에, 경우에 따라서는 gzip으로 압축해서 용량을 줄이는 것도 좋은 방법입니다.

docker save myapp:latest | gzip > myapp.tar.gz

3. 온프레미스 환경으로 이미지 옮기기

이제 myapp.tar 또는 myapp.tar.gz 파일을 내부망 공유 폴더를 이용해 온프레미스 환경으로 옮겼습니다. 네트워크가 막혀있다 보니 이런 방식이 유일한 선택지였습니다.

4. 온프레미스 환경에서 이미지 로드

온프레미스 환경에서는 아래 명령어로 Docker 이미지 파일을 로드했습니다.

docker load -i myapp.tar

압축된 경우에는 아래처럼 진행했습니다.

gunzip -c myapp.tar.gz | docker load

정상적으로 로드되면 docker images 명령어로 이미지가 등록된 것을 확인할 수 있습니다.

5. docker-compose.yml 수정

Compose 파일에서는 원래 build: 지시어를 사용하고 있었지만, 이미지를 외부에서 빌드해서 들고 왔기 때문에 이를 image: 지시어로 바꾸어주었습니다.

변경 전:

services:
  myapp:
    build: .
    ports:
      - "8080:8080"

변경 후:

services:
  myapp:
    image: myapp:latest
    ports:
      - "8080:8080"

6. 서비스 실행

이제 온프레미스 환경에서도 외부 네트워크 없이 문제없이 서비스를 실행할 수 있었습니다.

docker-compose up -d

느낀 점 및 팁

  • docker save, docker load 방식은 네트워크가 제한된 환경에서 매우 유용한 해결책입니다.
  • 여러 이미지를 동시에 저장할 수도 있어서 편리합니다.
docker save myapp:latest anotherapp:latest -o all_images.tar
  • 태그를 명확하게 버전 단위로 관리해두면 유지보수가 훨씬 수월합니다. 예: myapp:v1.0.0

이런 방식으로 Docker Compose의 build: 문제를 우회하여 온프레미스 환경에서 서비스 구동을 무사히 마칠 수 있었습니다. 저와 비슷한 상황을 겪고 계신 분들께 도움이 되었으면 합니다.

반응형

'개발 (Development) > Docker' 카테고리의 다른 글

[Docker/Java] Java 기반 Docker 이미지에서 SQLite 관련 취약점 제거 방법 (CVE-2025-6965)  (4) 2025.08.15
[Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결  (0) 2025.06.01
[Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed)  (0) 2025.06.01
[Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법  (0) 2025.04.26
[Docker] Dockerfile에서 chown이 동작하지 않을 때, 의외의 원인과 해결법  (0) 2025.04.19
'개발 (Development)/Docker' 카테고리의 다른 글
  • [Docker/Java] Java 기반 Docker 이미지에서 SQLite 관련 취약점 제거 방법 (CVE-2025-6965)
  • [Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결
  • [Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed)
  • [Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MyBatis
    PostgreSQL
    Kafka
    데이터분석
    리눅스 마스터 2급
    리눅스 마스터 2급 2차
    JPA
    docker
    DevOps
    Linux
    Kubernetes
    백준자바
    deepseek
    python
    timescaledb
    JSON
    springboot
    Linux master
    pandas
    Vue.js
    java
    오답노트
    백준온라인저지
    백준알고리즘
    ADsP
    AWS
    javascript
    백준
    자바
    Spring boot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결
상단으로

티스토리툴바