#11 도커로 리액트 실행하기 -2

김민성·2023년 6월 26일
0
post-thumbnail

Docker를 사용할 때의 흐름 감잡기

항상 도커를 사용할 땐

  1. 먼저 도커 CLI에 커맨드를 입력한다.
  2. 그러면 도커 서버 (도커 Daemon)이 그 커맨드를 받아서 그것에 따라 이미지를 생성하든 컨테이너를 실행하든 모든 작업을 하게 된다.

실제로 커맨드를 입력해보기

docker run hello-world

설명

  1. 도커 클라이언트에 커맨드를 입력하니 클라이언트에서 도커 서버로 요청을 보냄
  2. 서버에서 hello-world라는 이미지가 이미 로컬에 cache가 되어 있는지 확인
  3. 현재는 없기에 Unable to find image ~ 라는 문구가 2번째 줄에 표시
  4. 그러면 Docker Hub이라는 이미지가 저장되어 있는 곳에 가서 그 이미지를 가져오고 로컬에 Cache로 보관한다.
  5. 그 후 이제는 이미지가 있으니 그 이미지를 이용해서 컨테이너를 생성한다.

이제 hello-world 이미지가 캐시가 되었으니

한번 더 docker run hello-world 하면 어떻게 될까?


Unable to find image ~ 라는 문구가 없이 프로그램이 실행되는 것을 확인할 수 있다. 결국은 캐쉬 된 이미지를 이용해서 컨테이너를 만든 후 프로그램을 실행하는 것이다.



이미지로 컨테이너를 만들기

어떻게 컨테이너가 생성이 되게 되는지 자세히 알아보자.

이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다.

그러면 그 필요한 것이 무엇일까?

  1. 컨테이너가 시작될 때 실행되는 명령어 ex) run kakaotalk
  2. 파일 스냅샷 ex) 컨테이너에서 카카오톡을 실행하고 싶다면 카카오톡 파일 (카카오톡을 실행하는데 필요한 파일) 스냅샷
    * 파일 스냅샷은 디렉토리나 파일을 카피한 것.

이미지로 컨테이너 만드는 순서

1. Docker 클라이언트에 docker run <이미지> 입력해준다.
2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮겨 준다.


3.이미지에서 가지고 있는 명령어 (컨테이너가 실행될때 사용될 명령어를 이용해서 카카오톡을 실행시켜준다.


도커 이미지 생성하는 순서

직접 도커 이미지를 만들어서 사용할 수도 있고 직접 만든 도커 이미지를 도커 허브에 올려서 공유할 수도 있다.
그래서 어떻게 직접 이미지를 만들 수 있는지 알아보자.

간단하게 도커 이미지 다시 복습하기

1.도커 이미지는 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고 있 는 소프트웨어 패키지이다.
2.지금까지 해왔듯이 도커 이미지는 Dockerhub에 이미 다른 사람들이 만들어 놓은 것을 이용할 수도 있으며, 직접 도커 이미지를 만들어서 사용할 수도 있고 직접 만든 것을 Dockerhub에 업로드할 수도 있다.

도커 이미지를 이용해서 도커 컨테이너를 생성. ex) docker create <이미지 이름>

컨테이너는 도커 이미지로 생성한다. 그럼 도커 이미지는 어떻게 생성할까?

도커 이미지 생성하는 순서



Dockerfile 만들기

도커 파일(Docker file)이란 ?

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

Dockerfile을 만드는 법

도커 파일 만드는 순서

(도커 이미지가 필요한 것이 무엇인지를 생각하기)

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

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

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

실제로 만들어보자

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

  1. 도커 파일을 만들 폴더를 하나 만든다. dockerfile-folder 라는 폴더를 생성해주자.

  2. 방금 생성한 도커 파일 폴더를 에디터를 이용해서 실행 (Visual Studio Code)

  3. 파일 하나를 생성한다. 이름은 dockerfile.

  4. 그 안에 먼저 어떻게 진행해 나갈지 기본적인 토대를 명시한다.

    FROM : 이미지 생성 시 기반이 되는 이미지 레이어.
    RUN : 도커 이미지가 생성되기 전에 수행할 쉘 명령어
    CMD : 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셀 스크립트이다. 이 명령어는 DockerFile 내 1회만 사용가능.

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

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

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

     # 베이스 이미지를 명시해준다.
     FROM alpine
     # 추가적으로 필요한 파일들을 다운로드 받는다.
     # RUN command
    
     #컨테이너 시작 시 실행 될 명령어를 명시해준다.
     CMD [ "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 1/1만 터미널에서 확인되나, 1/2, 2/2 이렇게 나오게 할 수는 있다. 하지만 간단히 알아보는 과정이기에 따로 작업을 하진 않고, 1/2, 2/2가 확인되게 한 터미널 창을 따로 가져와보았다.

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

결론

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

실행


터미널창에서 가장 하단에 있는 image로 하면 된다. 이 image의 앞부분 fd3만 입력하면 hello가 출력된다.

profile
다양한 활동을 통해 인사이트를 얻는 것을 즐깁니다. 저 또한 인사이트를 주는 사람이 되고자 합니다.

0개의 댓글

관련 채용 정보