도커 이미지

데비안에서 apt 리포지토리에서 패키지를 내려받듯이 도커도 도커 허브에서 중앙 이미지 저장소에서 이미지를 내려 받는다. 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소로 도커 계정이 있다면 누구든지 내려받고 공유할 수 있다.

필요한 대부분의 이미지는 도커 허브에서 공식적으로 제공하거나 다른 사람들이 올려놓은 이미지를 사용할 수가 있다. 도커허브는 누구나가 올릴 수 있기 때문에 official 라벨이 없는 이미지는 사용법을 찾을 수 없거나, 제대로 동작하지 않을 수 있다. private 저장소의 경우는 저장소 수에 따라 요금을 지불해야 한다.

컨테이너를 이미지로 생성하는 방법은 이미지로 컨테이너를 생성하고 애플리케이션 환경을 설정하고 소스코드를 배포한 뒤에 다시 이미지로 커밋하는 과정을 갖는다. 이 방법을 일일이 수작업으로 작업해야한다. 이러한 과정을 손쉽게 수행할 수 있는 빌드(build) 명령어를 도커에서 제공하고 있다.

완성된 이미지를 생성하기 위해 컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 셀 스크립트 등 하나의 파일로 기록하면 도커가 이 파일을 읽어 컨테이너에서 작업을 수행한 뒤 이미지를 만들어낸다. 이러한 작업을 기록한 파일의 이름을 Dockerfile이라고 한다.

빌드 명령어는 다음과 같다.

docker build -t 이미지이름:태그 dockerfile경로

빌드 이후에 다음 명령어로 컨테이너를 생성한다.

docker run -d -P --name 컨테이너이름 이미지이름:태그

여기서 -P옵션은 dockerfile에서 Expose 옵션은 expose의 모든 포트를 호스트에 연결하겠다는 의미를 나타낸다. 호스트에서 사용 가능한 포트에 차례로 연결한다.

빌드 과정

이미지 빌드를 시작하면 도커는 가장 먼저 빌드 컨텍스트를 읽어들인다. dockerfile이 위치한 디렉터리가 빌드 컨텍스트가 된다. 빌드 컨텍스트는 빌드될 이미지에 파일을 추가할 때 사용된다. add나 copy등의 명령어로 컨텍스트의 파일을 이미지에 추가한다. 위의 build 명령어에서 dockerfile경로로 컨텍스트 폴더위 치가되며 해당 파일 내부에 있는 파일을 빌드 컨텍스트에 추가한다. build할때 맨 마지막에 지정된 위치에 있는 파일이 컨텍스트에 모두 포함되기 때문에 /와 같은 디렉토리에 이미지를 빌드하지 않도록 주의해야한다.

원하지 않는 파일을 컨텍스트에 추가하는 것을 방지하기 위해 .gitignore 같은 기능을 사용할 수 있다. .dockerignore 파일을 작성하면 빌드시에 명시된 이름의 파일을 컨텍스트에서 제외한다.