Server/Docker

[Docker] Dockerfile 이란?

  • -
728x90

Docker Hub 란?

  • 도커 이미지의 용량은 수 기가가 넘는 경우가 흔하다. 이렇게 큰 용량의 이미지를 서버에 저장하고 관리하는 것은 쉽지 않지만 Docker hub를 통해 공개 이미지를 무료로 관리해준다.
  • Docker hub에서 공개된 이미지를 다운받아 사용하거나, Docker Registry 저장소를 직접 만들어 관리할 수 있다.

Dockerfile 이란?

  • 도커는 기본적으로 이미지가 있어야 컨테이너를 생성하고 동작시킬 수 있다. dockerfile은 필요한 패키지를 설치하고 동작하기 위한 자신만의 설정을 담은 파일이고, 이 파일로 이미지를 생성(빌드)한다. 
  • Dockerfile은 어플리케이션 개발 외에도 도커 허브에 배포할 때, 이미지가 아닌, Dockerfile을 이용하여 배포할 수도 있다. 
  • dockerfie은 도커 명령어를 순서에 따라 빌드하며, dockerfile을 빌드할 때 (이미지 파일로 변환 시킬 때)는 layer구조를 보인다. 이미지가 계층적으로 하나씩 쌓이면서 생성되는 것이다.

Dockerfile 작성 예시

FROM	debian:buster

LABEL	maintainer="daelee@student.42seoul.kr"

RUN	apt-get update && apt-get install -y \
	nginx \
	mariadb-server \
	php-mysql \
	php-mbstring \
	openssl \
	vim \
	wget \
	php7.3-fpm

COPY	./srcs/run.sh ./
COPY	./srcs/default ./tmp
COPY	./srcs/wp-config.php ./tmp
COPY	./srcs/config.inc.php ./tmp

EXPOSE	80 443

CMD 	bash run.sh
  • FROM
    • 유효한 Docker 파일은 FROM 명령어로 시작한다.
    • 새 작업을 시작할 베이스 이미지를 지정한다.
  • LABEL
    • 이미지에 메타데이터를 추가한다.
      • 이미지의 버전 정보, 작성자, 코멘트와 같이 이미지 상세 정보를 작성해두기 위한 명령.
  • RUN
    • 새 이미지 레이어를 만들어 내 명령을 실행하고 결과를 커밋한다.
    • ※주의
      •  항상 apt-get update  apt-get install는 같은 RUN 실행줄에서 동시에 실행해 캐싱 문제를 방지. (같은 결과를 가져오더라도 RUN을 여러줄로 작성하면 image layer가 여러개 생성되고, RUN을 한줄로 작성하면 image layer가 하나 생성된다.)
  • COPY
    • 호스트OS의 파일 또는 디렉토리를 컨테이너 안의 경로로 복사한다.
    • ft_server 과제를 위해 수정해줬던 설정 파일들을 이 명령어로 미리 src 폴더에 넣어 둘 것이다.
  • EXPOSE
    • 해당 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기중 이라는 것을 알려준다.
    • 일반적으로 dockerfile을 작성하는 사람과 컨테이너를 직접 실행할 사람 사이에서 공개할 포트를 알려주기 위해 문서 유형으로 작성할 때 사용한다.
    • 이 명령 자체가 작성된 포트를 실행하여 listening 상태로 올려주거나 하지는 않기 때문에, 실제로 포트를 열기 위해서는 container run에서 -p 옵션을 사용해야 한다.
  • CMD
    • 생성된 컨테이너를 실행할 명령어를 지정한다.
    • 도커파일에 CMD가 두 개 이상 있는 경우 마지막 CMD만 유효하다.

 

 

 

728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.