- [ 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구글에 시스템 아키텍처만 검색해봐도 docker 로고를 쉽게 찾아볼 수 있다. 사람들은 어떤 이유로 docker를 선택했을까? docker란?도커는 컨테이너 기반 가상화 플랫폼으로, 어플리케이션을 패키징하고 배포하는 데 사용된다. 이렇게만 설명하면 도커가 무엇인지 아직 감이 안 올 것이다. 도커를 이해하기 위해 몇 가지 용어를 살펴보자. container도커 컨테이너는 어플리케이션을 실행하는 가상화된 환경을 의미한다. 즉, 어플리케이션의 실행에 필요한 모든 것들을 포함하고 (이미지) 격리된 환경에서 실행할 수 있도록 (이미지 실행 = 컨테이너) 도와주는 기술이다. 가상머신도 로컬과 분리된 실행 환경을 제공하는데 왜 도커를 사용할까? 가상머신을 설치해본 사람은 알겠지만, 가상머신을 실행하기 위해서는 무거운..