본문 바로가기

Docker

[Docker] COPY·ENTRYPOINT 명령어와 Spring Boot 배포 실습

COPY : 파일 복사(이동)

 

의미 

copy는 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달한다

 

사용법

# 문법
COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너에서 파일이 위치할 경로]

# 예시
COPY app.txt /app.txt

 

 

파일 복사해보기

1. app.txt 파일 만들기

 

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

Dockerfile

 

FROM ubuntu

COPY app.txt /app.txt

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드

 

 

 

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

 

 

폴더 안에 있는 모든 파일들 복사

 

1. my-app 디렉터리 만들기, my-app 디렉터리 안에 파일 만들기

 

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

 

Dockerfile

FROM ubuntu

COPY my-app /my-app/

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드

 

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

 

 

와일드 카드 사용해보기

 

1. app.txt, readme.txt 파일 2개 만들기

 

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행


Dockerfile

FROM ubuntu

COPY *.txt /text-files/

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드
  • 주의) /text-files라고 적으면 안 되고 /text-files/라고 적어야 text-files라는 디렉토리 안에 파일들이 정상적으로 복사된다
docker build -t my-server .
docker run -d my-server
docker exec -it [Container ID] bash

ls

 

.dockerignore 사용해보기

특정 파일 또는 폴더만 COPY를 하고 싶지 않을 수 있다. 그럴 때 .dockerignore를 활용한다

 

1. .dockerignore 파일 만들기

 

.dockerignore

readme.txt

 

 

2.  Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

 

Dockerfile

 

FROM ubuntu

COPY ./ /

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드

 

 

$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

 

 

ENTRYPOINT : 컨테이너가 시작할 때 실행되는 명령어

 

의미 

ENTRYPOINT는 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어를 뜻한다. 

쉽게 설명하자면 ENTRYPOINT에는 미니 컴퓨터의 전원을 키고나서 실행시키고 싶은 명령어를 적으면 된다

 

 

사용법

# 문법
ENTRYPOINT [명령문...]

# 예시
ENTRYPOINT ["node", "dist/main.js"]

 

 

예제

Dockerfile

FROM ubuntu

ENTRYPOINT ["/bin/bash", "-c", "echo hello"]

 

$ docker build -t my-server .
$ docker run -d my-server
$ docker ps -a
$ docker logs [Container ID]

 

 

 

[실습] 백엔드 프로젝트(Spring Boot) 프로젝트를 Docker로 실행시키기

 

https://start.spring.io/

여기서 진행해도 되지만  나는 인텔리제이에서 작업 했다

 

 

  • Java 17 버전을 선택하자. 아래 과정을 Java17 버전을 기준으로 진행할 예정이다

2. 간단한 코드 작성

 

AppController

 

@Restcontroller
public class AppController {
	@GetMapping("/")
    public String home() {
    	return "Hello, World"
    }
}

 

3. Dockerfile 작성하기

 

Dockerfile

 

FROM openjdk:17-jdk

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

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

 

 

4. Spring Boot 프로젝트 빌드하기

 

$ ./gradlew clean build

 

 

5. Dockerfile 바탕으로 이미지 빌드하기

$ docker build -t hello-server .

 

6. 이미지가 잘 생성됐는 지 확인하기

$ docker image ls

 

 

7. 생성한 이미지를 컨테이너로 실행시켜보기

 

$ docker run -d -p 8080:8080 hello-server

 

8. 컨테이너 잘 싱행되고 있는 지 확인하기

$ docker ps

 

9. localhost:8080으로 들어가보기

 

10. 실행시킨 컨테이너 중지 / 삭제하기, 이미지 삭제하기

 

$ docker stop {컨테이너 ID}
$ docker rm {컨테이너 ID}
$ docker image rm {이미지 ID}

 

 

그림으로 이해하기