Docker는 애플리케이션을 컨테이너라는 가볍고 독립된 환경에서 실행할 수 있게 해주는 도구다.
컨테이너(Container)는 코드랑 실행에 필요한 라이브러리, 설정 등을 다 묶어서 하나의 패키지처럼 만드는 것이다.
이렇게 만든 하나의 패키지를 Container Registry에 저장한 후, 다른 사람들과 함께 사용한다.
이걸 쓰는 이유는
"내 컴퓨터에서도 잘 돌아가는데 왜 저 사람 컴퓨터에서는 안 돼?"
"내 컴퓨터에서도 잘 돌아가는데 왜 서버에서는 안 돼?"
를 방지하기 위해서다.
Docker을 사용하기 위해선 세 가지를 알아야 한다.
DockerFile
이미지를 만들기 위한 설정파일이다. 쉽게말하면내 애플리케이션 구동에 필요한 정보들을 정의한 것이다. 애플리케이션을 만들기 위한 레시피라고 생각하면 된다. 프레임워크, 라이브러리 등의 외부 디펜던시가 들어간다.
Image
DockerFile을 기반으로 만들어진 결과물이다. 코드, 동작에 필요한 파일 시스템, 의존 라이브러리를 하나의 이미지로 저장하는 것이다. 이 이미지를 통해 컨테이너를 실행하기 때문에, 어느 곳에서든 같은 환경으로 실행이 가능하다.
Container
이미지를 실행해서 만들어진 환경이다. 즉. 애플리케이션을 구동하는 곳이다.
실습
먼저 프로젝트의 루트에 DockerFile을 생성한다.
그리고 나는 node프로젝트를 사용했고, 내용을 다음과 같이 작성했다.
FROM node:16-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY index.js .
ENTRYPOINT [ "node", "index.js" ]
FROM node:16-alpine
베이스 이미지를 말한다. Node.js 16 버전이 설치된 Alpine Linux를 기반 이미지를 사용한다는 것이다.
이 이미지를 기반으로 컨테이너가 만들어진다.
https://hub.docker.com/search?badges=official
https://hub.docker.com/search?badges=official
hub.docker.com
여기 docker hub사이트에서 베이스 이미지들을 확인해볼 수 있다.
WORKDIR /app
컨테이너 안에서 작업을 진행할 경로를 /app으로 지정하는 것이다.
이후 모든 명령은 컨테이너의 /app 디렉토리를 기준으로 실행된다.
COPY package.json package-lock.json ./
현재 프로젝트 디렉토리에 있는 package.json과 package-lock.json 파일을 컨테이너의 /app 디렉토리로 복사한다.
RUN npm install
package.json과 package-lock.json에 정의된 라이브러리를 컨테이너에 설치한다.
COPY index.js .
현재 프로젝트 디렉토리에 있는 index.js 파일을 컨테이너의 /app 디렉토리로 복사한다.
ENTRYPOINT ["node", "index.js"]
컨테이너 실행 시 기본 명령어이다.
컨테이너가 실행될 때 Node.js로 index.js 파일을 실행하라는 설정이다.
DockerFile의 명령어에 대해선 다음에 다시 공부해보도록 하겠다.
이후 터미널에서 이미지를 만든다.
docker build -f Dockerfile -t docker-test .
-f = 도커파일
-t = 내가 만들 이미지 이름
docker run -d -p 8080:8080 docker-test
-d = 백그라운드에서 서버가 작동하는 동안 다른 동작도 가능하도록 함.
-p = 포트지정, 호스트 포트와 컨테이너 포트를 연결
docker ps
현재 작동되고있는 컨테이너를 확인할 수 있다.
이미지를 만들고, 컨테이너를 실행하는것 까지 완료했다.
다음엔 DockerFile에 대해 더 공부도 하고, Repository 관련해서도 작성해보겠다.
출처 :
https://youtu.be/LXJhA3VWXFA?si=rhFAAxQEkwsQ_aZZ
https://velog.io/@jungedlin/Docker
'기타 개발 관련' 카테고리의 다른 글
[Git] git stash란? git stash 사용법 명령어 모음 (0) | 2025.01.16 |
---|---|
지식재산능력시험(IPAT) 시험 정보 및 후기 (0) | 2023.06.02 |