2019.04.21 - Docker Tag, Dockerfile (Docker의 빌드과정)

1. Docker Tag

태그는 이미지에 붙은 일종의 포인터 같은 역할을 한다고 볼 수 있겠다.
다운로드할 때 이미지 레파지토리명:태그 를 하면 원하는 이미지를 선택해서 받아올 수 있다.
기존에 있는 이미지의 태그말고 새로운 이미지 태그도 만들어낼 수 있다.

docker image ls : 이미지 목록을 보여준다
docker image tag OLD_TAG NEW_TAG : old tag를 가진 이미지로부터 new_tag를 가진 이미지를 새로 만든다.
docker image push (AccountName)/IMAGE_NAME: 지칭한 이름을 단 이미지를 레파지토리에 전송한다.


2. Dockerfile (Docker의 빌드과정)

Dockerfile은 쉽게 얘기하면 내 이미지를 만드는 레시피를 의미하는 것으로, 지정한 이미지를 어떻게 빌드할 것인지 알려주는 적은 용량의 텍스트 파일이다.

Dockerfile 내부에는 여러 단계가 있는데 좀 살펴보자면

FROM debian:stretch-slim : 주로 minimal distribution으로 요즘엔 alpine이 많을 것
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
ENV NGINX_VERSION 1.13.6-1~stretch : 환경변수를 설정하는 것
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
RUN apt-get update : Shell에서 실행할 run command. &&로 묶인거는 스크립트를 이어서 실행한다는 의미다. 
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
EXPOSE : 개방할 포트. 자동으로 열리는 건 아니고 -p 커맨드를 줘야 뚫리는 듯 하다. 컨테이너로부터 데이터를 받을 때 사용할 포트 목록.
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
CMD: 위에 것들이 다 돈 뒤에 마지막으로 실행할 쉘 커맨드
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~
~ Blah Blah ~

이제 docker image build -t(태그) TAG_NAME . (현재 디렉토리에서 빌드)를 하면 몇 단계 스텝을 거치면서 빌드하기 시작한다. 각각의 스텝 빌딩이 끝날 때마다 해쉬값이 리턴이 된다. 이 해쉬값은 방금 전 빌드한 스텝의 상태를 저장한 일종의 key값이다. 

컨테이너가 8080 포트를 사용할 거라서 8080을 EXPOSE 라인에 추가하고 다시 빌드했다고 해보자. 어떻게 되는가? 변경사항이 없는 윗단은 'Using Cache' 라고 나타나며 기존의 값을 그대로 쓴다. 그래서 빌드가 빨리 된다. 

반면에 EXPOSE 단계는 변경사항이 생겼기 때문에 그 스텝은 다시 빌드하고 새로운 해쉬값을 내뱉는다. 이제는 현재 상태가 방금 받은 해쉬값에 캐싱이 되는 것이다. 이러한 원리에 따라 공통적인 사항은 빠른 빌드 단계에 놓고 개별로 차이가 있는 것들은 늦은 단계에 두는 것이 바람직 하다.

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용