[이슈] 바인딩 마운트된 컨네이너에서 프로그램 추가된 이미지 만들기
필기자
2024-11-01 22:19
285
0
본문
주의사항 : 내용은 task app 기준 예시이며 본인이 개발한 프로그램 구성에 따라 적용하세요.
위와 같이 우리가 사용하고 있는 컨테이너는 6개가 있다.
이중 myredis와 myproxy는 이미지를 새롭게 만들 필요가 없다.
myfront와 mytaskapi, myuserapi는 각각 -v 옵션으로 바인딩 마운트가되어 있다.
이슈 : 바인딩 마운트된 컨테이너를 commit 하여 새로운 이미지로 만들어도 바인딩 마운트(/var/www/html 빈폴더가 됨)된 내용이 포함되지 않는다.
해결방법
생성된 이미지 확인
이미지 테스트
이후 나머지 이미지도 만들어서 도커 허브에 업로드 후 설치 방법 제공
위와 같이 우리가 사용하고 있는 컨테이너는 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 이 있는 상대경로
생성된 이미지 확인
이미지 테스트
#기존 myfront 컨테이너 삭제
docker rm myfront
#바인딩 마운트 내용 제거
docker run -d --name myfront -p 8011:80 --net php-mysql myfront-kky
이후 나머지 이미지도 만들어서 도커 허브에 업로드 후 설치 방법 제공
- Dockerfile.mytaskapi 파일 생성 후 빌드
- Dockerfile.myuserapi 파일 생성 후 빌드
- 파일명은 자유롭게 작성해도 되나 빌드시 -f 옵션에 정확히 삽입
댓글목록0