잊어버리기 전에 간단하게라도 정리하는 도커 관련 글
어느정도 퍼블리싱은 마무리가 되는 중에 새로 해야할 일이 생겼다
"백에서도 프론트를 확인해야하니 도커파일을 작성해라"
문제가 발생했다
도커도, 도커파일도 개념을 모르는 건 아니었는데 도커파일을 작성하는 방법은 모른다
도커파일 그거 어떻게 만드는건데...? 뭘 작성하는건데?
오늘 들은 설명을 잊어버리기 전에 기억나는대로 정리해보자
📌 도커를 사용하는 이유
도커는 개발 환경을 이미지화 시키고 해당 이미지를 이용해서 개발이나 배포환경을 컨테이너화 시킨다
그러면 세부적인 환경설정 없이도 다른 환경에서 프로젝트를 실행시킬 수 있게된다
📌 도커 이미지란?
도커 이미지는 프로그램, 라이브러리, 설정 파일 등을 포함한 실행 가능한 패키지
쉽게 말하면 하나의 프로그램을 실행하는 데 필요한 모든 것을 담은 파일
도커 파일을 빌드해서 생성할 수 있다
📌 도커 파일이란?
도커 이미지를 만들기 위한 설정 파일
특정 개발환경을 만들기 위해서 어떤 OS를 사용할지, 어떤 프로그램을 설치할지, 어떤 명령을 실행할지 등이 작성되어있다
예를들면 도커 파일은 어떤 재료를 넣고 요리할 지 적어놓은 레시피,
도커 이미지는 레시피를 통해 도출한 요리된 음식,
도커 컨테이는 음식을 실제로 먹을 수 있도록 음식을 접시에 담아 손님에게 제공하는 것
좀 더 자세하게 이해해 보자고
아무것도 설치되어 있지 않은 PC에서 프론트를 띄우고 싶어
해당 프론트 화면을 보려면 노드도 필요할거고, 해당 화면에 관련된 코드도 필요할거고, 실행시킬 명령어도 필요할텐데...
=> 이 과정에서 사용되는 모든 명령어들을 모아놓은 파일 (이라고 나는 이해했다)
도커파일을 더 자세히 살펴보자
(일단은 이번에 프로젝트 할 때 작성한 도커파일)
FROM node:21 AS build-stage
✅ node:21을 베이스 이미지로 사용
- 해당 명령어는 Node.js 21이 설치된 도커 이미지를 기반으로 사용
- 즉, Node.js와 관련된 실행 환경이 이미 포함된 상태에서 시작
- AS build-stage는 멀티스테이지 빌드를 위한 별명으로, 나중에 다른 스테이지에서 참조 가능
COPY . /code
✅ 현재 디렉토리를 컨테이너의 /code 디렉토리에 복사
WORKDIR /code
✅ 컨테이너 내부의 작업 디렉토리를 /code로 변경
- 이후 실행되는 명령어들은 모두
/code디렉토리에서 실행 (cd /code명령어와 같은 역할)
RUN npm install
✅ 프로젝트에 필요한 패키지 설치
npm install을 실행하여package.json에 정의된 모든 패키지를 설치
CMD ["npm", "run", "start"]
✅ 컨테이너 실행시 npm run start 실행
📌 docker-compose.yml 파일의 용도와 필요한 이유
이전 글에 따르면 도커 컴포즈는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구라고 했는데...?
지금은 도커 파일이 하나밖에 없는데 왜 필요한건지?
👉 사실 도커 컴포즈는 단순히 여러 개의 컨테이너를 실행하는 것 뿐만 아니라, 단일 컨테이너라도 실행을 쉽게 자동화하기 위해 사용
일단 이번 프로젝트에서 만든 도커 컴포즈 파일을 살펴보자
services:
server:
- 여러 개의 컨테이너를 정의할 수 있는 서비스 그룹
- 여기서는 server라는 하나의 서비스 컨테이너를 실행
platform: linux/amd64
- 특정 플랫폼에서 실행하도록 설정
build:
context: .
dockerfile: docker/Dockerfile
context: .- 현재 디렉토리에서 빌드를 수행
dockerfile: docker/Dockerfiledocker/Dockerfile을 사용해 이미지 빌드
image: live-tino-fe
- 빌드된 이미지를
live-tino-fe라는 이름으로 저장
volumes:
- .:/code
.:/code- 현재 디렉토리를 컨테이너 내부의
/code디렉토리에 마운트 - 로컬 파일을 컨테이너 내부와 동기화해서 로컬에서 코드가 수정되면 컨테이너 안에서도 변경 사항이 반영
- 현재 디렉토리를 컨테이너 내부의
ports:
- 3000:3000
- 호스트:컨테이너 포트를 매핑
- 내 컴퓨터의 3000번 포트로 접속하면 컨테이너 내부의 3000번 포트로 연결됨
(내 컴퓨터의 3000번 포트랑 컨테이너 내부의 3000번 포트는 숫자만 똑같지 결국 다른거니까..! 둘을 연결해주는 과정)
restart: always
- 컨테이너가 갑자기 종료되더라도 자동으로 재시작
💡 그래서 도커 컴포즈가 왜 필요하다고?
docker build,docker run,docker volume,docker restart같은 명령어를 각각 입력할 필요 없이docker-compose up한 줄로 실행 가능- 컨테이너가 종료되면 자동으로 다시 실행 되도록 설정할 수 있음
volumes를 설정해서 파일 변경 사항을 즉시 반영할 수 있음
즉, 개발의 편리함을 위해서 사용한다
이제 CMD에서 docker compose up을 하면?

화면을 바로 열 수 있길래 너무 신기했다는 이야기
'FE Study' 카테고리의 다른 글
| [FE] 웹 브라우저의 캐시 전략 (0) | 2024.10.09 |
|---|---|
| [FE] WebView (5) | 2024.10.03 |
| [FE] Speedy Web Compiler (2) | 2024.10.03 |
| [FE] FrontEnd에서의 Test (0) | 2024.09.27 |
| [FE] Web Worker (0) | 2024.09.26 |