본문 바로가기
Docker

7. 도커파일 -(2)

by shulk 2024. 11. 15.

4.  스프링 프로젝트를 도커로 실행

도커파일에 이렇게 스냅샵 파일을 복사하는데 컨테이너의 최상위인 상대경로로 복사 하는거다.

(컨테이너 어디에 복사하던 절대경로로 하던 맘대로)

FROM openjdk:17-jdk

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

 

인텔리제이 GUI로 직접 빌드하거나 명령어로 빌드하고 빌드하고나면 build-libs에 스냅샵 자르 파일이 생성되는데

이거로 이제 프로젝트를 실행 시키는거니 컨테이너에 이거를 복사해야한다.

$ ./gradlew clean build

 

이후 해당 컨테이너 로그 찍어보고 직접 크롬에서 요청해보니 정상 작동한다

$ docker build -t hello-server .
$ docker image ls
$ docker run -d -p 8080:8080 hello-server # 스프링 프로젝트 기본 포트번호는8080이다

 

5.  RUN:이미지를 생성하는 과정에서 사용할 명령문 실행

RUN은 이미지 생성 과정에서 명령어를 실행시켜야 할 때 사용한다.  

# 문법
RUN [명령문]

# 예시
RUN npm install

 

 

(1) RUN vs ENTRYPOINT 차이

RUN은 ‘이미지 생성 과정’에서 필요한 명령어를 실행시킬 때 사용하고 

ENTRYPOINT는 생성된 이미지를 기반으로 컨테이너를 생성한 직후에 명령어를 실행시킬 때 사용한다

 

예를들어 우분투 이미지 만드는데 거기에 Git이 깔려있으면 좋겠네 할때

두번째 run쪽 명령어는 리눅스의 어떠한것을 설치할때 사용하는 명령어

FROM ubuntu

RUN apt update && apt install -y git

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]

 

6.  WORKDIR: 작업 디렉토리를 지정

WORKDIR으로 작업 디렉터리를 전환하면 그 이후에 등장하는

모든 RUN, CMD, ENTRYPOINT, COPY, ADD 명령문은 해당 디렉터리를 기준으로 실행된다. 

그리고 현재 이렇게 호스트 최상위 경로에 있는 모든 파일을 컨테이너에 복사하는데 지금은 적어서 그러나 많은면 나중 컨테이너에서 복사된거 확인할때 복잡해보인다. 이문제를 해결하기 위해 WORKDIR 를 사용한다.

 

이렇게 하면 컨테이너 내부 접속하면 바로 my-dir 디렉토리에서 작업을 하게되고 저렇게 폴더안에 복사가 된다.

그냥 copy에 COPY ./ ./my-dir 이렇게 하는거랑 다른점 없지 않나? 생각할수도 있으나 둘다 복사는 하지만 WORKDIR는 작업 디렉토리가 변경되고 복사하게 된다.

 

7.  EXPOSE :컨테이너 내부에서 사용 중인 포트를 문서화하기

EXPOSE는 컨테이너 내부에서 어떤 포트에 프로그램이 실행되는 지를 문서화하는 역할만 한다. 

docker -p 8080:8080 … 와 같은 명령어의 -p 옵션과 같은 역할은 일체 하지 않는다. 쉽게 표현하자면 EXPOSE 명령어는 쓰나 안 쓰나 작동하는 방식에는 영향을 미치지 않는다. 

# 문법
EXPOSE [포트 번호]

# 예시
EXPOSE 3000

'Docker' 카테고리의 다른 글

9. 도커 컴포즈 -(2)  (0) 2024.11.18
8. 도커 컴포즈 -(1)  (0) 2024.11.18
6. 도커 파일 -(1)  (0) 2024.11.15
5. 도커 볼륨 -(2)  (0) 2024.11.14
4. 도커 볼륨 -(1)  (0) 2024.11.14