도커 이미지
docker create, docker run, docker pull의 명령어로 이미지를 내려받을 때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려받습니다. 대부분의 필요한 이미지는 도커 허브에서 공식적으로 제공하거나 다른 사람들이 도커 허브에 이미 올려놓은 경우가 대부분이기 때문에 애플리케이션 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있는 것이 도커만의 장점이라고 생각하시면 됩니다. 단, 도커 허브는 누구나 이미지를 올릴 수 있기 때문에 공식 라벤이 없는 이미지는 사용법을 찾을 수 없거나 제대로 동작하지 않을 가능성이 있습니다. 또한 이미지 저장소를 다른 사람들에게 공개하지 않기 위해 비공개 저장소로 사용하려면 비공개 저장소 수에 따라 요금을 지불해야 됩니다. 이를 해결하기 위해 도커 사설 레지스티리를 사용할 수 있는데 이 부분은 추후에 설명하도록 하겠습니다. 실제로 도커 허브에 어떤 이미지가 있지 확인하기 위해서 도커 허브 사이트를 직접 접속해서 찾아볼 수 있지만 도커 엔진에서 docker serarch 명령어를 통해 사용할 수 있습니다. 예를 들어 ubuntu라는 키워드와 관련된 이미지는 어떤 것이 있는지 검색해볼까요?
도커 이미지 생성 docker commit
앞에서처럼 docker serach 명령어를 통한 검색한 이미지를 pull 명령어로 내려받아 사용할 수도 있지만, 도커로 개발하는 많은 경우에는 컨테이너에 애플리케이션을 위한 특정 개발 환경을 직접 구축 한 뒤 사용자만의 이미지를 직접 생성해야 합니다. 이를 위해 컨테이너 안에서 작업한 내용을 이미지로 만드는 방법을 설명해보겠습니다. 아래 명령어를 입력해 이미지로 만들 컨테이너를 생성합니다. 컨테이너 내부에 first라는 이름의 파일을 하나 생성해 기존의 이미지로부터 변경사항을 만듭니다.
# docker run -i -t --name commit_test ubuntu:14.04
root@ # test_first! >> first
first라는 파일을 만들어 ubuntu:14.04 이미지로부터 변경 사항을 만들었다면 컨테이너에서 호스트로 빠져나와 docker commit 명령어를 입력해 컨테이너를 이미지로 만듭니다. docker commit 명령어 형식은 아래와 같습니다. 먼저 commit 옵션을 지정하고 커밋할 할 컨테이너의 이름을 명시 한 뒤 생성될 이미지의 이름을 연결합니다.
# docker commit [OPTIONS] CONTAINER
이미지 추출
export와 import는 다음 예제처럼 사용할 수 있습니다. export 명령어는 mycontainer라는 컨테이너의 파일 시스템을 rootFS.tar 파일로 추출하고, 이 파일을 import 명령어로 myimage:0.0이라는 이미지로 다시 저장합니다.
# docker import rootFS.tar myimage:0.0
이미지 배포
도커 사설 레지스트리
Docker File
도커는 일련의 과정을 손쉽게 기록하고 수행할 수 있는 빌드 명령어를 제공하고 있습니다. 완성된 이미지를 생성하기 위해 컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 실행해야 하는 명령어와 쉘 스크립트 등을 하나의 파일에 기록해 두면 도커는 이 파일을 읽어 컨테이너에서 작업을 수행한 뒤 이미지로 만들어냅니다. 이러한 작업을 기록한 파일의 이름이 Dokcerfile이라 하며, 빌드 명령어는 Dockerfile을 읽어 이미지를 생성합니다. Dockerfile을 사용하면 직접 컨테이너를 생성하고 이미지로 커밋해야 하는 번거로움을 덜 수 있기 때문에 좀 더 편리성을 제공할 수 있습니다.
Dockerfile은 애플리케이션을 개발하는 용도 외에도 여러 목적으로 사용될 수 있습니다. 생성한 이미지를 도커 허브 등을 통해 배포할 때 이미지 자체를 배포하는 대신 이미지를 생성하는 방법을 기록해 놓은 DockerFile을 배포할 수도 있습니다. 배포되는 이미지를 신뢰할 수 없거나 직접 이미지를 생성해서 사용하고 싶다면 도커 허브에 올려져 있는 Dockerfile로 빌드하는 것도 하나의 방법입니다. 실제로 도커 허브에 올려져 있는 대부분의 이미지는 Dockerfile을 함께 제공하고 있기 때문입니다. 도커를 처음 경험하시는 분들은 Dockerfile을 작성해야 되는 이유에 대해 어렵게 느껴질 수 있겠지만 좀 더 쉽게 이미지를 저장하고 생성하는데 쉽기 때문에 추후에 방식을 익혀두는 것을 추천드립니다.