Docker, Image 사용 및 생성 다루기(이미지, 도커 파일, 컨테이너 이미지) for window

도커 CLI를 통해 명시적으로 원하는 이미지를 내려받을 수 있다.
도커(허브) 이미지 내려받기
docker image pull [이미지]
하나의 이미지는 여러 이미지가 계층적으로 쌓인 형태로 저장된다. (pull complete)
참고:도커 허브는 도커에서 무료로 제공되는 공개 레지스트리임.
이미지를 다운받으면 하나가 아닌 여러 파일을 다운 받습니다. 이 파일들을 이미지 레이어라고 합니다. 도커의 이미지는 물리적으로 여러 개의 작은 파일로 구성되어 있습니다. 도커가 이 파일을 조립하여 컨테이너의 내부 파일 시스템을 만듭니다. 모든 레이어를 받으면 전체 이미지를 사용할 수 있게 됩니다.
해당 이미지로 컨테이너 실행하기
docker container run -d --name [컨테이너 이름] [이미지]
-d 플래그는 --detach의 축약형 입니다.(백그라운드 동작)
--name 플래그는 컨테이너에 원하는 이름을 붙이고 이 이름으로 컨테이너를 지정할 수 있습니다.
로그 확인
container logs [컨테이너 이름]
해당 생성한 컨테이너 이름으로 컨테이너의 로그를 확인 할 수 있다.
컨테이너 요청 테스트
docker container run --env TARGET=google.com [이미지]
실행시 애플리케이션의 출력 내용를 콘솔에서 확인 할 수 있습니다. (백그라운드 실행 x)
(Ctrl + c 종료)
여기서 알 수 있는 것은 도커 이미지는 설정 값의 기본값을 포함해 패키징 하지만, 컨테이너를 실행할 때 설정 값을 변경할 수 있습니다. --env 플래그를 사용해 다른 값을 지정할 수 있습니다.
Dockerfile
Dockerfile은 애플리케이션을 패키징하기 위한 script 입니다. Dockerfile은 인스트럭션으로 구성되어 있습니다. 이러한 인스트럭션을 실행하여 도커 이미지가 생성됩니다. 그리고 어떠한 애플리케이션이라도 패키징 할 수 있습니다.
*인스트럭션(instruction)
컴퓨터에게 수행되는 프로세스의 명령어 집합
해당 명령어는 대소문자를 구별하지 않습니다. 대문자 및 소문자를 사용해도 무방합니다.
Script
FROM, ENV, WORKDIR, COPY, CMD
FROM: 모든 이미지는 다른 이미지로부터 출발합니다.
ENV: 환경 변수 값을 지정하기 위한 인스트럭션 입니다. 값을 지정하기 위해서는 key=value 형식으로 입력 해 주면 됩니다.
WORKDIR: 컨테이너 이미지 파일 시스템에 디렉토리를 만들고, 해당 디렉토리를 작업 디렉토리로 지정하는 인스트럭션 입니다.
COPY: 로컬 파일 시스템의 파일을 컨테이너 이미지로 복사하는 인스트럭션 입니다. [원본경로] [복사경로] 형식으로 지정합니다.
CMD: 도커가 이미지로부터 컨테이너를 실행했을 때 실행할 명령을 지정하는 인스트럭션 입니다.
해당 애플리케이션 프로젝트가 있는 경로에 위 문법을 참고하여 Dockerfile script 생성(확장자 없음), dockerfile script와 html 또는 js중 하나의 파일을 생성 후 테스트 합니다.
도커 이미지 빌드하기
docker image build --tag [이미지] .
--tag 값은 이미지이고, Dockerfile 및 이미지에 포함시킬 파일이 위치한 경로임 끝에 '.'은 현재 작업 디렉토리 라는 뜻임. 빌드 명령을 실행하면 dockerfile script에 포함된 인스트럭션이 차례로 실행되며 결과가 출력됩니다.
빌드 결과 확인

이미지 확인
docker image ls 'w*'

실제 패키징한 이미지를 도커에 실행 해보면
빌드한 이미지로 부터 도커 웹사이트에 5초 간격으로 요청 해 보기
docker container run -e TARGET=docker.com -e INTERVAL=5000 web-ping

이렇게 이미지로 패키징하여 여러 애플리케이션을 그대로 적용할 수 있습니다. 패키징 과정을 dockerfile script에 작성하고 이미지에 포함시킬 리소스를 모은 후, 애플리케이션의 동작을 설정하면 됩니다.
이미지 히스토리 확인
docker image history [이미지]
해당 커맨드를 입력하면 언제 수정이 되었는지 확인 할 수 있습니다.(CREATED BY부분 dockerfile의 script 인스트럭션) Dockerfile 인스트럭션과 이미지 레이어는 1:1 관계임.
실제 용량 확인
docker system df
실제 이미지의 용량을 확인 할 수 있습니다.
