Infra/Docker

이미지 생성

최-코드 2024. 9. 10. 14:00

이미지를 생성해야 하는 이유 : 개발중인 애플리케이션을 도커화해서 배송과 배포가 쉽도록 만들기 위해서이다.

 

Dockerfile 

  • Docker가 인식하도록 특정 형식으로 작성된 텍스트 파일로, 명령어와 인자 형식으로 이루어져 있다.
  • 왼쪽에 명령어, 오른쪽에 명령어를 타이핑하면 된다. FROM, RUN과 같은 것이 명령어이다.

  • 이는 이미지를 만들기 위한 설정 파일이다.
  • FROM 명령어의 경우 컨테이너의 기본 운영체제를 설정해준다. 모든 도커 이미지는 또 다른 이미지에 기반을 두고 있다. 그 기반은 운영체제 혹은 사전에 운영체제에 기반해 생성한 이미지이다.
  • RUN 명령어의 경우 도커가 FROM에 설정한 기반 이미지에 특정 명령어를 실행하도록 해준다.
  • COPY 명령어의 경우 호스트 내의 파일이나 디렉토리를 이미지 내부로 복사하는 명령어이다. 첫 인자로는 복사할 파일을 써주고 두 번째 인자에는 붙여넣기 할 경로를 써준다.
  • ARG 명령어를 통해 변수를 선언할 수 있다. 예를 들어 ARG JAR_FILE=build/libs/~~.jar와 같이 선언할 수 있고, 이는 ${JAR_FILE}를 통해 불러올 수 있다.
  • ENTRYPOINT 명령어의 경우 이미지가 컨테이너로 실행될 때 작동할 명령어를 지정한다.
  • docker는 계층형 아키텍처로 이미지를 구축한다. 명령어 각 줄이 Docker 이미지의 새로운 계층이 된다. 각 계층은 이전 계층의 변경 사항만을 저장한다. 이 변경 사항에 대한 정보는 docker history <image> 명령어를 통해 알 수 있다.
이미지에서 부터 이미 파일시스템이 정해졌기 때문에 이미지 내부에 파일이 저장되어 있다. 따라서 패키지 설치나 파일 복사는 이미지를 빌드할 때 이뤄진다.

 

docker build

  • 도커파일을 이미지로 만들어주는 명령어이다.
  • 여러 단계와 작업별 결과를 볼 수 있는데, 모든 계층은 캐시에 저장되므로 특정 계층에서 실패하면 처음 계층부터 다시 빌드하지 않고 실패한 계층부터 다시 빌드를 한다.
  • 새로운 계층을 추가할 때도 마찬가지로 추가한 계층부터 빌드하게 된다.
  • 기본적인 형식으로는 docker build <위치> <image 파일 명>와 같다. build 시에 지정한 위치에 있는 Dockerfile을 자동으로 빌드시킨다.
  • -f 옵션을 주면 Dockerfile을 지정하여 빌드시킬 수 있다. 이 때 -f 전에 dockerfile이 있는 위치를 설정해줘야 한다.
  • -t 옵션을 주면 이미지에 태그를 지정할 수 있다. 지정하지 않으면 latest로 설정된다.
  • 예시로는 docker build . -f dockerfile.txt -t choi/my-first-image이와 같다.
  • 이때 docker 계정 아이디 붙이고 이미지 명을 붙여줘야 한다. ex) choi/my-first-image 

docker push <이미지> : docker hub에 이미지를 업로드하는 명령어이다. 이 때도 마찬가지로 꼭 계정 아이디를 붙여줘야 한다.