우선 컨테이너는 운영체제를 직접 설치하는 것이 아닌 흉내내는 것이다.
DockerFile을 생성한다.
From - Base Image, 운영체제 작성
Docker File은 설정파일이다.
어떤 프로그램이, 어떠한 운영체제로 돌아가고, 어떻게 컨테이너가 켜졌을 때 안에 있는 프로그램을 어떻게 실행할 것인지 등 설정에 대한 파일이다.
Docker Cli를 사용하여 Docker build를한다. "docker build ."
build가 되면, Docker Server가 Docker Image를 만든다.
하지만 지금 env파일이 Docker에 올라가고 있다.
git에 gitignore가 있듯이, docker에 dockerignore가 있다.
.dockerignore로 생성하여 .env를 적어주자.
이렇게하고 docker build하면 이미지 생성은 문제 없이 잘 된다. 하지만 직접 실행했을 때도 올바르게 될까?
당연하게도 PORT가 적힌 env파일이 존재하지 않기 때문에 실행시 오류가 난다.
이 때 '--env-file' 옵션을 사용할 수 있다.
지금 env파일에 해당되는 환경변수들은 객체화하여 참조시키고 있다.
build할 때는 환경변수가 구멍난채로 빌드가 되지만, 위 옵션을 사용하여 컨테이너를 띄워 사용할 때 env 파일에 있는 정보를 주입하여준다.
올바르게 실행된 것을 볼 수 있다.
캐싱을 사용하여 install 검토
기존 코드
FROM node:18
COPY . .
RUN npm install
RUN npm run build
CMD ["npm", "start"]
지금 코드를 보면, 모든 파일을 한 번에 복사한 다음 npm install을 실행한다.
이 경우 프로젝트의 어떤 파일이든 변경되면 npm install 단계부터 다시 실행해야 한다.
캐싱을 사용하여 개선해보자
개선된 코드
FROM node:18
COPY package*.json .
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "start"]
COPY, RUN, ADD 명령어는 실행할 때마다 캐시를 생성한다.
처음에 package.josn과 pakage-lock-json을 복사한다.
package.json 또는 package-lock.json 파일이 변경되지 않았다면, Docker는 이전에 캐시된 npm install 명령어의 결과를 재사용할 수 있다. 이는 의존성 설치에 필요한 시간을 절약해준다.
똑같은 파일을 재빌드한 경우
위에 캐시된 데이터를 갖고와서, 빌드가 1초만에 끝난다.
'Infra > Docker' 카테고리의 다른 글
Docker volume 활용한 개발환경 구축 (0) | 2023.12.11 |
---|---|
Port mapping (0) | 2023.12.10 |
Docker 명령어 정리 (0) | 2023.12.09 |