단순히 docker pull만 해오는 것이 아닌
나만의 image를 만들어볼 수 있다
그 과정을 Dockerfile에 기록하면 된다
장점은
환경 구축에 관한 정보를 글로 남기기에 기록용으로서 의미가 있고,
Dockerfile만 있으면 그 image를 쉽게 만들 수 있기에 배포가 용이하다
docker 기초 포스트에 적어두었던 dockerfile을 참고하자
FROM ubuntu:18.04
RUN apt update && pip install pygame
COPY . /app
WORKDIR app
CMD ["python3", "main.py"]
docker pull {image name}으로 가져오듯
첫문장에 FROM {image name}을 적어 기본 image를 어떤 것으로 하였는지 명시한다
리눅스 커맨드로 실행되어야 할 일을 적는다
ubuntu를 처음에 사용하려면 apt update를 통해
최신 라이브러리 목록을 다운받아야 한다
다음으로 ubuntu에는 기본적으로 python이 설치되어 있기에
바로 pip를 통해 파이썬 라이브러리를 설치할 수 있다
&& 을 통해 RUN 한 줄에 최대한 여러 일을 실행할 수 있도록 한다
(여기에 대한 내용은 다음에...)
Dockerfile이 위치한 곳을 기준으로
내 컴퓨터에 있는 파일 또는 폴더를
지금 생성하려는 image 내에 복사한다
. 은 현재 디렉토리의 모든 것을 의미하며
/app 은 image 내부의 app이란 폴더로 옮기는 위치를 지정한다
ubuntu 내부에 /app이라는 폴더가 없어도
COPY가 알아서 생성해서 복사한다는 점에 유의하자
cd와 동일
RUN처럼 linux 커맨드로 실행해야 할 일을 적는 곳
CMD는 docker run 시에 입력값을 주지 않을 때
실행할 기본 명령을 입력한다
보통 실행 파일을 돌리는 명령을 많이 쓴다
nodeJS로 서버를 생성 중이었다면 ["npm", "start"]를 적었을 테다
작성한 Dockerfile을 기반으로 나만의 docker image 생성하기
Dockerfile이 있는 곳에서
# tag: 안 적으면 latest로
# . : Dockerfile 위치 - 현재 위치에 있다면 .
docker build -t {image-name}:{tag} .
자주 build하다 보면 <none>
이란 이름의 의미없는 image가 대량 생산된다
이들을 한꺼번에 삭제하고 싶으면
docker rmi $(docker images -f "dangling=true" -q)
RUN과 CMD의 차이,
그리고 RUN 한 줄에 &&으로 최대한 많이 적으면 좋은 이유는
docker image layer에 대한 개념을 알아야하기에 다음에