dockerfile -> 도커 클라이언트 -> 도커 서버 -> 이미지
- dockerfile은 도커이미지를 만들기 위한 설정파일이며 컨테이너가 어떻게 행동할지 설정들을 정의
- 도커 클라이언트 : 도커 파일에 입력된 것이 도커 클라이언트에 전달되어야함
- 도커 서버 : 도커 클라이언트에 전달된 모든 중요 작업들을 함
hello를 출력할 dockerfile을 작성
# 베이스이미지
FROM alpine
# 추가적으로 필요한 파일 다운로드
#RUN command
# 컨테이너 시작시 실행 될 명령어
CMD ["echo", "hello"]
위의 dockerfile 작성 후 아래와 같이 build 해줌
docker build ./
※※※※※※※docker build ./ 실행시 이미지 ID 나오지 않는 경우 더보기 클릭※※※※※※※
docker build ./ 를 하였을 때 [+] Building 0.1s (5/5) FINISHED 가 되는 경우
아래와 같이 나온다면
![](https://blog.kakaocdn.net/dn/lP9i3/btraVEm3EqF/gaK8vohBSPt1hn8hk7MgsK/img.png)
buildkit이 활성화 되었기 때문에 나오는 현상
docker setting에 들어가서 아래와 같이 buildkit을 false로 바꿔준다.
![](https://blog.kakaocdn.net/dn/cNg5vv/btrbbTXdsbE/YG9DFsBmUw41x2V3gYXwAK/img.png)
window의 경우 밑의 사진과 같이 경고가 뜰 수 있는데 dockerfile에 cmd가 있기 때문이란다.
빌드는 되어서 무시하고 넘어감
build 하여 나온 step 부분
Step 1/2 : FROM alpine # alpine 이미지 가져옴 (많은 레이어들이 있음 / 시작시 실행될 명령어, 파일 스냅샷)
---> d4ff818577bc
Step 2/2 : CMD ["echo", "hello"] # 임시 컨테이너 생성(하드디스크에 파일 시스템 스냅샷 추가, 시작시 실행될 명령어는 아직 없음) 그 다음 시작시 실행될 명령어에 echo hello를 줌
---> Running in 9c6c35f0c41c
Removing intermediate container 9c6c35f0c41c # 임시 컨테이너로 이미지 만들어주고 임시 컨테이너 삭제
---> 32e00d5366a8
Successfully built 32e00d5366a8
이미지를 만들 때 베이스 이미지 먼저 임시 컨테이너 넣어주고, 레이어 넣어주고
시작시 실행될 명령어까지 넣어주고 임시 컨테이너 토대로 새로운 이미지가 생성된거임
>> 베이스 이미지에서 다른 종속이나 새로운 명령 추가할땐 임시컨테이너 만들고 이 임시컨테이너로 새로운 이미지 생성, 그 후에 임시컨테이너 삭제
이미지를 통해서 컨테이너 만든다고 했는데 위와같은 과정을 통해 컨테이너도 이미지를 만들 수 있다.
도커 이미지 이용해서 컨테이너 실행
hello 잘 나옴
도커 이미지에 이름주려면
docker build -t 도커아이디/저장소프로젝트이름:버전 ./
소스가 변경되고 적용하려면 위의 과정을 다시 해야한다.
COPY ./ ./ 에서 index.js 만 바꿨는데 다른 모듈까지 다시 설치 되기 때문에 비효율적
***** 소스 변경으로 재빌드할때 효율적으로..... *****
COPY ./ ./
RUN npm install
으로 종속성 계속 install 해주었던 것을
COPY package.json ./
RUN npm install
COPY ./ ./
으로 나누어 주면 캐시에 있는거 가져오기 때문에 빠름
docker volume 로 하면
docker run -d -p 5000:8080 -v /usr/src/app/node_modules -v ${PWD}:/usr/src/app chaem0215/nodejs
컨테이너 다시 run하면 이미지 빌드 없이 변경가능 (기존의 컨테이너 꺼주고 run)
참고
'Docker' 카테고리의 다른 글
[Docker] Window에서 Container 전체 삭제 (0) | 2021.08.02 |
---|---|
[Docker] (0) | 2021.07.22 |