- 비전공자도 이해할 수 있는 Docker 입문/실전 (박재성)
- #1. Docker 기본 개념
- #2. Docker 기본 CLI
- #3. Docker Volume
- #4. Dockerfile (해당 글)
Dockerfile이란?
- 도커 이미지 생성을 위해 필요한 파일
FROM : 베이스 이미지 생성
- FROM : 베이스 이미지를 생성하는 역할
- Docker 컨테이너를 특정 초기 이미지(베이스 이미지)를 기반으로 추가적인 세팅을 할 수 있다.
# 예시
FROM openjdk:17-jdk
FROM node
도커파일 이미지로 빌드
docker build -t my-jdk17-server {상대경로}
# -t : 태그명 지정
# 지정하지 않으면 latest
# 상대경로 작성
- docker run -d my-jdk17-server
- 이렇게 입력했을 때 바로 Exited 상태가 된다
- 이유 : 도커 파일에서 컨테이너가 내부적으로 해야 하는 작업들이 끝나면 자동으로 컨테이너가 종료된다.
- 이렇게 입력했을 때 바로 Exited 상태가 된다
- docker logs 명령어는 실행중인 컨테이너만 가능하다.
COPY : 파일 복사(이동)
- COPY : 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달
# 문법
COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너에서 파일이 위치할 경로]
# 예시
COPY app.txt /app.txt
# 디렉토리 복사 시에는 뒤에 / 붙여줘야함
COPY *.txt /text-files/
- 특정 파일이나 폴더만 제외하고 복사하기
- .dockerignore 파일 생성
FROM ubuntu
COPY ./ / # 컨테이너의 루트경로에 전부 다 복사된다
ENTRYPOINT : 컨테이너가 시작할 때 실행되는 명령어
- ENTRYPOINT : 컨테이너 시작 시에 바로 실행되었으면 하는 명령어 작성
FROM ubuntu
COPY *.txt /text-files/
ENTRYPOINT ["/bin/bash", "-c", "echo hello"]
# 위 내용 출력시켰으니까 docker logs 해도 남아있는 것을 볼 수 있다.
- 일반적으로 리눅스 명령어 입력하기
RUN : 이미지를 생성하는 과정에서 사용할 명령문 실행
RUN : 이미지 생성 과정에서 명령어를 실행시켜야 할 때 사용
RUN [명령문]
RUN npm install
RUN과 ENTRYPOINT 비교
- 공통점 : 둘 다 명령어를 실행시킬 때 사용
- 차이점
- RUN : 이미지 생성 과정에서 필요한 명령어를 실행시킬 때 사용
- ENTRYPOINT : 생성된 이미지를 기반으로 컨테이너 생성한 직후에 명령어 실행
예시
- 내가 필요한게 우분투랑 깃이랑 모두 깔아져 있는 이미지가 필요
- 그런데 저 두개 모두 합쳐진 base 이미지는 없으니까
- base이미지를 우분투로 하고, run으로 git을 설치해 준다.
FROM ubuntu
RUN apt update && apt install -y git # 이미지 생성에 필요
ENTRYPOINT ["/bin/bash", "-c", "echo hello"] # 컨테이너 실행 후 필요
WORKDIR : 작업 디렉토리를 지정
- WORKDIR : 직업 디렉터리르 전환하면 그 이후에 등장하는 모든 RUN, CMD, ENTRYPOINT, COPY, ADD 명령문은 해당 디렉터리를 기준으로 실행된다.
- 사용 이유 : 컨테이너 내부 폴더 깔끔하게 정리하려고
WORKDIR [작업 디렉토리로 사용할 절대 경로]
WORKDIR /usr/src/app
- 최초 경로로 설정도 가능
- 예) docker exec -it [id] bash 했을 때 바로 저 WORKDIR에 접근한다
EXPOSE : 컨테이너 내부에서 사용 중인 포트를 문서화하기
- EXPOSE : 컨테이너 내부에서 어떤 포트에 프로그램이 실행되는지를 문서화하는 역할
- 작동에는 영향 주지 않는다
- 그냥 문서화하는 역할
EXPOSE [포트 번호]
EXPOSE 3000 # 이 이미지에서 실행되는 프로그램은 3000 포트에서 실행할거야 알아둬 느낌
'Docker' 카테고리의 다른 글
[Docker] Docker Compose - 예제 (도커 강의 정리 #6) (0) | 2025.05.16 |
---|---|
[Docker] Docker Compose (도커 강의 정리 #5) (0) | 2025.05.08 |
[Docker] Docker Volume (도커 강의 정리 #3) (0) | 2025.04.23 |
[Docker] Docker 기본 CLI (도커 강의 정리 #2) (0) | 2025.04.14 |
[Docker] Docker 기본 개념 (도커 강의 정리 #1) (0) | 2025.04.08 |