Docker image Build(도커 이미지 빌드하기)

2022. 1. 28. 17:05DevOps/Docker & kubernetes

도커 이미지의 구조에 대한 그림이다. 차곡차곡 쌓여저 가는것을 확인할 수 있을 것 이다. 실제로 도커 이미지 구조는 레이어 아키텍쳐 라는 개념을 바탕으로 해서 변경점이 생길때 마다 순차적으로 상단에 차곡차곡 쌓이는 것을 확인할 수 있다. 그렇기에 우분투-nginx-web app cource으로 하나씩 하나씩 쌓여지게 되는 것이다. 이렇게 컨테이너를 생성하게 되면은 이미지 레이어 라는 형태로 컨테이너가 실행될때 Read Only 형태로 실행이 된다. 또한 컨테이너 안에 R/W(read, write) layer라는 컨테이너 layer가 생성이 된다.

 

docker images 명령어를 사용하면 해당 운영체제의 로컬에 보관중인 이미지 목록을 확인할 수 있다. 또한 inspect 명령어를 통해서 헤쉬값으로 되어있는 배열형태를 확인할 수 있다. 

 

Dokcerfile없이 이미지를 생성하기 위해서는 아래의 명령어를 사용하면 된다. 변경점을 저장하는 명령어로서 기존 컨테이너를 바탕으로 해당 컨테이너에서의 변경점을 만든 후 커밋을 하는 개념이다.

docker commit -a test -m "First Commit" ubuntu my_ubuntu:v1
  -a \ 누가 이 변경점을 만드는것인지에 대한 내용을 저장한다.
  -m \ 커밋 메세지이다.
  ubuntu \ 컨테이너 이름이다.
  my_ubuntu:v1 \ 이미지의 이름이다.

먼저 my_ubunt라는 컨테이너를 만든 후 my_file을 하나 생성하도록 하자. 이 후 ctr+p+q를 눌러 나와주도록하자. docker가 삭제가 되는것이 아니라 잘 실행되는것을 확인할 수 있을 것이다.

이 후 상단의 명령어를 실행해 보면 잘 실행이 되는것을 확인할 수 있을 것 이다. inspect를 통해서도 잘 확인할 수 있다.

 

도커 파일을 기반으로 새로운 이미지를 형성할 수 있는데 아래의 명령어는 도커 파일의 문법이다. 지시어, 인자값으로 구성되어 있으며 6step으로써 순차적으로 진행된다. 

FROM node:12-alpine
RUN apk add --no-cache python3 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

이런 도커 파일을 준비한 후 아래의 도커 빌드 명령어를 통해서 도커 파일 기반으로 이미지를 실행할 수 있다. 빌드 명령어가 지원하는 옵션은 굉장히 다양하지만 기본적으로는 아래의 내용을 알면 된다.

docker build -t my_app:v1 ./
==> tag의 약자로서 현재 디렉토리(./)를 기반으로 빌더를 할 건데
   결과물에 대해서 my_app:v1 라는 테그를 생성해라

docker build -t my_app:v1 -f example/MyDockerfile ./
== > 경로를 나타내는 f는 기본적으로 현재 디렉토리에서 만들게 될 건데
     다른 도커빌드를 하게 될 경우 사용한다.
     빌드의 결과물에 my_app:v1이라는 테그를 하겠지만 도커파일은 -f이하를 사용해라 라는 의미다.

 

.dockerignore라는 것이 하나 있는데 gitignore와 같은문법을 가지고 있으며 알아두면 좋다.

변경점을 관리할때 해당 파일을 무시하기 위한 기능이다. 도커도 동일하며 문법도 동일함을 알 수 있다. 도커가 이미지를 빌드할때 특정 디렉토리나 파일 목록을 제외하기 위한 목적을 가지고 있다.

# comment
*/temp *
*/*/temp*
temp?

*.md
!README.md

'DevOps > Docker & kubernetes' 카테고리의 다른 글

Docker images 압축과 불러오기  (0) 2022.01.28
Dockerfile 문법정리  (0) 2022.01.28
Docker log 확인 및 다뤄보기  (0) 2022.01.26
Docker Volume 다루기  (0) 2022.01.24
Docker Network 구조  (0) 2022.01.18