04 Docker File
04 Docker File
1. Docker File
1. Dockerfile
- Docker 이미지를 만들게 해주는 파일
- Dockerhub에 올려놓은 Docker 이미지가 아닌, 나만의 Docker 이미지를 만들고 싶을 때 사용
- 직접 만든 Spring Boot 프로젝트 자체를 Docker 이미지로 만드는 용도
2. Note
- 사용자가 도커파일이라는 스크립트를 작성함.
- 도커프로그램에서 도커파일을 읽어서 도커이미지를 만듬.
- 도커는 도커이미지를 가지고 컨테이너를 띄워서 쓸 수 있게 만듬.
2. From
1. From
- 베이스 이미지를 생성하는 역할
- Docker 컨테이너를 특정 초기 이미지를 기반으로 추가적인 셋팅함.
- 여기서 ‘특정 초기 이미지ʼ가 곧 베이스 이미지
2. 흐름
- 파일명 :
Dockerfile이라는 파일명으로 고정. - 내용
1 2
//JDK를 설치함. FROM eclipse-temurin:17-jdk
- 생성
1 2 3
// 맨 마지막에 경로 표기함 // 지금 명령어에서는 . docker build -t my-jdk17-server .
- 실행
1
docker run my-jdk17-server
- 결과
1 2
// 실행후 바로 종료 // 도커입장에서는 JDK17를 태우라고 명령했고, 그다음에 별도 명령이 없어서 종료됨.
3.Copy
1. copy
- 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달한다.
COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너에서 파일이 위치할 경로]
2. 흐름
- 파일 기준 : 도커파일 내 명령어로 존재
- 생성
1 2 3 4 5 6
FROM ubuntu // 이부분의 app.txt를 /app.txt에 복사함. COPY app.txt /app.txt ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
- 결과
1
// 도커내에 /app.txt 생성완료
3. copy 방법
1
2
3
4
5
6
7
8
// 특정파일
COPY app.txt /app.txt
// 디렉토리 전체
COPY myapp /myapp/
// 특정파일의 저장+이동
COPY *.txt /mytext/
3. dockerignore
1. dockerignore
- 특정 파일/ 경로를 지속적으로 무시하고 싶을 때 사용함.
- 별도 처리없이 그냥 등록해두면 깃처럼 자동으로 읽고 처리함.
2. 흐름
- 파일명 :
.dockerignore// 앞에 쩜 붙음. - 생성
1
readme.txt
4. ENTRYPOINT
1. ENTRYPOINT
- 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어를 뜻
1 2
ENTRYPOINT [명령문...] ENTRYPOINT ["node", "dist/main.js"]
2. 흐름
- 파일명 : 도커파일 내에 입력
- 생성
1 2 3
FROM ubuntu // 기본적으로 리눅스 명령어로! ENTRYPOINT ["/bin/bash", "-c", "echo hello"]
5. 스프링 부트실행
1. 테스트 환경
- 스프링 프로젝트 빌드(그레들 형태)
2. 흐름
- 그레들 빌드를 통해서 jar파일을 생성함.
- dockerfile에서 jar파일을 컨테이너로 이동함.
1 2
FROM eclipse-temurin:21-jdk COPY build/libs/*SNAPSHOT.jar app.jar
- 실행 후 작업으로
1
ENTRYPOINT ["java", "-jar", "/app.jar"]
6. Run
1. run
- 이미지 생성 과정에서 명령어를 실행시켜야 할 때 사용
- RUN -> ‘이미지 생성 과정 ʼ에서 필요한 명령어를 실행시킬 때 사용
- ENTRYPOINT -> 생성된 이미지를 기반으로 컨테이너를 생성한 직후에 명령어를 실행시킬 때 사용
- 문법
1 2
RUN [명령문] RUN npm install
2. 흐름
- Dockerfile 내 설정
- 흐름
1 2
//깃 설치함. RUN apt update && apt install -y git
7. WORKDIR
1. WORKDIR
- WORKDIR 으로 작업 디렉터리를 전환하면 그 이후에 등장하는 모든
RUN,CMD,ENTRYPOINT,COPY,ADD명령문은 해당 디렉터리를 기준으로 실행함. - 섞여있는 경우에
2. 흐름
- Docker파일 내에 실행
- 흐름
1
2
3
4
5
6
FROM ubuntu
//my-dir내에서 작업하는 것으로 변경
WORKDIR /my-dir
COPY ./ ./
ENTRYPOINT "/bin/bash", "-c", "sleep 500"]
- 결과
- 해당 도커파일에서는 모든 파일이 /my-dir에 생성
- 최초 접근 dir도 /my-dir로 변경됨.
8. EXPOSE
1. expose
- 컨테이너 내부에서 어떤 포트에 프로그램이 실행되는 지를 문서화하는 역할
docker -p 8080:8080와 같은 명령어의-p옵션과 같은 역할은 일체 하지 않음.- 쉽게 표현하자면 EXPOSE 명령어는 쓰나 안 쓰나 작동하는 방식에는 영향을 미치지 않는다.
This post is licensed under CC BY 4.0 by the author.