컨테이너/도커

Docker 이미지 만들기

JUNGKEUNG 2022. 5. 15. 17:52

도커 이미지 생성하는 순서

도커 파일 작성 -> 도커 클라이언트 -> 도커서버 -> 이미지 생성 

  • 도커 파일 작성 : 도커 이미지를 만들기 위한 설정 파일이다. 컨테이너가 어떻게 행동해야 하는지에 대한 설정을 정의한다.
  • 도커 클라이언트 : 도커 파일에 입력된 명령들이 도커 클라이언트에 전달되어야 한다.
  • 도커 서버 : 도커 클라이언트에 전달된 모든 중요한 작업들을 하는 곳이다.

 

도커 파일 만드는 순서

1. 베이스 이미지를 명시한다.

2. 추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어를 명시한다.

3. 컨테이너 시작시 실행 될 명령어를 명시한다.

 

 

베이스 이미지는 무엇인가?

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

 

 

도커 파일 생성

1. 먼저 도커 파일을 만들 폴더 하나를 바탕화면에 만든다.

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 뒤에 ./ 와 . 는 둘다 현재 디렉토리를 가르킨다.

만약 Visual Studio Code 로 했으면 Visual Studio Code 안에 있는 터미널로 작업하면 되고

다른걸로 작업 했으면 cmd창 열어서 바탕화면에 만든 파일로 이동 후 작업하면된다.

Visual Studio Code 에서 작업 시 docker build ./ 하면 밑에 처럼 에러가 발생하것이다.

위와 같이 도커에 들어가 설정에 간다음 buildkit : true 에서 false로 변경하면 된다.

 

Step 1/2 

- alpine 이미지 가져오기 0ac33e5f5afa 는 alpine 이미지 아이디

 

Step 2/2

-임시 컨테이너 생성 후 그 컨테이너에 시작 시 사용할 명령어 포함시키기

- 그런 후 방금 생성 한 컨테이너를 지우고 새로운 이미지 만들기

 

 

결론

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

참고 : 인프런 따라하며 배우는 도커와 CI환경

 

 

도커 이미지 이름 변경

docker build -t 변경이름/프로젝트이름:버전

작성하면 된다.

'컨테이너 > 도커' 카테고리의 다른 글

docker copy vs volume  (0) 2022.05.18
docker react 설치  (0) 2022.05.17
Docker 정리(4)  (0) 2022.05.15
Docker 정리(3)  (0) 2022.05.15
Docker 정리(2)  (0) 2022.05.15