클라우드와 컨테이너의 기초

$ docker run -d -e DB_HOST=db.staging.example.com web:1.4.2
$ docker run -d -e DB_HOST=db.prod.example.com web:1.4.2

위와 같이 데이터베이스의 접속 대상을 이미지에 써 넣지 않고, 컨테이너를 시작할 때 환경 변수로 전달하도록 했다. 이 설계의 주된 이점으로 가장 적절한 것은?

  1. A환경 변수에 넣은 값은 자동으로 암호화되므로, 비밀번호를 넣어도 다른 사람에게 읽히는 일이 없다
  2. B같은 이미지를 다시 만들지 않고 스테이징과 운영에서 설정만 바꾸어 사용할 수 있으므로, 시험한 것을 그대로 운영에 내보낼 수 있다
  3. C접속 대상의 정보가 이미지의 레이어에 들어가지 않으므로, 이미지의 레이어가 줄어 컨테이너의 시작이 크게 빨라진다
정답과 해설 보기

정답: B. 같은 이미지를 다시 만들지 않고 스테이징과 운영에서 설정만 바꾸어 사용할 수 있으므로, 시험한 것을 그대로 운영에 내보낼 수 있다

설정을 환경 변수로 전달하는 방법은 The Twelve-Factor App이라는 방법론에서도 권장하는 사고방식으로, 코드와 이미지를 그것을 실행하는 환경으로부터 분리할 수 있습니다. 같은 이미지를 스테이징과 운영에서 사용할 수 있으므로 시험한 것과 같은 것을 운영에 내보낼 수 있고, 접속 대상을 바꿀 때마다 이미지를 다시 만들 필요도 없습니다. 다만 환경 변수는 암호화되지 않으므로, 컨테이너의 설정이나 프로세스의 정보를 볼 수 있는 사람에게는 읽힙니다. 비밀번호 같은 기밀 값은 Kubernetes의 Secret 같은 구조로, 읽을 수 있는 사람을 좁혀서 전달합니다.

이 분야 연습하기 분야로 돌아가기

클라우드와 컨테이너의 기초의 다른 문제

  1. 여러 서비스가 연계하여 동작하는 시스템에서, 이용자의 요청 하나가 어떤 서비스를 어떤 순서로 거쳤고 각각에서 시간이 얼마나 걸렸는지 조사하고 싶다. 관측 가능성을 위한 데이터 중 가장 적합한 것은?
  2. Linux의 컨테이너를 실현하는 커널 기능 중 네임스페이스(namespaces)와 cgroups(컨트롤 그룹)의 역할의 조합으로 올바른 것은?
  3. Linux 호스트에서 Docker를 사용하여, 호스트와는 다른 배포판을 바탕으로 한 이미지로 컨테이너를 시작하고, 그 안에서 uname -r(커널의 릴리스를 표시하는 명령)과 cat /etc/os-release(배포판 정보를 표시하는 명령)를 실행했다. 결과의 설명으로 올바른 것은?
  4. 컨테이너 이미지와 컨테이너의 관계에 대한 설명으로 올바른 것은?
  5. 어떤 이미지로 시작한 컨테이너 안에서, 이미지에 포함된 설정 파일 /etc/app.conf를 수정했다. Docker의 일반적인 스토리지 구조(overlay2 등)에서 일어나는 일로 올바른 것은?