바인딩 마운트된 컨네이너에서 프로그램 추가된 이미지 만들기 > 도커 & 쿠버네티스

본문 바로가기

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

필기자
2024-11-01 22:19 327 0

본문

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


2049277884_TSzsawdZ_e5bbc94383935be4fc9af9b2c6c0402072ac3ca2.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 이 있는 상대경로 

2049277884_Lvb6FGd4_1117385dd4c02018c37526d1bdd7db1eb86eeff3.png

2049277884_IjFk4NOb_4a7d115188a86f6c2869b09fdc6d1af9795ec595.png

2049277884_cYXx7Her_d3b92d0aac9cae0bdd9ca92be3f993d1250a924a.png


생성된 이미지 확인
2049277884_apmB3UZq_43ecc56d9bd392563a576f15d4b898b9ce7751b6.png

2049277884_GlTeMZL5_c3e72998ea292460afe300e5402e67c15f659579.png

이미지 테스트

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

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

댓글목록0

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