우리네 장
[ Docker ] Dockerfile로 이미지 생성과 컨테이너 실행하기 본문
Docker image 생성 시 필요한 준비물!
- Dockerfile
- Base Image : image layers 중 가장 아래 위치하는 layer로 OS, jdk 등의 software가 위치한다.
- 임시 컨테이너 : 사용자가 설정하는 부분은 아니고, docker가 이미지를 생성하면서 생성하는 임시 컨테이너
[ 일단 완성된 Dockerfile ]
- 아래는 Node.js app 기준 -
FROM node:10 --Base Image를 정한다 <image명>:<버전> / 생략 시 lastest로 가장 최신버전을 받아온다.
WORKDIR /usr/src/app --WORKDIR을 지정하지 않을 시, 아래 CD 명령어에서 컨테이너 내부의 root 경로에 파일 을 복사한다. 이는 두 가지 문제점을 발생 시킨다.
-- 1. root 경로가 지저분해진다.
-- 2. 현재 프로젝트 내 폴더와 root에 위치한 폴더 중 이름이 중복된 파일이 있을 경우, 필 요한 파일임에도 CD 시 덮어쓰기가 되버린다.
-- application의 working directory로 설정
CD package.json ./ --좀 더 효율적으로 이미지를 빌드하기 위함이다. 아래 RUN 명령어 위에서 모든 파일을 복 사해버리면, 실제 다운받는 모듈에 대한 설정은 변경되지 않고 소스코드만 변경되었음에 도 RUN 명령어에서는 파일 변경을 감지해서 필요한 모듈을 캐시에서 사용하지 않고 전체 다시 다운 받는다.
이를 방지하기 위해 npm install 명령어를 실행하기 위해 필요한 파일만 상단에서 먼저 복 사 하면, 이후 소스코드 수정 후 재빌드시에 변경 내용을 감지하지 않아 캐싱된 모듈을 그 대로 사용하여 더 효율적으로 빌드가 가능하다.
RUN npm install --이미지 생성 시 필요한 명령어를 처리하는 부분. 주로 추가적으로 필요한 파일을 다운받 는 용도로 사용한다.
npm install은 node app에서 package.json에 명시된 모듈들을 다운받는 용도로 사용한다.
CD ./ ./ -- 파일을 복사하는 명령어.
-- CD [ Dockerfile 경로 기준 옮길 파일 경로 ] [ 컨테이너 내부 파일 경로 ]
EXPORT 8080 -- 컨테이너 내부에서 app이 돌아가는 port 지정
CMD ["node", "server.js"] -- 컨테이너 내부 app 실행 커맨드 명령어
!! Dockerfile로 이미지 만들어보기!!
- 이미지 생성 명령어
docker build -t woori/test:10 ./
docker run -d -p 8080:8080 woori/test:10
- t option : 이미지 이름 지정
- p option : 컨테이너 내부 포트와 외부에서 접근하기 위한 포트 지정
( 컨테이너는 논리적으로 격리되어 있어 내부와 외부 포트를 mapping 해줘야 함 )
- d opton : attach의 반대, detach / 명령어 실행하고 바로 나옴
( attach 와 유사 -it )
1) Base Image를 local 이미지를 가져옴
2) 임시 컨테이너를 생성하여 Base Image의 스냅샷을 하드디스크로 옮김
3) RUN 커맨드를 통해 필요한 파일을 다운받아 컨테이너 내부의 하드 디스크에 적재
( node app은 컨테이너 내부의 node_modules 폴더 아래에 관련 모듈이 설치됨 )
4) CMD 커맨드를 컨테이너 내부 커널로 실행 가능하도록 지정
5) 새로운 이미지 생성 및 임시 컨테이너 삭제
[ Docker volume 사용하기 ]
CD 명령어는 파일을 "복사" 하는 개념이라, 소스 코드에 변경이 일어날 경우 이미지 빌드를 매번 다시 해주어야 한다.
VOLUME 명령어는 파일을 "참조"하는 개념이라, 소스 코드에 변경이 일어나도 컨테이너만 재실행 해주면 된다.
VOLUME 명령어는 run 실행 시에 사용하는 option으로, Dockerfile에는 COPY 명령어 사용이 가능하므로
개발 단계에서 테스트 시에 사용하기에는 용이.
운영에서는 COPY 기능 그대로 사용.
docker run -d -p 8080:8080 -v /usr/src/app/node_modules -v %cd%:/usr/src/app woori/test:10
- mac OS에서는 %cd% 대신에 $(pwd) 사용
'배포 관리 도구 > Docker' 카테고리의 다른 글
[ Docker ] 배포된 image, rebuild 하기 (0) | 2024.03.06 |
---|---|
[ Docker ] Dockerfile을 빌드와 실행으로 나눠보자 (0) | 2023.03.09 |
[ Docker ] 도커 컴포즈 개념 알기 (2) | 2023.03.02 |
[ Docker ] 기본적인 도커 클라이언트 명령어 알아보기 (0) | 2023.02.13 |