Docker - Dockerfile 기본 문법 + 추가 Docker 명령어
17 Oct 2021 | devOpsDocker - 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"]
- ex)
- ENTRYPOINT와 함꼐 사용하는 방법
- ex)
CMD ["param1", "param2", ...]
- ENTRYPOINT가 CMD의 인자로 넘어가서 해당 param을 실행한다
- ex)
- 쉘 명령처럼 작성하는 방법
- ex)
CMD <command> <param1> <param2> ...
- ex)
- 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에서 컨테이너에 파일을 넣을 수도 있다
- ex)
docker commit {옵션} {ID or name} {이미지명}
: 컨테이너 변경사항을 이미지 파일로 생성-m
: 설명 추가
docker diff
: 본래 이미지와 비교해서 변경된 파일 목록 출력A
: 파일 또는 디렉토리 추가D
: 파일 또는 디렉토리 삭제C
: 파일 또는 디렉토리 수정
참고자료
인프런 - 풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]