본문 바로가기

Docker

Docker - 직접 도커 이미지 만들기

Dockerfile 만들기

 

도커 파일(Docker file)이란 ? 
- 도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해 주는 곳입니다.

 

도커 파일 만드는 순서 (도커 이미지가 필요한 것이 무엇인지를 생각하기)
1. 베이스 이미지를 명시해준다. (파일 스냅샷에 해당)
2. 추가적으로 필요한 파일을 다운 받기 위한 몇 가지 명령어를 명시해준다. (파일 스냅샷에 해당)
3. 컨테이너 시작 시 실행될 명령어를 명시해준다. (시작 시 실행될 명령어에 해당)

 

도커 이미지의 목표는 "hello 문구" 출력하기

 

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

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

FROM 
이미지 생성 시 기반이 되는 이미지 레이어입니다.
<이미지 이름>:<태그> 형식으로 작성 
태그를 안 붙이면 자동적으로 가장 최신 것으로 다운 받음
ex) ubuntu:14.04
RUN 
도커 이미지가 생성되기 전에 수행할 쉘 명령어
CMD
컨테이너가 시작되었을 때
실행할 실행 파일 또는 셸 스크립트입니다. 
해당 명령어는 DockerFile 내 1회만 쓸 수 있습니다

 

5. 이제 베이스 이미지부터 실제 값으로 추가해주기. 
6. 베이스 이미지는 ubuntu를 써도 되고 centos 등을 써도 되지만  hello를 출력하는 기능은 굳이 사이즈가 큰 베이스 이미지를 쓸 필요가 없기에 사이즈가 작은 alpine 베이스 이미지를 사용.
7. hello 문자를 출력해주기 위해 echo를 사용하여야 하는데 이미 alpine 안에 echo를 사용하게 할 수 있는 파일이 있기에  RUN 부분은 생략함.
8. 마지막으로 컨테이너 시작 시 실행될 명령어  echo  hello를 적어준다. 

 

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

도커 파일에 입력된 것들이 도커 클라이언트에 전달되어서 도커 서버가 인식하게 하여야 합니다.
그렇게 하기 위해서 docker build ./   또는   docker build . 

 

Build 명령어는
- 해당 디렉토리 내에서 dockerfile이라는 파일을 찾아서 도커 클라이언트에 전달시켜준다.
- docker build 뒤에   ./    와  . 는 둘 다 현재 디렉토리를 가리킨다.

그래서 docker build . 를 해보면 

build 과정 설명 
Step 1/2
- alpine 이미지 가져오기   a24bb~  는 alpine 이미지 아이디
Step 2/2
- 임시 컨테이너 생성 후 그 컨테이너에 시작 시 사용할 명령어 포함시키기.
- 그런 후 방금 생성 한 임시 컨테이너를 지우고  새로운 이미지 만들기

Step 2/2 자세히 보기
- Step 2에 보면 임시 컨테이너를 생성하고 무언가를 하고 다시 지우는데 
  왜 그렇게 하는 걸까 ?

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

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

도커 파일로 만든 이미지를 컨테이너에서 실행하려면 ?

도커 파일로 만든 이미지 아이디가 26254532...이런 식이다....그래서 이 아이디로 컨테이너를 실행하려면 docker run 26254532 .... 이런 식으로 너무 길고 복잡한 이미지 아이디를 써줘야 한다... IP Address가 기억하기 힘들기에  Domain 이름을 새로 만들어서 이용하는 것과 비슷하게우리가 만드는 도커 이미지에 이름을 줄 수 있다.

'Docker' 카테고리의 다른 글

Docker - Docker 기본적인 명령어  (0) 2022.09.03
Docker - 이미지로 컨테이너 만들기  (0) 2022.09.03
Docker - Docker 의 흐름 및 Vm,Docker 비교  (0) 2022.09.03
Docker - Docker란?  (0) 2022.09.03