Dockerfile 활용해 이미지 직접 만들기

  • Dockerfile이란?

Docker 이미지를 만들게 해주는 파일.

 

  • FROM : 베이스 이미지 생성

FROM은 베이스 이미지를 생성하는 역할을 한다.

Docker 컨테이너를 특정 초기 이미지를 기반으로 추가적인 셋팅을 할 수 있다.

여기서 예기한 '특정 초기 이미지'가 곧 베이스 이미지이다.

 

사용법

# 문법
FROM [이미지명]
FROM [이미지명]:[태그명]

 

  • [실습] FROM : 베이스 이미지 생성

  1. Dockerfile 만들기

# JDK 17
FROM openjdk:17-jdk
  1. Dockerfile을 기반으로 이미지 만들기

docker build -t my-jdk17-server .
  1. 이미지를 기반으로 컨테이너 띄우기

docker run -d my-jdk17-server
  1. 컨테이너 조회하기

docker ps # 실행되고 있는 컨테이너가 없다.
docker ps -a # 확인해보니 컨테이너가 종료되어 있다. 

Docker의 컨테이너는 내부적으로 필요한 명령을 다 수행하면 컨테이너가 저절로 종료된다.

  1. 컨테이너 내부로 들어가서 jdk가 잘 깔렸는지 확인해보기

종료된 컨테이너에 들어가서 디버깅하고 싶을때

FROM openjdk:17-jdk

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 500초 동안 시스템을 일시정지 시키는 명령어
docker build -t my-jdk17-server . # 이미지 빌드
docker run -d my-jdk17-server # 컨테이너 실행
docker ps # 실행 중인 컨테이너 조회
docker exec -it [컨테이너 ID] bash # 컨테이너 접속

java -version # JDK 설치되어 있는 지 확인

 

  • COPY : 파일 복사( 이동 )

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

# 예시
COPY app.txt /app.txt

 -- 와일드 카드 사용해보기

FROM ubuntu

COPY *.txt /text-files/

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

 -- .dockerignore 사용해보기

.dockerignore

readme.txt

 Dockerfile

FROM ubuntu

COPY ./ /

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

--> readme.txt만 복사가 안된다.

 

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

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

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

예제

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]

 

 

 

댓글을 작성해보세요.

채널톡 아이콘