1. 개요
<Docker 가상 환경 구축 입문>의 <Chapter 3. 컨테이너 기동 방법을 이해하자>를 읽고 정리한 내용으로,
이번 문서의 주된 내용은 Dockerfile에 대한 설명, Docker Image 빌드 방법과 Docker Hub의 사용법 소개입니다.
2. Dockerfile이란
- Dockerfile: Docker Image 생성을 위한 설정 파일로, docker build 커맨드로 Docker Image를 생성할 수 있음
-
Dockerfile의 주요 명령 (Dockerfile Reference 참고)
- FROM: 새로운 이미지 생성의 기초가 되는 베이스 이미지를 지정하는 명령으로, Dockerfile의 명령은 FROM 또는 ARG 명령으로 시작해야 함
- RUN: 이미지 build 시에 컨테이너에서 실행할 커맨드(패키지나 라이브러리 설치 등)를 지정하는 명령
-
CMD: 컨테이너를 신규로 생성하여 실행할 경우, 디폴트로 실행할 커맨드를 지정하는 명령으로, docker run에 실행할 커맨드가 지정되어 있다면
CMD 명령은 무시하고 docker run에 지정된 커맨드가 실행됨 -
ENTRYPOINT: CMD 명령과 동일하게, 컨테이너를 신규로 생성할 경우, 디폴트로 실행할 커맨드를 지정하는 명령이지만,
docker run에 지정된 커맨드가 있더라도 ENTRYPOINT의 명령이 실행됨 - ENV: 이미지에 설정해두고 싶은 환경 변수를 정의하는 명령
- ARG: 이미지 빌드 시에 일시적으로 사용할 환경 변수를 설정할 때 사용하는 명령으로, ENV와 달리 빌드 시에만 일시적으로 사용된다는 차이점이 있음
- USER: 컨테이너 내에서 어떤 유저로 커맨드를 실행할지 지정하는 명령
- WORKDIR: 작업 디렉터리를 이동하는 명령
- ADD: 로컬 상의 파일을 이미지에 복사하는 명령
- COPY: ADD 명령과 동일하게 로컬 상의 파일을 이미지에 복사하는 명령이나, tar 파일이나 URL 등은 지원하지 않음
- Dockerfile 내 명령은 위에서부터 순서대로 실행되므로 순서에 유의해야 함
- 레이어가 생성되는 시점에서 어떤 베이스 이미지를 사용할지 지정해야 함
- Docker Image를 구성하는 레이어는 127개까지 만들 수 있음
3. Docker Image 빌드하기
$ docker build -t docker-whale
4. Docker Hub의 사용법
$ docker login
$ docker tag <이미지명:태그명>
$ docker push <이미지명>
-
build
: 도커 이미지를 빌드하는 서브커맨드 - -t: 이미지명, 태그명 지정하는 옵션
-
docker-whale
: 지정된 빌드 컨텍스트 - —file 옵션을 지정하여 Dockerfile을 지정할 수 있음
-
빌드 컨텍스트 상의 파일은 빌드 시에 Docker Daemon으로 전송되므로, 컨텍스트 상에 불필요한 파일을 놓지 않는 것을 권장
- 빌드한 이미지를 Docker Hub에 업로드하는 것을 push라고 하며, 다운로드하는 것을 pull이라고 함
- Docker Hub에 이미지를 push하기 위해서는 Docker Hub 계정이 필요
- Docker Hub 메인 페이지에서 계정을 생성할 수 있음
- 다음과 같은 과정을 통해 push할 수 있음
-
docker login
커맨드로 Docker Hub에 로그인
-
docker tag
커맨드로 이미지 레포지터리 명에 맞춘 태그를 설정
-
docker push 커맨드로 Docker Hub에 push
-
Docker Hub의 레포지터리 페이지 탭 설명
- Repo Info: 레포지터리에 대한 설명을 관리하거나 소유자를 확인할 수 있는 페이지
- Tags: 레포지터리에 포함된 태그 리스트를 확인할 수 있는 페이지
- Collaborators: 공동작업자의 레포지터리에 대한 접근 권한을 관리하기 위한 페이지
- Webhooks: 레포지터리에 대한 push가 성공되었을 경우 임의의 장소에 POST 리퀘스트를 보내는 기능을 설정하기 위한 페이지
- Settings: 레포지터리를 Private/Public로 설정하거나 레포지터리를 삭제하기 위한 페이지