diff --git a/README.md b/README.md index 81c0a46..ada0660 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,50 @@ -# Dockerfile +# Dockerfile 작성 방법 +> 해당 문서는 엑셈 면접 진행중 받은 질뭉문 ADD/COPY의 차이가 순간적으로 기억이 나지 않아 다시 한번 정리를 위해 작성되었습니다. +> Dockerfile 작성 밥법뿐 아니라 추가적으로 Docker에 관련된 내용도 작성 예정 +> CRI-O, Podman을 주로 사용하다 보니 Docker에 대해서 기억이 안나는 부분이 있기 때문에 가장 기본이 되는 내용 위주로 작성 예정 +## Dockerfile +- FROM : 베이스 이미지 +- MAINTAINER : 이미지 빌더를 의미 (1.13.0 이후로 사용되지 않는다고 함) + ``` + MAINTAINER Junghun + ``` +- LABEL : 이미지에 메타데이터 추가 (key-value) + - 이미지의 버전 정보, 작성자, 코멘트 등 이미지의 상세 정보를 입력하기 위해 사용 + - docker image inspect --format="{{ .Config.Labels }}" [이미지명] 커맽드를 통해 확인 가능 + ``` + LABEL version="1.0" + LABEL Description="Sample Docker Image" + ``` +- RUN : 새로운 레이어에서 명령어를 실행 및 이미지 생성 + - RUN을 실행할 때 마다 새로운 레이어가 생성되고 캐시됨 + - 즉 dnf update를 RUN으로 실행후 새로운 RUN으로 패키지를 설치할 경우 update가 되어 있지 않기 때문에 최신 버전의 패키지를 받을 수 없음 + ``` + RUN \ + dnf update -y && \ + dnf install -y nfs-utils + ``` + - 계속해서 레이어가 생성되고 캐시 되기 때문에 효율적으로 작성하기 위한 방법을 질문 받아 생각해 보았음 + - 하나의 RUN으로 여러 명령을 수행하거나 shell script를 작성하여 COPY후 하나의 RUN으로 실행하는 방법으로 진행 +- WORKDIR : 작업 디렉토리 지정 (만약 디렉토리가 없을 경우 새로 생성을 함) + - cd 커맨드와 동일하다고 생각하면 됨, 디렉토리 지정시 다음 명령어부터는 해당 디렉토리에서 진행 + ``` + WORKDIR $DIRPATH/$DIRNAME + ``` +- EXPOSE : 빌드를 통해 생성된 이미지에서 사용할 포트 + ``` + EXPOSE 9090 + ``` +- USER : 사용할 계정을 선택한다 (default : root) + - USER 자체는 계정 생성을 해주지 않기 때문에 사전에 미리 "RUN" 을 사용하여 계정 추가가 필요하다 + ``` + centos 기준 그룹, 유저 생성 + groupadd groupname + useradd usrid -g groupname(옵션) + + -m : 해당 유저의 폴더를 같이 생성 + -g : 그룹 지정 + -d : 디렉토리 지정 + -s : 쉘(shell) 지정 + -p : 패스워드(암호) 지정 + ```