바인딩 마운트된 컨네이너에서 프로그램 추가된 이미지 만들기 > 클라우드네이티브

본문 바로가기

[이슈] 바인딩 마운트된 컨네이너에서 프로그램 추가된 이미지 만들기

필기자
2025-11-05 13:57 474 0

본문

주의사항 :  내용은 task app 기준 예시이며 본인이 개발한 프로그램 구성에 따라 적용하세요.


3529946166_j6pJ4kWQ_84280e64f1497e090408ff79be80afec5f80f189.png

위와 같이 우리가 사용하고 있는 컨테이너는 6개가 있다.
이중 myredis와 myproxy는 이미지를 새롭게 만들 필요가 없다. 
  • myproxy 이용하였으면 설치 가이드만 제공
  • myredis 이용하였으면 설치 가이드만 제공

myfront와 mytaskapi, myuserapi는 각각 -v 옵션으로 바인딩 마운트가되어 있다.

docker run -d --name myfront -p 8011:80 --net php-mysql -v ~/html:/var/www/html myphpimage
docker run -d --name mytaskapi -p 8012:80 --net php-mysql -v ~/php/task:/var/www/html myphpimage
docker run -d --name myuserapi -p 8013:80 --net php-mysql -v ~/php/user:/var/www/html myphpimage


이슈 : 바인딩 마운트된 컨테이너를 commit 하여 새로운 이미지로 만들어도 바인딩 마운트(/var/www/html 빈폴더가 됨)된 내용이 포함되지 않는다.

해결방법 
  • Dockerfile을 만들어 이미지를 빌드하면서 /var/www/html에 개발한 내용을 COPY한다.
  • /home/본인계정/ 폴더 안에서 Dockerfile.myfront 파일 생성 -> 다음 내용 삽입

# Dockerfile.myfront 파일 내용
# 기존 myphpimage 내용 시작
FROM php:8.0-apache

# 필요한 모든 확장을 활성화
RUN apt-get update && \
    apt-get install -y zlib1g-dev libpng-dev && \
    docker-php-ext-install mysqli pdo pdo_mysql gd iconv opcache

# 기존 myphpimage 내용 끝

# Redis 확장 설치 및 활성화 myphpimage 이후 추가 내용
RUN pecl install redis && \
    docker-php-ext-enable redis

# 호스트의 html 폴더를 컨테이너의 /var/www/html에 복사
# COPY시 host의 상대 경로만 허용되며 상위 폴더 접근도 안됨
COPY ./html /var/www/html
  • COPY시 host의 상대 경로만 허용되며 상위 폴더 접근도 안됨
    • 따라서 Dockerfile.myfront 파일을 host의 바인딩 할 폴더 레벨에서 생성 함 
  • docker build -f Dockerfile.myfront -t myfront-kky ./ 
  • 위 명령어로 개발한 프로그램을 넣어서 myfront-kky 이미지로 빌드함.
  • ./는 Dockerfile.myfront 이 있는 상대경로 

3529946166_caV4r8n2_eac61e9ccce0d210740513f8f2c5523cdf434d51.png

3529946166_9d6mKoaH_155e4ed519fdf89283ec23b074eb956afe1b35a7.png

3529946166_YW1UnEpb_828d3f318e7da717e106749a5a2fce4031c2664b.png


생성된 이미지 확인
3529946166_P5cSdsEt_afe5505d094b0c2f083105b08b396d2e5757b277.png

3529946166_E59RejMH_48ea2a1c52a51c923887a218abb1d950920ab4e4.png

이미지 테스트

#기존 myfront 컨테이너 삭제
docker rm myfront
#바인딩 마운트 내용 제거
docker run -d --name myfront -p 8011:80 --net php-mysql myfront-kky

3529946166_vatR1SGz_a36ce4fced603dfbc48fba0131dca10dec5adfa0.png 3529946166_r253wyfH_b6dc98cce936163527003aca22c3a9e80ab720bd.png
이후 나머지 이미지도 만들어서 도커 허브에 업로드 후 설치 방법 제공
  • Dockerfile.mytaskapi 파일 생성 후 빌드
  • Dockerfile.myuserapi 파일 생성 후 빌드
  • 파일명은 자유롭게 작성해도 되나 빌드시 -f 옵션에 정확히 삽입

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색