Docker 기본 흐름

728x90

도커에 대해 공부해보는 시간을 가지기로 했고, 개인적으로 정리한 것들을 이곳에 작성하기로 했다.

항상 도커를 사용할 때는 아래와 같은 흐름을 갖는다.

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

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

1. 도커 클라인트에서 docker run <이미지> 입력해준다.!

etc-image-1

2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮겨 준다.

etc-image-2

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

etc-image-3

도커 이미지 : 프로그램을 실행하는 데 필요한 설정들이나 종속성을 가지고 있고 쉽게 말해, 응용 프로그램을 실행하는데 필요한 모든 것들을 가지고 있다.
ex) run kakaotalk

파일 스냅샷 : 디렉토리나 파일을 카피한 것
ex) 컨테이너에서 카카오톡을 실행하고 싶다면 카카오톡 파일(카카오톡을 실행하는데 필요한 파일)
스냅샷

즉, 이미지를 이용해서 컨테이너를 만들고 컨테이너가 실행되서 프로그램을 컨테이너 안에서 실행할 수 있게 되는 것이다.

도커 이미지 내부 파일 구조

보통 도커로 무언가를 실행할 때는 docker run <이미지 이름> 을 사용한다.

여기서 docker 는 도커 클라이언트를, run 은 컨테이너 생성 및 실행을, 이미지 이름은 컨테이너를 위한 이미지를 뜻한다.

작동 순서

  1. 도커 클라이언트에 명령어 입력 후 도커 서버로 보냄
  2. 도커 서버에서 컨테이너를 위한 이미지가 캐쉬가 되어 있는지 확인
  3. 없으면 도커 허브에서 다운 받아오고 있다면 이미 가지고 있는 이미지로 컨테이너를 생성

이미지로 컨테이너 생성 하는 순서

  1. 먼저 파일 스냅샷 되있는 것을 컨테이너의 하드 디스크 부분에 올린다.
  2. 시작 커맨드를 이용하여 어플리케이션을 실행한다.
    etc-image-4

ls → 이 자리는 원래 이미지가 가지고 있는 시작 명령어를 무시하고 여기에 있는 커맨드를 실행하게 함

즉, 명령어를 실행하여 현재 디렉토리의 파일 리스트를 나타나게 했다.

ex)docker run alpine ls

etc-image-5

1. alpine 이미지를 이용해서 컨테이너를 생성

etc-image-6

2. 생성할 때 alpine 이미지 안에 들어있던 파일 스냅샷들 (bin, dev, etc 등등...) 이 컨테이너 안에 있는 하드 디스크로 다운로드 됨

etc-image-7

3. 이미지 이름 뒤에 다른 명령어를 더 붙여서 원래 이미지 안에 들어있는 기본 커맨드는 무시가 되고 ls 명령어가 실행됨(docker run alpine ls)

etc-image-8

alpine 이미지 파일 스냅샷 안에 이미 ls 를 사용 가능하게 하는 파일이 있음
hello-world 이미지로는 ls 명령어 사용 불가능
docker run hello-world ls 하면 아래와 같은 오류가 뜸.
설명을 보면 excutable file not found → 실행할 수 있는 파일을 못찾았다.

etc-image-9
728x90