1. 다음중 도커에 대한 설명이 아닌것은?
-
애플리케이션의 각 컴포넌트를 컨테이너로 이주한 다음 애저 쿠버네티스 서비스나 아마존 일랙스틱 컨테이너 서비스 혹은 직접 구축한 도커 클러스터에서 전체 애플리케이션을 실행할 수 있다.
-
기존 설치 절차를 Dockerfile이라는 스크립트로 재작성해야하고, 배포 관련 사항 역시 도커 컴포즈나 쿠버네티스에서 사용되는 애플리케이션 매니페스트로 재작성해야한다.
-
코드를 수정할 필요는 없다. 컨테이너화된 애플리케이션은 업무용 노트북부터 클라우드까지 어떤 환경이든 기존과 동일한 기술 스택에서 그대로 동작한다.
4.애플리케이션의 각 컴포넌트를 가상머신에서 동작시킨다.
2-1. 다음 명령어의 의미와 명령어를 통해 실행될 일들을 서술 하시오
docker container run diamol/ch02-hello-diamol
2-2. 조금 전의 명령어를 한 번 더 입력해보면 이미지를 내려받는 부분이 사라지고 바로 컨테이너를 실행하는 메시지가 출력된다. 이 애플리케이션은 컴퓨터의 이름, 운영체제 종류, 네트워크 주소 등을 출력하는데 컨테이너를 실행시킬때마다 컴퓨터의 이름과 IP주소가 바뀐다. 그 이유는 무엇일까?
3. 다음중 컨테이너에 대한 설명으로 옳지 않은것은?
- 컨테이너는 격리는 달성하더라도 밀집은 제공하지 못한다.
- 컨테이너는 호스트 컴퓨터의 운영체제를 공유하므로 필요한 리소스가 크게 경감된다.
- 컨테이너는 호스트 컴퓨터에서 가상 머신에 비해 더 많은 수의 애플리케이션을 실행할 수 있다.
- 컨테이너는 서로 독립적인 환경을 갖고, 호스트 컴퓨터의 CPU와 메모리, 운영 체제를 공유한다.
- 컨테이너는 도커가 관리하는 독립적인 가상 리소스(호스트명, IP주소, 디스크 드라이브)를 갖는다.
4. 다음중 docker container run 명령어의 옵션에 대해서 정확하지 않은 설명을 고르시오
- --interactive: 컨테이너에 접속된 상태가 된다.
- --tty : 터미널 세션을 통해 컨테이너를 조작한다.
- --detach: 컨테이너를 백그라운드에서 동작시킨다.
- --publish: 컨테이너의 포트를 외부에 공개한다.
- --name: 컨테이너에 이름을 붙이고 이 이름으로 컨테이너를 지칭한다.
5. 다음 Dockerfile과 인스트럭션에 대한 설명으로 틀린것을 고르시오
//web-ping 애플리케이션의 Dockerfile 스크립트
FROM diamol/node
ENV TARGET="blog.sizeyed.com"
ENV METHOD="HEAD"
ENV INTERVAL="3000"
WORKDIR /web-ping
COPY app.js .
CMD ["node", "/web-ping/app.js"]
- FROM: 이 이미지는 web-ping 애플리케이션을 실행하는 데 필요한 런타임인 Node.js가 설치 돼 있다.
- ENV: 환경 변수 값을 지정하기 위한 인스트럭션이다. 값을 지정하기 위해 [key]="[value]" 형식을 따른다.
- WORKDIR: 컨테이너 이미지 파일 시스템에 디렉터리를 만들고, 해당 디렉터리를 작업 디렉터리로 지정하는 인스트럭션이다. 리눅스 컨테이너에서는 /web-ping 디렉터리를 만들고, 윈도 컨테이너에서는 C:\web-ping 디렉터리를 만든다.
- COPY: 로컬 파일 시스템의 파일 혹은 디렉터리를 컨테이너 이미지로 복사하는 인스트럭션이다. [원본경로][복사경로] 형식으로 지정한다.
- CMD : 도커가 컨테이너를 실행하기 위한 인스트럭션이다. 여기서는 Node.js 런타임이 컨테이너를 시작하도록 app.js를 지정했다.
6. 이미지 레이어에 대한 설명으로 틀린것을 고르시오
- Dockerfile 인스트럭션과 이미지 레이어는 1:1 관계를 갖는다.
- 이미지 레이어를 여러 이미지가 공유한다면, 공유되는 레이어는 수정이 쉬워야한다. 공유하는 다른 이미지에 영향을 미치기 때문이다.
- 만약 Node.js 애플리케이션이 실행되는 컨테이너를 여러 개 실행한다면 이들 컨테이너는 모두 Node.js 런타임이 들어있는 이미지 레이어를 공유한다.
- 도커 이미지는 이미지 레이어가 모인 논리적 대상이다.
7. 멀티 스테이지 Dockerfile 스크립트에 대한 설명으로 옳지 않은것을 고르시오
- 모든 빌드 과정은 도커 컨테이너 내부에서 이뤄진다. 그리고 이들 컨테이너는 모든 도구를 정확한 버전으로 갖추고 있다.
- 최종 산출물인 이미지에 모든 도구가 포함된다.
- 멀티 스테이지 Dockerfile 스크립트를 통해 빌드 과정을 세밀하게 조정하여 최종 산출물인 이미지를 작게 유지할 수 있다.
- 멀티 스테이즈 빌드의 각 단계는 자신만의 캐시를 따로 갖는다. 그리고 도커는 빌드 중에 각 인스트럭션에 해당하는 레이어 캐시를 찾는다.
8. 도커 이미지에는 이름이 부여되는데, 이 이름에 해당 이미지를 내려받기 위해 필요한 모든 정보가 들어있다. 이미지의 전체 이름(이미지 참조)의 네가지 요소에 대한 설명으로 옳지 않은것을 골라라.
docker.io/diamol/golang:latest
- docker.io : 이미지가 저장된 레지스트리의 도메인, 기본값은 도커 허브이다.
- diamol: 이미지의 작성자의 계정 이름. 개인 혹은 단체의 이름에 해당한다.
- diamol: 누구나 이미지를 내려받고 해당 리포지 토리에 이미지를 푸시할 수 있다.
- golang: 이미지 리포지터리의 이름. 일반적으로 애플리케이션의 이름에 해당한다.
9. 로컬 컴퓨터 전용 도커레지스트리에 대한 설명으로 옳지 않은것을 고르라.
- 로컬 레지스트리에 이미지를 푸시하고 내려 받기 위해 보안 프로토콜인 HTTPS대신 비보안 프로토콜인 HTTP를 사용한다.
- 비보안 레지스트리를 사용하려면 로컬 컴퓨터의 레지스트리를 비보안 레지스트리 허용 목록에 추가해야한다.
도커엔진의 모든 설정은 daemoe.json이라는 이름의 설정파일에 들어있다.
- 실제 도메인 네임이나 IP주소를 알면 로컬 네트워크상의 다른 사람에게 이미지를 공유할 수 있다.
- 로컬 레지스트리를 사용하는것이 상업용 레지스트리를 사용하는 것 보다 보안상 훨씬 유리하다.
10. 도커 이미지 태그에 대한 설명으로 옳지 않은것을 고르시오.
- 같은 이미지에 여러 개의 태그를 부여할 수 없다.
- [major].[minor].[patch] 형태를 따르는것이 일반적이다.
- 직접 작성한 Dockerfile 스크립트의 기반 이미지는 가능한 한 정확한 버전을 사용하는게 좋다.
- 버전을 구체적으로 지정하지 않으면 빌드용 이미지가 업데이트 되면서 빌드가 깨질 수 있고, 런타임의 업데이트로 인해 애플리케이션 실행 과정에서 오류가 발생할 수 있다.