• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

도커 파일에 관한 질문 입니다.

19.11.08 00:35 작성 조회수 203

1

수고하십니다.

도커파일및 기타 질문 드립니다.

1. Copy hello.js가 있는데 도커 컨테이너에 복사를 하라는 명령인가요?

2. docker build는 도커이미지를 만드는거 같은데 이 이미지라는게 컨테이너를 만들고 그 안에  hello.js 실행 관련된 모든 라이브러리를 넣은 걸 말하는건지요

3. build명령으로 컨테이너가 만들어 져서 1번의 명령으로 컨테이너 안에 hello.js및 관련 라이브러리를 모두 복사하는 건지요

4. 컨테이너는 도커파일 하나당 하나의 컨테이너가 만들어 지는건가요?

5. 쿠버네티스 대쉬보드는 어떻게 뛰우는지요

6. pod를 만들때 image를 가지고 오는건 디폴트로 도커허브로 정해져 있는건지요

바쁘시겠지만 초보자도 알기 쉽게 답변 부탁 드릴께요.

답변 4

·

답변을 작성해보세요.

1

kium님의 프로필

kium

질문자

2019.11.12

친철한 답변 감사합니다.

도커도 초보라서 궁금한 점이 많습니다. 지송합니다.

답변중에 다시 궁금한 점이 있어서 인라인으로 질문 드립니다.

1. 네, 맞습니다. COPY hello.js .   <- 뒤에 점도 있어요.로컬에 만들었던 hello.js 파일을 컴테이너의 . (루트위치)에 복사하라는 명령입니다

-> 컨테이너가 복사 한다는 말은 run 명령을 했을때 컨테이너가 만들어 진 후에 파일을 컨테이너에 복사 한다는 말씀이신가요? 근데 컨테이너에 올리는 건 파일이 아니라 이미지 아닌가요?

3. docker run 명령어를 통해서 해당 이미지에서 컨테이너가 생성됩니다. 

-> 이미지에서 컨테이너가 생성된다는 말이 혼동이 오네요, run 명령어로 컨테이너가 만들어 져서 이미지가 컨테이너에 담기는 말씀인가요?

4. 전체적인 흐름이 어떻게 되는지 확인 부탁 드립니다.

build해서 현 디렉토리에 있는 파일및 도커 허브에 있는 파일을 다운 받아서 이미지를 만든 후

run 명령어로 컨테이너를 만들어서 이미지를 컨테이너에 복사해서(카피 명령어) 넣는다 

이상입니다.

0

kium님의 프로필

kium

질문자

2019.11.26

다시봐도 아리송 하지만 일단 외우겠습니다.

감사합니다.

0

아 오타가 있었네요 

로컬에 만들었던 hello.js 파일을 컴테이너의 . (루트위치)에 복사하라는 명령입니다

->

로컬에 만들었던 hello.js 파일을 컨테이너 이미지의 . (루트위치)에 복사하라는 명령입니다

-----------------------

일단 이미지에 대한 의미와 사용을 얘기해보면

우리가 특정 소프트웨어를 설치하려면 내 PC가 윈도우일 경우 윈도우용 해당 소프트웨어 이미지를 받잖아요?

해당 이미지는 Mac에서는 안돌아갈껍니다. 윈도우 운영체제에서 돌게끔 만들어놓은 이미지니깐요.

그리고 그 이미지에는 소프트웨어가 설치되기 위한 디렉토리 구조와 파일들이 있겠죠.

우리는 이 이미지 하나로 여러 컴퓨터에 설치를 할 수 있을꺼고, 물리적인 이미지는 하나였지만 여러 소프트웨어를 띄울 수 있게됩니다.

이제 도커로 돌아와서

일단 도커 이미지는 도커가 설치되어 있는 환경에서 돌아가도록 만들어진 이미지고요.

최초에 도커 허브에서 여러 도커 이미지들이 있는데 node 패키지가 들어있는 이미지를 다운 받았죠.

그 이미지에 build 명령을 사용해서 제 hello.js 파일을 복사한 새 도커 이미지를 만듭니다.

이름이 tmkube/hello 이고요.

이제 이 도커 이미지는 도커가 설치되어 있는 여러 컴퓨터들에서 사용 될 수 있겠죠.

위에 윈도우 운영체제의 경우 일반적으로 한대의 PC에 같은 이미지를 설치할 수가 없습니다.

왜냐면 이미지 안에 디렉토리와 파일의 구조들이 정해져 있는데 실제 C:\의 경로는 하나이기 때문에 충돌이 날꺼예요.

근데 도커는 PC는 한대이지만 시스템들이 독립적으로 돌아가도록 환경을 만들어 줍니다. 

그게 바로 컨테이너 환경인데요.

아무리 같은 경로에 같은 파일이 들어있는 이미지라도 독립적인 컴퓨터를 사용하고 있는 것처럼 가상화 환경을 제공해 주기 때문에 하나의 도커 이미지로 여러 컨테이너를 만들 수 있어요.

이렇게 도커 이미지를 컨테이너로 만드는 과정이 run 명령어입니다.

(이미지와 컨테이너의 관계는 1 대 1이 아닌 1대 다인거죠)

보통  이미지 > 컨테이너 이미지 >  도커 이미지 순으로 큰 의미이지만 쿠버네티스, 도커를 하면서 비슷한 맥락으로 얘기합니다.

0

1. 네, 맞습니다. COPY hello.js .   <- 뒤에 점도 있어요

로컬에 만들었던 hello.js 파일을 컨테이너 이미지의 . (루트위치)에 복사하라는 명령입니다.

2. 중요한 질문이네요, 컨테이너와 도커이미지의 개념이 혼돈될 수 있습니다. 

docker build를 하면 hello.js와 node:slim 라이브러리가 이미지가 합쳐진 새로운 나만의 도커 이미지가 생성됩니다.

여기까진 아직 컨테이너를 만든게 아닙니다.

일반적으로 컨테이너, 컨테이너 이미지, 도커이미지, 이미지 등 혼용해서 문맥적인 의미로 말하고 이해하기 때문에 

따지고보면 잘못말하고 있는 경우도 많습니다.

3. docker run 명령어를 통해서 해당 이미지에서 컨테이너가 생성됩니다. 

4. 우리는 도커 이미지를 하나 만들어 놓고 그 도커이미지로 여러개의 컨테이너를 만들 수 있습니다. 도커이미지가 붕어빵을 만드는 틀이고, 제가 네모난 붕어빵 틀을 만들어 놓으면, 그 틀을 이용해서 만들어진 붕어빵이 바로 컨테이너 인 셈이죠. 즉 A라는 서비스를 담은 도커이미지를 하나 만들어 놓고 컨테이너로 여러개의 서비스를 띄울수 있는 거죠.

5. 강의 커리큘럼에 [부록] 카테고리를 보시면 쿠버네티스 설치에 대한 강의가 준비되어 있어요.

6. 네, 디폴트는 도커허브입니다. 아래와 같은 형식으로 사용되고요

<Docker Hub ID>/<Repository 이름>:<이미지 버전>

변경도 가능한데요, 일반적으로 현업에서는 내부에 프라이빗 이미지 레파지토리를 만들고 이곳으로 연결을 합니다.

의식에 흐름에 맡겨 정신없이 적어 봤는데, 혹시 내용이 부족한 답변이 있으시면 말씀해 주세요.

감사합니다.