위와 같이 docker 를 이용해서 Nginx, MySQL, Wordpress 를 갖고 있는 컨테이너를 만들고 싶다고 하자.
뭐가 필요할까? 바로 Dockerfile 이다.
도커는 기본적으로 이미지가 있어야 컨테이너를 생성하고 동작시킬 수 있다.
dockerfile
은 필요한 패키지를 설치하고 동작하기 위한 자신만의 설정을 담은 파일이고,
이 파일로 이미지를 생성(빌드)한다. (Makefile과 비슷)
dockerfile
은 도커 명령어를 순서에 따라 빌드하며, dockerfile
을 빌드할 때(이미지 파일로 변환 시킬 때)는 layer 구조를 보인다. 이미지가 계층적으로 하나씩 쌓이면서 생성되는 것이다.
다음은 도커 파일이다.
유효한 Docker 파일은 FROM 명령으로 시작해야 한다.
새 작업을 시작할 베이스 이미지를 지정한다.
debian:buster
로 설정.
이미지에 메타데이터를 추가한다.
이미지의 버전 정보, 작성자, 코멘트와 같이 이미지 상세 정보를 작성해두기 위한 명령.
새 이미지 레이어를 만들어 내 명령을 실행하고 결과를 커밋한다.
백슬래시(\
)를 사용하여 다음 줄에 RUN 명령을 계속할 수 있다.
해당 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기중 이라는것을 알려준다.
일반적으로 dockerfile을 작성하는 사람과 컨테이너를 직접 실행할 사람 사이에서 공개할 포트를 알려주기 위해 문서 유형으로 작성할 때 사용한다.
이 명령 자체가 작성된 포트를 실행하여 listening 상태로 올려주거나 하지는 않기 때문에, 실제로 포트를 열기 위해선 container run 에서 -p 옵션을 사용해야 한다.
docker run -p 80:80/tcp -p 80:80/udp ...
생성된 컨테이너를 실행할 명령어를 지정한다.
도커 파일에 CMD가 두 개 이상 있는 경우 마지막 CMD만 유효하다.
도커 이미지를 만들기 위해 도커파일이 필요하다. 위에서 설명한 옵션 외에도 다양한 옵션이 많다. 앞으로 프로젝트를 진행하며 필요한 명령어를 찾아서 사용해보자.