도커 파일이란 도커 이미지를 만들기 위한 설정 파일이다. 도커 컨테이너가 어떻게 행동해야 하는지에 대한 설정이 정의되어있는 곳이다. 도커 파일을 통해 도커 이미지가 만들어지므로 도커 이미지에 필요한 것들이 정의되있다.
도커 이미지는 2가지 요소로 구성되어있다.
도커 파일은 위 2가지 요소를 구성할 명령어들로 명시되어 있다.
도커 파일은 도커 이미지의 2가지 요소를 고려해 작성한다.
베이스 이미지란 생성하고자 하는 이미지의 기초가 되는 이미지를 뜻한다.
베이스 이미지는 도커 허브의 Official Image를 사용하거나 이를 수정한 이미지를 사용하거나 혹은 직접 만든 이미지를 사용한다. 예를 든다면 redis를 동작시키는 Image를 만든다고 한다면 Ubuntu나 alpine 같은 OS를 베이스 이미지로 사용할 수 있다. 그리고 그 베이스 이미지 위에 중간 단계의 이미지를 쌓는다. 이 중간 단계의 이미지를 레이어라고 부르고 쌓은 행동을 레이어 캐싱이라고 부른다.
Dockerfile을 작성하는 기본적인 순서를 나타내보자.
# 베이스 이미지 명시
FROM baseImage# 추가로 필요한 파일 내려받기
RUN command# 컨테이너 시작 시 실행할 명령어를 명시
CMD ["executable"]
FROM
, RUN
, CMD
등은 도커 서버에게 컨테이너를 만들기 위해 필요한 요소들을 알려준다.
CMD
는 Dockerfile 내에서 한 번만 쓸 수 있다.alpine OS를 베이스 이미지로 명시하고 컨테이너를 실행시키면 "hello world"를 반환하는 도커 이미지를 만들어 보자. 우선 연습할 디렉토리를 생성한다. 그리고 그 디렉토리 안으로 들어가서 Dockerfile을 만든다. Dockerfile에 베이스 이미지와 "hello world"를 반환하는 명령어를 명시한다.
해당 디렉토리 안에서 docker build .
을 입력해주면 Dockerfile로 부터 이미지가 생성된다.
sha256 옆에 나열된 난수들이 도커 이미지의 ID다. 즉, 94ae80a6c02f029fc83082701db78511d69c60d3dca1e93802716cb029917244
가 도커 이미지의 ID가 된다. 도커 이미지가 생성 되었는지 docker images
명령어를 통해서 확인해보자.
이미지의 이름을 지정해 주지않아서 <none>
으로 보인다. 이미지의 ID 를 통해서 방금 생성한 이미지를 확인 할 수 있다. 그럼 이번에는 생성된 이미지를 통해 컨테이터를 생성하고 실행시켜보자.
도커 이미지를 run
하니 hello world
가 출력된다. 하지만 컨테이너는 보이지 않는다. 그 이유는 도커 컨테이너가 생성되고 hello world
를 출력한 후 바로 종료되기 때문이다.
docker ps -a
명령어를 통새서 생성된 컨테이너를 확인할 수 있다.
위 연습을 통해 도커 이미지를 생성했다. 이때 이미지의 이름과 태그를 설정하지 않아 <none>
으로 표기되었다. 이번에는 이름과 태그를 설정해서 이미지를 생성해보자.
docker build . -t <이미지이름:태그>
보통은 이미지 이름에 생성자의 도커 아이디를 / 로 구분하여 넣어준다. 사진에서 이미지 이름은 kdeayoub/hello_world
이고 태그는 alpine
으로 설정했다.
docker images
명령어를 통해서 이미지 이름과 태그가 잘 설정되었는지 확인해보자.