Docker hub에서 이미지를 pull해와서 컨테이너를 관리하는 부분까지 해봤다.
이제는 Dockerfile로 직접 내 이미지를 만들어보자
Dockerfile
Docker 이미지를 생성하기위한 스크립트 파일로, Dockerfile 작성 후 build하면, 파일의 내용대로 한 명령어씩 실행되어 환경을 갖춘 이미지가 생성된다.
Dockerfile만 작성해두면 어느 환경에서든 빌드를 통해 같은 이미지를 생성할 수 있고, 이미지 구축에 어떤 명령어가 실행되었는지도 파악하기 편리하다.
tomcat, APM, Spring 등 웹서비스를 띄울 때, Dockerfile의 편리성이 드러난다.
docker hub에 배포된 설치 이미지를 받아 내가 작성한 App을 바로 Copy하도록 Dockerfile을 작성만 해두면 빠른 배포가 가능하다.
작성할 때 파일이름은 확장자가 따로 없는 'Dockerfile'을 사용하며, 명령 스크립트는 한 줄 씩 작성한다.
Dockerfile이 있는 위치에서 docker build 실행
docker build . -t [이미지명]
Dockerfile 기본 명령어
FROM
생성하려는 Docker 이미지의 기반이 되는 이미지, 반드시 Dockerfile의 첫 명령어로 지정해야한다.
즉, FROM으로 가져온 이미지 위에 Dockerfile의 명령어를 실행해 새 이미지를 만드는 것이다.
RUN
docker 이미지 빌드 시 실행할 명령어, apt/pip 등의 라이브러리를 설치할 때에 사용
COPY
호스트의 파일/디렉토리를 docker 이미지 안으로 복사, 복사할 호스트 파일의 위치는 Dockerfile의 위치와 동일한 위치에서 시작한다.
root@ubuntu:/srv# ls
abc.txt Dockerfile
root@ubuntu:/srv#
# Dockerfile
COPY abc.txt /root/abc.txt
CMD
docker 이미지로 컨테이너를 생성했을때에 실행할 명령어, docker run 명령어 끝에 따로 명령어를 적어주면 dockerfile의 CMD 명령어가 덮어써짐
ENV
Docker 이미지 환경 내의 환경변수를 설정
WORKDIR
Docker 이미지 환경내의 작업 디렉토리를 전환, 전환 시 CMD, RUN, COPY, ENTRYPOINT, ADD 명령은 바뀐 디렉토리를 기준으로 실행된다
ENTRYPOINT
CMD와 유사한 명령어 실행, 컨테이너 실행 시 ENTRYPOINT에서 지정한 명령만 수행한다.
아파치 이미지에 따로 작성한 파일을 올린 상태의 커스텀 이미지를 만들어보자
FROM httpd:latest # 기반이 될 이미지, docker hub에서 httpd 이미지 pull
COPY ./html/ /usr/local/apache2/htdocs # 컨테이너로 파일 복사, 컨테이너 내의 위치는 지정되어있음
이렇게 간단하게 작성하고, 빌드
내가 새롭게 작성한 이미지로 바로 컨테이너로 올릴수 있다.
+) docker 이미지를 파일 형태로 내보낼 수 있다.
docker save -o [저장할 파일명] [이미지명]
물론, 이 파일 형태의 이미지를 docker 이미지로 저장시킬수도 있다.
docker load -i [파일명]
이런 방법은 급하게 다른 pc로 이미지를 옮겨야 할때 등의 상황에서 쓸 수 있다.