Archive

Docker - Dockerfile 기본 문법 + 추가 Docker 명령어

|

Docker - Dockerfile 기본 문법 + 추가 Docker 명령어


1. Dockerfile이란?

  • docker 이미지를 작성할 수 있는 기능
  • Dockerfile 문법으로 이미지 생성을 위한 스크립트를 작성할 수 있고, 이를 기반으로 이미지를 생성하고 배포할 수 있다

2. Dockerfile 기본 문법

  • 기본적으로 명령과 인자로 이루어짐
  • 명령은 일반적으로 대문자로 작성
  • 주석은 # 을 붙이고 적는다
  • 반드시 Dockerfile 안에 적는다

  • FROM : 베이스 이미지 지정 명령, ex) FROM alpine

  • LABEL : 버전 정보, 작성자 등 이미지 설명을 작성

    • key=value 형시긍로 메타 데이터를 넣음
    • ex) LABEL version="1.0.0"
  • COPY : 해당 경로에 있는 파일들을 추가함

    • Dockerfile을 기준으로 상대경로로 적는다
  • CMD : docker 컨테이너가 시작할 때, 실행하는 쉘 명령을 지정

    • 배열 형태로 작성하는 방법
      • ex) CMD ["/bin/bash", "-c", "echo", "Hello"]
    • ENTRYPOINT와 함꼐 사용하는 방법
      • ex) CMD ["param1", "param2", ...]
      • ENTRYPOINT가 CMD의 인자로 넘어가서 해당 param을 실행한다
    • 쉘 명령처럼 작성하는 방법
      • ex) CMD <command> <param1> <param2> ...
    • CMD 명령어는 한 Dockerfile 당 한 개만 써야한다
    • 여러개 작성하면 맨 마지막 CMD만 적용된다
  • RUN : 이미지 작성 시 쉘 명령을 실행하는 명령, 일종의 새로운 이미지 레이어를 만드는 역할

    • 보통 베이스 이미지에 패키지를 설치하여, 새로운 이미지를 만들때 사용
    • ex) RUN apt-get update
  • ENTRYPOINT : docker 컨테이너가 시잘할 때, 실행하는 쉘 명령을 지정

    • 이미 쓰여진 CMD 명령에 덮어씌워지지 않는다
    • ex) ENTRYPOINT ["/bin/sh"]
  • EXPOSE : docker 컨테이너 외부에 오픈할 포트 설정

    • 여러개 컨테이너 연결 시 포트를 열어놓기 위해 사용
    • ex) EXPOSE 80
  • ENV : docker 컨테이너 내부에서 사용할 환경변수 지정

  • WORKDIR : docker 컨테이너에서의 작업 디렉토리 설정

    • RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리 설정
  • COPY : 파일 또는 디렉토리를 docker 컨테이너에 복사, ADD와 달리 URL 지정할 수 없고, 압축 파일을 자동으로 풀어주지 않는다

3. Docker 추가 명령어

  • docker build 옵션 {Dockerfile 경로} : 이미지 빌드
    • -t : 이미지 이름 설정, 저장소(DockerHub ID)/이미지명:태그와 같이 작성
      • 태그 이름이 없는 경우 default로 latest가 붙음
    • -f : 이미지 빌드 시 default로 Dockerfile 파일을 찾아서 빌드한다
      • 그 외 파일명으로 빌드 시 해당 옵션으로 파일명을 지정할 수 있다
    • --pull : FROM으로 지정된 이미지는 한 번 다운로드 받으면, 이미지 생성시마다 새로 다운로드 받지 않고, 다운받은 이미지를 사용한다
      • 해당 옵션은 이미지 생성시마다 새로 다운로드를 받으라는 옵션
      • --pull=true와 같이 사용
      • DockerHub에 배포한 베이스 이미지를 수시로 업데이트하고, 이를 기반으로 새로운 이미지 생성시 자주 사용
  • docker inspect {이미지명} : 이미지에 대한 Config 정보를 JSON 형태로 볼 수 있다(컨테이너도 가능)
  • docker logs {컨테이너 ID or name} : 컨테이너 에러 또는 출력 결과 확인
  • docker kill {컨테이너 ID or name} : stop은 현재 실행중인 단계까지 기다리고 중지하는 반면, kill은 즉시 컨테이너를 중지한다
  • docker history {이미지 or 컨테이너} : 이미지, 컨테이너 히스토리 확인
  • docker cp {컨테이너:경로} {호스트PC경로} : 컨테이너의 특정 파일을 호스트 PC로 꺼내오는 명령
    • ex) docker cp mycontainer:/etc/apache2/site-available/000-default.config ./
    • 반대로 호스트 PC에서 컨테이너에 파일을 넣을 수도 있다
  • docker commit {옵션} {ID or name} {이미지명} : 컨테이너 변경사항을 이미지 파일로 생성
    • -m : 설명 추가
  • docker diff : 본래 이미지와 비교해서 변경된 파일 목록 출력
    • A : 파일 또는 디렉토리 추가
    • D : 파일 또는 디렉토리 삭제
    • C : 파일 또는 디렉토리 수정



참고자료


인프런 - 풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]