직접 도커 이미지를 만들어 보기

Min·2021년 1월 15일
0

Docker

목록 보기
3/5
post-thumbnail

1. 도커 이미지 생성하는 순서

지금까지 도커 이미지를 도커 허브에서 가져와 사용했는데
도커 이미지를 직접 만들어 사용할 수도 있고,
도커 허브에 올려서 공유를 할 수도 있다.

2. Dockerfile 만들기

도커 파일(Docker file)이란?

도커 이미지를 만들기 위한 설정 파일이며,
컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해 주는 곳

도커 파일 만드는 순서

1) 베이스 이미지를 명시해준다.
(파일 스냅샷에 해당)

2) 추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어를 명시해준다.
(파일 스냅샷에 해당)

3) 컨테이너 시작시 실행 될 명령어를 명시해준다.
(시작시 실행될 명령어에 해당)

베이스 이미지

도커 이미지는 여러개의 레이어로 되어 있으며,
그 중에서 베이스 이미지는 이 이미지의 기반이 되는 부분이다.

레이어는 중간 단계의 이미지라고 생각하면 된다.

실습

목표

"hello" 문구 출력하기

순서

1) 도커 파일을 만들 폴더 생성 ex) dockerfile-folder
2) 방금 생성한 도커 파일 폴더에 에디터를 이용해서 실행
3) docerfile 파일 하나를 생성
4) 그 안에 먼저 어떻게 진행해 나갈지 기본적인 토대를 명시

FROM, RUN, CMD 등은 도커 서버에게 무엇을 하라고 알려주는 것이다.

FROM
이미지 생성시 기반이 되는 이미지 레이어.
<이미지 이름>:<태그> 형식으로 작성
태그를 안붙이면 자동적으로 가장 최신것으로 다운 받는다.
ex) ubuntu:14.04

RUN
도커이미지가 생성되기 전에 수행할 쉘 명령어

CMD
컨테이너가 시작되었을 때 실행할 실행 파일 또는 쉘 스크립트.
해당 명령어는 DockFile내 1회만 사용 가능.

5) 베이스 이미지부터 실제 값으로 추가해주기

6) 베이스 이미지는 ubuntu나 centos 등을 써도 되지만
hello를 출력하는 기능은 굳이 사이즈가 큰 베이스 이미지를 쓸 필요가 없기에
사이즈가 작은 alpine 베이스 이미지를 사용.

7) hello 문자를 출력해주기 위해 echo를 사용하여야 하는데
이미 alpine 안에 echo를 사용하게 할 수 있는 파일이 있기에
RUN 부분은 생략

8) 마지막으로 컨테이너 시작시 실행 될 명령어 echo hello를 적어준다.

3. 도커 파일로 도커 이미지 만들기


도커 파일로 입력된 것들이 도커 클라이언트에 전달되어서
도커 서버가 인식하게 하여야 한다.
이를 위해 docker build ./ 또는 docker build .를 사용

Build 명령어

해당 디렉토리 내에서 dockerfile이라는
파일을 찾아서 도커 클라이언트에 전달시켜준다.

docker build 뒤에 ./.는 둘다 현재 디렉토리를 가르킨다.

Step 2/2 자세히 보기

임시 컨테이너를 생성하고 무언가를 하고 다시 지우는 이유

Step 1/2

alpine 이미지를 가져오며 시작시 실행할 명령어는 아직 없다.
(7731472c3f2a)

Step 2/2

1) 임시컨테이너(66822ec96455) 생성
하드 디스크에 파일 시스템 스냅샷(etc, dev, bin...) 추가되며
시작시 실행할 명령어는 아직 없다.

2) 임시컨테이너에 시작시 실행할 명령어(echo hello) 추가

3) 임시컨테이너를 토대로 alpine 이미지를 생성한다.
(a7290e5bff7a)

4) 임시컨테이너 삭제(66822ec96455)

결론

베이스 이미지에서 다른 종속성이나 새로운 커맨드를 추가할 때는
임시 컨테이너를 만든 후 그 컨테이너를 토대로 새로운 이미지를 만든다.
그리고 그 임시 컨테이너는 지워준다.

이미지 -> 임시 컨테이너(새로운 명령어, 새로운 파일 스냅샷) -> 새로운 이미지

4. 내가 만든 이미지 기억하기 쉬운 이름 주기

빌드

$ docker build -t devpark0714/hello:latest ./

출력

$ docker run -it devpark0714/hello
hello

profile
slowly but surely

0개의 댓글