Docker

도커 이미지와 컨테이너 : 기본 개념과 빌드

Yonggyu 2023. 10. 24. 15:42
반응형

 

이미지(Image)

도커 이미지는 컨테이너의 블루프린트 또는 템플릿입니다. 이미지에는 코드 및 코드를 실행하는 데 필요한 모든 도구와 설정이 포함됩니다. 이미지는 공유 가능한 패키지로, 한 번 정의하면 다른 시스템에서 여러 컨테이너를 실행할 수 있습니다. 이미지는 레이어(layer)라는 기술을 통해 빌드되며 변경사항을 저장하고 재사용할 수 있도록 합니다.

 

컨테이너(Container)

도커 컨테이너는 이미지를 기반으로 실행되는 실제 실행 인스턴스입니다. 컨테이너는 이미지의 복제본이며 도커 엔진에서 코드 실행 환경을 격리시킵니다. 이미지를 여러 컨테이너에서 실행하여 동일한 애플리케이션을 다른 시스템 또는 서버에서 실행할 수 있습니다. 컨테이너는 이미지를 기반으로 하며 도커 엔진에서 실행되므로 애플리케이션의 격리 및 이식성을 제공합니다.

 

요약하면 이미지는 애플리케이션 코드와 설정의 블루프린트이며, 컨테이너는 해당 이미지를 실행하는 실제 환경입니다. 이미지와 컨테이너의 구분은 도커의 핵심 원리 중 하나이며, 이미지를 기반으로 여러 컨테이너를 실행하여 애플리케이션의 확장과 관리가 가능하게 합니다.

 

도커 컨테이너로 어플리케이션 실행

도커는 컨테이너를 사용하여 애플리케이션을 실행합니다. 컨테이너 실행을 위해 먼저 이미지를 생성해야 합니다.

이미지 생성을 위해 Dockerfile이라는 파일을 사용하며, 이 파일에 컨테이너 설정을 정의합니다.

도커 파일은 컨테이너 내부 파일 시스템을 구성하고 필요한 패키지 및 설정을 추가합니다.

 

 

Dockerfile 기초 설정

원하는 도커 이미지를 기반으로 하려면 FROM 명령을 사용합니다.

이 명령을 통해 다른 베이스 이미지를 선택할 수 있습니다.

FROM node

위의 코드는 노드 애플리케이션을 위한 이미지를 사용의 예시 입니다.

FROM node는 도커 허브(Dokcer Hub)에서 노드 이미지를 가져오도록 명령하는 것입니다.

도커 허브(Dokcer Hub) : 컨테이너 이미지의 원격 저장소

 

 

다음으로, 이미지 내부로 파일을 복사하기 위해 COPY 명령을 사용합니다.

컨테이너 외부의 파일을 이미지 내부로 복사하려면 다음과 같이 작성합니다:

COPY . /app

이렇게 하면 현재 폴더의 모든 파일과 하위 폴더가 컨테이너 내부의 /app 폴더로 복사됩니다.

 

 

애플리케이션의 종속성을 설치

노드 애플리케이션을 위한 경우 npm install 명령을 실행합니다. 하지만 작업 디렉토리를 /app로 설정해야 합니다.

WORKDIR /app

작업 디렉토리를 /app로 설정 ( Copy위에 선언해야한다 )

 

RUN npm install

컨테이너 시작 명령 설정

 

다음으로, 컨테이너가 시작될 때 실행되는 명령을 설정해야 합니다.

이미지가 시작되고 서버를 실행하고 싶다면 CMD 명령을 사용합니다.

CMD ["node", "server.js"]

이 명령은 이미지를 기반으로 새로운 컨테이너가 시작될 때 실행됩니다.

 

마지막으로, 컨테이너가 로컬 머신에서 특정 포트를 사용하도록 하려면 EXPOSE 명령을 사용합니다.

EXPOSE 80

이 명령을 통해 컨테이너의 포트 80을 로컬 머신에 노출합니다.

 

Dockerfile 예시

FROM node

WORKDIR /app

COPY . /app

RUN npm install

EXPOSE 80

CMD ["node", "server.js"]

 

 

도커 이미지 빌드

도커 파일 위치로 이동후 다음 명령을 실행하여 도커 파일을 기반으로 이미지를 빌드합니다.

docker build .

이미지 빌드가 성공하면 이미지 ID를 얻게 됩니다

 

컨테이너 실행

이미지 빌드후 이미지 ID로 컨테이너를 실행한다.

docker run -p 3000:80 [이미지_ID]

이 명령은 호스트의 포트 3000번. EXPOSE 80을 했기 때문에 내부 도커 컨테이너 노출 포트를 80으로 넣는다.
이 옵션은 컨테이너의 포트와 호스트(로컬 머신)의 포트를 연결합니다.

 

 

 

컨테이너 중지

docker ps (ps : 프로세스)

컨테이너를 중지하려면 다른 터미널에서 위 명령을 사용하여 실행 중인 컨테이너를 나열합니다.

해당 컨테이너의 이름 또는 ID를 가져온 후 다음 명령을 실행하여 컨테이너를 중지합니다

 

docker stop [컨테이너_이름_또는_ID]

컨테이너가 중지되면 해당 포트에서 애플리케이션에 더 이상 접근할 수 없습니다.

 

대화형 모드

docker run -it [이미지명]

컨테이너를 실행할 때 -it 플래그를 추가하여 대화형 모드를 활성화할 수 있습니다.

대화형 모드로 컨테이너에 들어가면 컨테이너 내부에서 명령을 실행하거나 애플리케이션을 상호 작용할 수 있습니다.

 

여러 컨테이너 실행

동일한 이미지를 기반으로 여러 컨테이너를 실행할 수 있습니다.

도커는 이미지의 인스턴스로서 컨테이너를 생성하므로 여러 개의 동일한 이미지를 사용하여 별도의 컨테이너를 실행할 수 있습니다.

도커 이미지와 컨테이너의 중요한 특징 중 하나는 이미지를 기반으로 여러 컨테이너를 실행할 수 있다는 것이며, 이미지의 변경사항을 저장하고 재사용할 수 있다는 점입니다.

이러한 개념은 도커를 사용하여 애플리케이션을 확장하고 관리하는 데 매우 유용합니다.

 

 

컨테이너 이미지 업데이트

이미지의 모든 것은 읽기 전용이며 과거에 해당 코드를 복사했기 때문에 단순히 코드를 변경하여 편집할 수 없다.

업데이트된 소스 코드를 새 이미지로 복사하려면 이미지를 다시 빌드해야 합니다.

즉, 변경사항을 업데이트하고 싶으면 새 이미지를 다시 빌드해야한다.

 

 

 

728x90
반응형

'Docker' 카테고리의 다른 글

도커 이미지 공유하기  (2) 2023.10.26
도커 이미지 & 컨테이너 관리  (0) 2023.10.25
도커 이미지와 레이어 기반 아키텍처  (0) 2023.10.25
도커 (Docker) 개념  (2) 2023.10.24