We will find a way, we always have.

-interstellar

DevOps/도커

[도커] 이미지와 컨테이너

Redddy 2022. 8. 12. 17:47

이미지는 읽기/쓰기 엑세스 권한이 있는 인스턴스를 실행하는 컨테이너의 "블루프린트"이다.

이미지를 통해 컨테이너가 서로 독립적으로 존재함과 동시에 동일한 이미지를 기반으로 할 수 있다.

컨테이너는 이미지를 기반으로 하는 격리된 소프트웨어 유닛이다. 이미지의 실행중인 인스턴스이다.

 

 

도커 실습 코드

# 자체 명령어 자체 이미지를 빌드할 때 실행할 명령어
# 이미지 설정을 위한 도커의 명령
# 이미지를 기반으로 컨테이너 실행
FROM node

# 모든 수행을 app 파일 안에서 진행하라는 의미
WORKDIR /app

# 첫번째 . 모든 파일 의미, 두번째 .는 그 파일을 저장해야하는 이미지 내부의 경로
# Host file system    image/ container file system
# app에 저장됨 만약 없다면 이미지와 컨터이너에 생성됨
# COPY . ./ 이러면 현재 위치 카피
COPY . ./


# npm 설치 진행
RUN npm install

# 로컬시스템에 특정 포트로 노출시키고 싶다면 익스포즈
EXPOSE 80

# RUN과의 차이는 이미지가 생성될 때 실행되지 않고 이미지를 기반으로 컨테이너가 실행될 때 실행함
CMD [ "node", "server.js" ]

 

 

# 도커 빌드 하기
docker build .

# 주어진 ID 로 로컬 호스트 가동
# -p란 퍼블릭을 의미하며 해당 명령입력시 공개된다.
docker run -p 3000:80 [이미지 ID]

# 종료하는 방법은 ps 를 통해 이름을 찾고 stop 명령으로 종료한다.
# 이름 찾기
docker ps

# 종료
docker stop [이미지 name]

 

js 파일에서 html을 수정하였다면 도커에서는 처음부터 다시 이미지를 빌드해야 한다.

 

이때 캐시를 사용하여 처음 보다는 더 빨리 빌드 할 수 있다. 

변경된 부분이 없다면 캐시를 사용하는데 만약 변경된 부분이 있다면 다시 설치 또는 복사를 진행한다.

우리가 변화시킨선 js 파일이지 npm 이 아니다. 

npm install은 한번만 실행시키기 위해 순서를 COPY . /app 보다 위에 위치 시켰고, package.json 파일도 app에 미리 복사 시켜두었다.

 

FROM node

# 모든 수행을 app 파일 안에서 진행하라는 의미
WORKDIR /app

COPY package.json /app

# 소스코드가 복사되기 전에 npm 인스톨 레이어가 옴
# npm 여러번 install 하지 않음
RUN npm install

COPY . /app

EXPOSE 80

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

 

docker

 

'DevOps > 도커' 카테고리의 다른 글

[도커] 이미지 & 컨테이너 삭제  (0) 2022.08.12
[도커] 파이썬과 인터렉티브  (0) 2022.08.12
[도커] Attached 모드 & Detached 모드  (0) 2022.08.12
[도커] 도커 첫 발걸음  (0) 2022.08.12
[도커] 도커와 컨테이너  (0) 2022.07.25