본문 바로가기

Create a base image

Docker Hub 에서 제공하는 이미지를 사용하지 않고 새로운 베이스 이미지 제작하기.

두가지 방법이 있다.


- debootstrap 과 docker import 를 사용하는 방법

- scratch 을 베이스 이미지로 docker build 하는 방법



1. debootstrap 사용


debootstrap 은 현재 시스템에 또 다른 Debian 기반의 시스템을 설치할 수 있는 툴이다.

debootstrap 를 사용하여 서브디렉토리에 ubuntu 를 하나 더 설치하고 이미지로 만들 것이다.


# apt-get install debootstrap
# debootstrap trusty ubuntu1404
cs


ubuntu1404 디렉토리에 Ubuntu 14.04 버전인 trusty 의 바이너리 파일이 생성되었다.


docker import 로 이미지를 만들려면 tar 압축 파일이 필요하다. 

ubuntu1404 디렉토리를 tar 파일로 압축해야 한다. 압축 후에 myUbuntu 라는 이미지로 생성한다.


# tar -C ubuntu1404 -c . | docker import - myUbuntu
e72dd803924af5636a1181c693846f3d1b3d4aa63639d83b27d22da835c91a3f
cs


docker import 는 tar 파일로 압축된 파일 시스템으로부터 이미지를 생성한다. URL 을 사용할 수도 있다.


아래 명령은 현재 디렉토리의 내용을 바로 hello 이미지로 생성한다.


# tar -c . | docker import - hello
cs


이미지가 생성되었는지 확인한다.


# docker images
cs



2. scratch 사용


컨테이너를 빌드하기 위해 scratch 라는 빈 이미지를 예약어를 사용할 수도 있다. 

Docker Hub 에 많은 scratch 가 있지만 pull, run 등 아무것도 할 수 없다.

이미지가 비어있기 때문에 컨테이너를 생성할 수는 없고, 빈 이미지로 시작하고 싶다면 Dockerfile 에서 scratch 예약어를 지정하면 된다.

그리고 Dockerfile 의 scratch 다음에 원하는 명령어들을 나열하고 build 하면 scratch 이미지를 사용하여 컨테이너를 생성할 수 있다.


FROM scratch
ADD hello /
CMD ["/hello"]
 
docker build --tag hello:0.1 .
cs