CS/서버

Dockerfile 이용해서 이미지 만들고, 도커 허브에 배포하기

그해 2023. 5. 23. 20:32

 

도커 파일 (Dockerfile)을 통해 이미지를 만들고, 이를 실행시켜 컨테이너를 만들 수 있다.

Dockerfile

Dockerfile은 컨테이너를 만들 수 있도록 도와주는 명령어의 집합이다.

즉, 이미지를 생성하기 위한 용도로 작성하는 파일을 말한다.

  • 쉽고 간단 명확한 구문을 가진 text file 로 top-down 해석
  • 컨테이너 이미지를 생성할 수있는 고유의 지시어를 가진다.
  • 대소문자를 구분하지 않으나 가독성을 위해 사용한다.

문법

  • FROM : 컨테이너의 Base Image
  • MAINTAINER : 이미지를 생성한 사람의 이름 및 정보
  • LABEL : 컨테이너 이미지에 컨테이너의 정보를 저장
  • RUN : 컨테이너 빌드를 위해 base image에서 실행할 commands
  • COPY : 컨테이너 빌드시 호스트의 파일을 컨테이너를 복사
  • ADD : 컨테이너 빌드시 명령이 실행될 작업 디렉토리 설정
  • WORKDIR : 컨테이너 빌드시 명령이 실행될 작업 디렉토리 설정
  • ENV : 환경변수 지정
  • USER : 명령 및 컨테이너 실행 시 적용할 유저 설정
  • VOLUME : 파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
  • EXPOSE : 컨테이너 동작 시 외부에서 사용할 포트 지정
  • CMD : 컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정

Dockerfile

FROM openjdk:17-oracle
ARG JAR_FILE=build/libs/shop-0.0.1-SNAPSHOT.jar
COPY  ${JAR_FILE} myboot.jar
ENTRYPOINT ["java","-jar","/myboot.jar"]
  • From : 이미지를 생성할 때 사용할 이미지이다.
  • ARG: 변수선언으로 해당 경로에 있는 shop-0.0.1-SNAPSHOT.jar 이름의 파일을 변수로 선언한다는 의미한다.
  • COPY : 변수로 설정한 실행할 jar파일을 도커 컨테이너 내부에 myboot.jar이라는 이름으로 복사한다.
  • ENTRYPOINT : 컨테이너가 시작될 떄 실행할 스크립트 혹은 명령을 정의한다.

image 빌드하기

docker build -t shop .
docker images
  • -t : 특정 이름으로 이미지를 빌드한다는 의미다. 여기서는 shop이라는 이름으로 빌드했다.
  • . : Dockerfile의 경로를 나타낸다.

이제 이미지를 확인해보면 정상적으로 shop이라는 이름으로 이미지가 생성되었음을 확인할 수 있다.

container 실행

docker run -it -p 8081:8080 --name test shop

shop이라는 이름의 이미지를 test라는 컨테이너로 실행한다는 의미이다.

  • -p <external host port>: <container host port> : 로컬의 8081 포트를 컨테이너의 8080 포트와 매핑한다는 의미이다.
  • i : 컨테이너쪽 셀에 들어가서 명령을 가능하게 함
  • t : 터미널 기능 활성화 

 

만든 이미지 도커 허브에 배포하기

#1.  로그인 및 도커허브에 Repository 만들기
docker login -u [계정]

#2.이미지에 태그를 달아 새로운 이미지를 만든다 
docker tag 이미지이름 [계정]/[repository이름]:0.1 

#3. push 
docker tag [계정]/test:0.1

push 하기 전에 도커 허브에 레포를 만들고,  올릴 이미지를 태그를 달아 새로운 이미지를 만든 후에 해당 이미지를 push 한다.