[Docker] dockerfile 명령어

bunny.log·2023년 3월 24일
0

FROM (베이스 이미지 지정)

  1. 생성하려는 이미지의 베이스 이미지 지정으로 hub.docker.com에서 제공하는 공식 이미지를 권장한다.
  2. 이미지 태그는 도커 허브에서 여러 태그가 버전 정보처럼 제공한다.
  3. 작은 크기의 이미지 slim과 리눅스 배보판인 알파인(Alpine)이미지를 권장한다.
FROM ubuntu:20.04
FROM python:3.9-slim-buster
FROM mongo:4.4.4-bionic

MAINTAINER (작성자이름, 이메일)

일반적으로 이미지를 빌드한 작성자 이름과 이메일을 작성한다.

MAINTAINER kevin.lee <bunny@dshub.cloud>

LABEL (버전, 타이틀, 설명, 라이선스 정보 등)

이미지 작성 목적으로 버전, 타이틀, 설명, 라이선스 정보 등을 작성한다.
1개 이상 작성 가능하다.

LABEL purpose = 'Nginx for webserver'
LABEL version = '1.0'
LABEL description = 'web service application using Nginx'

권장 사항

LABEL purpose = 'Nginx for webserver' \
       version = 1.0' \
       description = 'web service application using Nginx'

RUN

설정된 기본 이미지에 아래 내용을 작성한다.

  • 패키지 업데이트
  • 각종 패키지 설정
  • 명령 실행 등

apt, yum 방법과 동일.

RUN apt update
RUN apt -y install nginx
RUN apt -y install git
RUN apt -y install vim
RUN apt -y install curl
  1. 다단계 빌드 사용 권장, 각 이미지별로 개별 Dockerfile로 빌드
  2. [RUN 명령어][개별 명령 수]최소화하기 위해 여러 설치 명령을 연결하면 이미지의 레이어 수 감소
  • shell 방식
RUN apt update && apt install -y ngnix \
									git \
									vim \
									curl && \
	apt-get clean -y && \
    apt-get autoremove -y && \
    rm -rfv /tmp/* /var/lib/apt/lists* /var/tmp/*
                                  
  • Exec
RUN ["/bin/bash", "-c", "apt update"]
RUN ["/bin/bash", "-c", "apt -y install ngiix git vim culr"]

CMD

  1. 생성된 이미지를 컨테이너로 실행할 때 실행되는 명령어
  2. ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용된다.
  3. 여러 개의 CMD를 작성해도 마지막 하나만 처리된다.
  4. 일반적으로 이미지의 컨테이너 실행 시 애플리케이션 데몬이 실행되도록 하는 경우 유용하다.
  • shell 방식
CMD apachectl -D FOREGROUND
  • Exec
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
CMD ["nginx", "-g", "daemon off;"]
CMD ["python", "app.py"]

ENTRYPOINT

  1. 생성된 이미지가 컨테이너로 실행될 때 사용

  2. 컨테이너가 실행될 때 명령어 및 인자 값을 전달하여 실행한다.

ENTRYPOINT ["npm", "start"]
ENTRYPOINT ["python", "runapp.py"]
  1. 여러개의 CMD를 사용하는 경우 ENTRYPOINT 명령문과 함께 사용
    ENTRYPOINT는 커맨드를 지정하고, CMD는 기본 명령을 지정하면 탄력적으로 이미지를 실행할 수 있다. 예를 들어 phthon명령을 기본으로 runapp.py를 실행한다면
ENTRYPOINT ["phthon"]
CMD ["runapp.py"]

동일 환경에 entrypoint.sh
- 셸 스크립트를 이미지에 넣고(ADD)
- 실행권한 설정(RUN)
- 컨테이너 실행시 entrypoint.sh를 실행(ENTRYPINT)

ADD ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/bin/bash", "entrypoint.sh"]
- ENTRYPOINT는 도커 컨테이너 실행 시 항상 수행해야 하는 명령어를 지정(웹서버나 데이터 베이스 등의 데몬 실행)
- CMD는 도커 컨테이너 실행 시 다양한 명령어를 지정하는 경우 유용

COPY

호스트 환경의 [파일], [디렉터리]를 이미지 안에 복사

COPY index.html /user/sharee/nginx/html
COPY ./runapp.py /

ADD

  1. 호스트 환경의 파일,. 디렉터리를 이미지 안에 복사
  2. URL 주소에서 직접다운로드하여 이미지 안에 추가
  3. 압축파일(tar, tar.gz)인 경우에는 지정한 경로에 압축을 풀어서 추가
    빌드 작업 디렉터리 외부의 파일은 ADD할 수 없고 디렉터리 추가시에는 /로 끝나야 한다.
ADD index.html /usr/share/nginx/html
ADD http://eample.com/view/customer.tar.gz /workspace/data/
ADD website.tar.gz /var/www/html

WORKDIR

디렉토리 지정

EXPOSE

컨테이너 포트 3000 설정

CMD

컨테이너 시작시 실행될 명령어로 도커파일 내에서 1회만 사용 가능하다.

CMD [ "yarn", "start" ]
CMD ["node","server.js"]

RUN

도커이미지가 생성되기 전에 수행할 쉘 명렁어로 추가적으로 필요한 파일들을 다운로드 받는다.

RUN tar -zxvf nexmes.tar.gz
gzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기.

$ tar zxvf T.tar.gz
DIR_1/
FILE_1
FILE_2

exec

도커 컨테이너가 기동되어 있는 상태에서 추가적인 커맨드를 더 전달 하고자 할때 사용한다.

docker exec -it [컨테이너이름 또는 컨테이너 아이디] bash
profile
나를 위한 경험기록

0개의 댓글