- [ backend/docker ][docker] 이미지 빌드 (빌드 컨텍스트/프로세스/캐싱/멀티 스테이지)2025-09-15 04:20:06도커는 이미지를 만들 때 Dockerfile을 사용한다. Dockerfile은 컨테이너 실행에 필요한 명령어들이 담긴 파일인데, 여기에는 필요한 패키지를 설치하거나 소스 코드를 복사하는 명령어들이 적혀 있다. 근데 이러한 파일들은 어디에서 복사해오는 걸까? 지금부터 빌드 컨텍스트와 이미지 빌드의 전반적인 과정을 살펴보자. 빌드 컨텍스트`docker build`로 이미지를 빌드할 때 반드시 `PATH`를 전달해야 한다. 여기서 지정한 `PATH`가 빌드 컨텍스트가 된다. 빌드 컨텍스트는 도커가 이미지 빌드 과정에서 접근할 수 있는 파일들의 작업 공간이다. 우리가 `COPY`, `ADD` 같은 명령어로 가져오는 파일들은 전부 이 빌드 컨텍스트 안에서만 참조할 수 있다.Sending buid context t..
[ backend/docker ][docker] GitHub Actions에서 도커 캐싱하기(cache from/cache to)2024-02-11 21:05:55CI/CD에서는 이미지 빌드 실행 시간을 최소화하는 것이 중요하다. 따라서 도커 파일을 작성할 때 각 레이어를 작은 단위로 분리하여 효율적으로 캐싱되도록 설계하는 것이 좋다. 하지만 깃헙 액션의 특성상 새로운 환경의 러너를 할당받게 되어 이전 빌드 내용이 남아있지 않아 캐시를 활용할 수 없었다. 도커에 대해 좀 더 공부하다보니 도커에서 캐싱할 수 있는 옵션이 있었다. 이미지 빌드 시에 `--cach-from` 및 `--cache-to`를 사용하여 캐싱을 관리할 수 있다. 지금부터 이러한 옵션을 활용하여 이미지 빌드 시간을 최적화해보자. 캐시 유형 `inline` - 빌드 캐시를 동일한 이미지에 내장하어 레지스트리에 푸시될 때 캐시도 함께 푸시한다. `registry` - 빌드 캐시를 별도의 이미지에 내장..
[ backend/docker ][docker] Docker Compose로 멀티 컨테이너 어플리케이션 만들기 (yaml/volumes)2024-01-16 22:16:12이번엔 도커 컴포즈를 이용하여 멀티 컨테이너 어플리케이션을 만들 것이다. 멀티 컨테이너를 구축하면 서비스별로 컨테이너를 만들기 때문에 각 컨테이너가 한 가지 일만 수행하고, 서로의 리소스에 영향을 미치지 않는다는 장점이 있다. Docker Compose를 사용하는 이유 docker CLI의 단점 결론부터 말하면 도커 CLI는 단일 서비스에 최적화 되어있기 때문에 복잡한 멀티 컨테이너를 다루기엔 적합하지 않다. 도커 컨테이너는 격리된 환경을 가지므로 다른 컨테이너와 통신하기 위해서는 동일한 네트워크에 배치해줘야 한다. 이처럼 멀티 컨테이너를 위한 설정으로 인해 CLI 명령어가 길어지고 복잡해진다. docker CLI로 멀티 컨테이너를 띄울 때의 단점 복잡성 및 가독성 : 네트워크, 볼륨 등 멀티 컨테이너 ..
[ backend/docker ][docker] 캐싱으로 이미지 빌드 속도 향상시키기 (Dockerfile/build/run)2023-12-29 23:40:07앞에서 알아본 도커 개념을 바탕으로 도커 컨테이너에 어플리케이션을 띄워볼 것이다. Dockerfile을 이용하여 이미지를 빌드하고 도커 CLI를 이용하여 컨테이너를 실행시켜보자. Dockerfile 작성하기Dockerfile이란?이미지를 빌드하기 위해서는 Dockerfile을 작성해야 한다. Dockerfile은 이미지를 빌드하기 위한 명령들이 포함된, 파일 확장자가 없는 텍스트 기반의 파일이다.FROM node:20RUN apt-get update && apt-get install -y tiniWORKDIR /app/wasCOPY was/package*.json ./RUN npm installCOPY was .RUN npm run buildCMD ["tini", "--", "npm", "run", "s..
[ backend/docker ][docker] docker 시작하기 (아키텍처)2023-12-29 00:04:21docker를 공부하다보면 허브, 레지스트리 등 생소한 용어가 많이 등장한다. 허브는 뭐고, 레지스트리는 또 뭐야? docker architecture 도커는 클라이언트-서버 구조를 갖는다. 클라이언트*는 데몬*과 통신하여 도커 컨테이너를 구축하고 실행 및 배포할 수 있다. *docker client (=`docker`) : 도커 사용자가 도커와 상호작용하는 주요 방법이다. *docker daemon (=`dockerd`) : 도커 API 요청을 수신하고 이미지/컨테이너/네트워크/볼륨 같은 도커 개체들을 관리한다. docker registry 도커 레지스트리는 도커 이미지를 저장하고 관리하는 서비스다. 도커 허브가 레지스트리의 한 예로, 누구나 사용할 수 있는 퍼블릭 레지스트리다. 하지만 개인이나 조직이..
[ backend/docker ][docker] docker 시작하기 (컨테이너/이미지/레이어)2023-12-28 21:55:22도커는 애플리케이션을 컨테이너로 패키징하고 배포하는 플랫폼이다. 도커의 핵심인 컨테이너와 이미지에 대해 알아보자. container컨테이너의 사전적 의미는 무언가를 담는 용기를 말한다. 실제로 기술적인 컨테이너도 이와 유사한 개념이다. 컨테이너는 1) 애플리케이션을 실행하는 2) 가상화된 환경이다. 즉, 1) 애플리케이션의 실행에 필요한 라이브러리, 설정 파일들을 포함하고 2) 격리된 환경에서 실행할 수 있도록 도와주는 기술이다. 가상머신도 로컬과 분리된 실행 환경을 제공하는데 왜 컨테이너를 사용하는 걸까? 가상머신을 설치해본 사람은 알겠지만, 가상머신을 실행하기 위해서는 무거운 OS를 설치해야 한다. (API 서버를 실행하기 위해 운영체제를 통째로 올리는 셈이다!) 그리고 OS(호스트) 위에 OS(가상..