도커 이미지 만들기
도커 허브에 공유된 이미지 사용하기
web-ping 어플리케이션 이미지 pull 명령어
docker image pull diamol/ch03-web-ping
도커 이미지를 다운받을 때 각각의 파일을 이미지 레이어 라고 부른다.
환경변수
도커 컨테이너도 별도의 환경변수를 가질 수 있다.
컨테이너의 호스트명, IP 주소처럼 Docker 가 부여해준다.
환경변수를 사용한 docker 명령어
docker rm -f web-ping
docker container run --env TARGET=google.com diamol/ch03-web-ping
# google 도메인을 타겟으로 요청 보내는 명령어
Dockerfile 작성하기
web-ping 애플리케이션 Dockerfile 스크립트
FROM diamol/node -- 이미지 시작점 (web-ping 어플리케이션 실행위한 런타임 Node.js)
ENV TARGET="도메인" -- 환경 변수 값을 지정하기 위한 인스크럭션
ENV METHOD="HEAD"
ENV INTERVAL="3000"
WORKDIR /web-ping -- 해당 디렉터리를 작업 디렉토리로 지정
COPY app.js . -- 로컬 파일 시스템의 파일 혹은 디렉터리를 컨테이너 이미지로 복사하는 인스트럭션
CMD ["node", "/web-ping/app.js"] -- 컨테이너가 시작될 때 실행할 명령어를 지정하는 인스트럭션
컨테이너 이미지 빌드하기
이미지 빌드를 위해선, 이미지 이름, 파일 경로 추가 지정해줘야함
docker image build --tag web-ping .
-- tag 옵션은 이미지 이름을 지정하는 옵션
-- .은 현재 디렉터리에서 Dockerfile을 찾겠다는 의미
※문제 발생 시, 도커 엔진 -> 현재 작업 디렉토리 -> build 명령어 정확한지 확인
이미지 목록 확인
docker image ls 'w*' -- w로 시작하는 이미지 목록
도커 이미지와 이미지 레이어 이해하기
#이미지 히스토리 확인하기
docker image history web-ping
- 도커 이미지는 이미지 레이어가 모인 논리적 대상
- 레이어는 도커 엔진의 캐시에 물리적으로 저장된 파일
- 이미지 레이어는 여러 이미지와 컨테이너에서 공유
docker 에서는 이미지가 비슷한 용량을 가진 것으로 보이지만,
Node.js 런타임을 포함한 이미지가 런타임을 공유하였을 때,
각 Image의 실제 용량은 image ls
로 호출한 SIZE 값아랑 다르다.
(system df
로 확인 가능)
따라서 공유되는 레이어는 수정할 수 없어야 한다. (읽기전용으로 구현)
이미지 레이어 캐시를 이요한 Dockerfile 스크립트 최적화
# 이미지의 파일을 수정 후 다시 빌드 시, 새로운 이미지 레이어 생성.
docker image build -t web-ping:v2 .
- Docker 스크립트 인스트럭션은 각 하나의 이미지 레이어와 1:1 연결
- 결과가 이전과 같다면 이전 캐시된 레이어 사용
따라서 잘 수정하지 않는 인스트럭션이 앞으로 오도록 작성하는 것이 좋다.
최적화 한 스크립트 (핵심)
FROM diamol/node
CMD ["node", "/web-ping/app.js"]
ENV TARGET="도메인"
METHOD="HEAD"
INTERVAL="3000"
WORKDIR /web-ping
COPY app.js . ## 현재 명령어 빼고 모든 레이어를 캐시에서 재사용