[Docker] 2.도커 이미지 직접 만들기
어려운 내용이 들어가면 내가 이해하기 어려우니까 도커에 대한 간단한 글
도커 이미지 직접 만들기
도커 이미지는 Dockerfile을 build하여 직접 만들 수 있다.
도커 파일의 예제
# Dockerfile
FROM openjdk:11-jdk-slim as builder
COPY . .
WORKDIR /
RUN chmod +x ./gradlew
RUN ./gradlew bootjar
FROM openjdk:11-jre-slim
COPY --from=builder build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
위 예제는 gradle 프로젝트 전체를 복사하고 이미지 빌드 과정 내부에서 gradle 프로젝트를 빌드하고 실행하기 때문에 굉장히 시간이 오래 소요된다. 보통은 빌드를 한 후 파일을 이미지 빌드에 포함시키는 방법을 사용한다.
# Dockerfile
FROM openjdk:11-jre-slim
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
도커파일도 최적화를 하여야 하며 위 경우 내부에서 빌드가 아닌 실행만 이루어지기 때문에 jdk보다 상대적으로 가벼운 jre 이미지를 사용하였다.
- FROM <이미지>:<태그> : 정규화 된 Docker 이미지 이름태그>이미지>
- COPY: 지정된 폴더를 컨테이너의 폴더에 복사
- WORKDIR <경로> : 컨테이너 내부의 현재 디렉토리 변경경로>
- RUN [“command”, “param1”, … ] : 이미지 빌드 과정에서 필요한 커맨드 실행
- ENTRYPOINT [“command”, “param1” .. ] : 컨테이너를 실행 할 때 실행되야 하는 커맨드
- CMD [“command”, “param1”… ] :
- EXPOSE
: 컨테이너가 리스닝할 포트 및 프로토콜 설정. 컨테이너를 실행 할 때 -p 옵션을 통해 포워딩 해주어야 함. - ENV: 환경 변수 설정
- ARG: 이미지 빌드시 넘어올 수 있는 인자 설정
빌드하기
$ docker build [dockerfile 경로]
옵션 | 설명 |
---|---|
–force-rm=false | 이미지 생성에 실패 했을 경우 임시 컨테이너 삭제 |
-no-cahce=false | 이전 빌드에서 생성된 캐시를 사용하지 않음. 도커는 기본으로 각 과정을 캐시함 |
-q, –quiet=false | RUN의 실행 출력 결과를 표시하지 않음 |
–rm=true | 이미지 생성에 성공 했을 경우 임시 컨테이너 삭제 |
-t, –tag=”” | 저장소 이름, 이미지 이름, 태그 설정 <저장소>/<이미지>:<태그>태그>이미지>저장소> |
예시
$ docker build -t zkdlu/my_image:v1 .
Docker 로그인
$ docker login -U
Docker Hub에 Push/Pull
$ docker push zkdlu/my_image:v1
$ docker pull zkdlu/my_image:v1