최근 온프레미스(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 |