Run your app in production (docker)

Docker  설치하고  Getting started guides 연습을 마친 경우 보아야 하는 문서임.

어떻게 app를 개발하고 디자인할지, 애플리케이션 데이터는 어떻게 저장을 할 것인지, 어떻게 애플리케이션을 확장가능하고 안전하며 robust하게 프로덕션 환경을 꾸밀지 설명을 하고 있음.

Configure and troubleshoot the Docker daemon

  • 대몬 수동으로 실행하기, 설정 옵션 수동으로 주기. 디버깅 모드. 설정은 daemon.json 에 넣는 것을 추천함. 
  • 문제 처리하기 : Out of Memory Exceptions, logs 읽기, 디버깅 활성화, Force a stack trace to be logged(실행해 보았지만 어떤 도움이 되는지는 모르겠다)

Collect Docker metrics with Prometheus

  • prometheus로 docker metric 수집하는 내용임.
  • 테스팅을 해 보았는데 http://myvm1:9090/targets 에서 http://localhost:9323/metrics 부분은 connection refused로 나왔음. 추가로 확인해보지는 않았음.
  • prometheus의 metric은 확인을 해 보았지만 자세한 내용은 prometheus 문서를 봐야 할 것임.

Start containers automatically

  • 컨테이너가 exit 했을 때 또는 docker  재시작시 docker 자동시작하는 정책 설정이 가능함. live restore 옵션과는 다르다.

Limit a container's resources

  • swap limit는 grub 옵션을 변경해야 함. memory, cpu 리소스 사용 제한하기

Docker object labels (Apply custom metadata)

  • images, containers, swarm nodes, swarm services 등에 metadata  적용 가능함. 예) node label 을 이용하여 특정 서비스를 특정 노드에서만 실행하도록 함.

Prune unused Docker objects

  • 사용하지 않는 docker 리소스 삭제 기능. docker는 명시적으로 지정하지 않으면 이미지 등 사용하지 않는 object를 삭제하지 않는 보수적인 접근법을 쓴다. 

Keep containers alive during daemon downtime

  • live restore option은 docker upgrade  를 하는 동안에서 컨테이너를 유지하는 기능임.  swarm mode 에서는 지원하지 않는다. 

Control and configure Docker with systemd

  • docker daemon  옵션 설정하는 방법은 여러 가지가  있지만  이 문서에서는 플랫폼에 비의존적인 /etc/docker/daemon.json 을 추천함.
  • HTTP/HTTPS proxy 는 어떤 경우에 사용을 하는지 아직은 잘 모르겠다.

Format command and log output

  • docker 에서는 Go templates를 이용하여 각 명령과 log drivers의 출력을 조정할 수 있다.
  • 각 명령별로 해당 내용 확인을 해야 함. join, json, lower 등 template functions에 대해서 간략히 예제를 보여주고 있음

Run a local registry mirror(Registry as a pull through cache)

  • docker instance가 많은 경우  인터넷의 공개 docker registry에서 이미지를 다운로드 받는것이 많을 것임. 이경우 로컬 registry mirror를 구성하여 네트워크 트래픽을 줄일 수 있음. Registry 에서 pull through cache로 설정을 하면 된다고 함.

View logs for a container or service

  • docker logs  / docker service logs . docker logs 에서 기본은 STDOUT, STDERR 보여줌. 
  • 어떤 경우 docker logs 는 다음과 같은 과정을 진행하지 않으면 유용한 정보를 보여주지 않을 수 있다.
    • logging driver를 통해서 로그를 파일, 외부 호스트, 데이터베이스 또는 다른 로깅 백엔드에 보낼 수 있다.
    • web/db 서버와 같이 non-interactive process 로 실행하는 이미지의 경우 애플리케이션은 아웃풋을 STDOUT, STDERR가 아니라 로그 파일로 전송한다. → official nginx image 의 경우  access.log를 /dev/stdout , error.log를 /dev/stderr로 심볼릭링크로 생성해서 처리하고 있다. official Apache httpd도 동일한 방식으로 처리를 한다. See the Dockerfile. 

Configure logging drivers

  • Docker daemon 기본 logging driver는  json-file이다. 각 logging driver에 따라서 log-opts를 통해 세부 설정 할 수 있음.
  • container 를 시작할 때 logging driver를 지정할 수 있다. logging drivers와 함께 환경 변수나 lables를 설정할 수도 있다. container 에서 labels 를 설정해서 어떻게 활용을 하는지는 문서만 봐서는 잘 모르겠다.
  • 지원하는 logging drivers : none, json-file(default), syslog, journald, gelf, fluentd, awslogs, splunk, etwlogs(win), gcplogs

Use a logging driver plugin : 필요하면 logging driver plugin을 만들어서 사용할 수 있음.

Log tags for logging driver

  • tag log 옵션은 컨테이너의 로그 메시지를 구별할 수 있는 태그를 어떻게 설정하는지 지정하는 옵션이다. 기본은 컨테이너 아이디의 첫번째 12개 문자만 사용하지만 바꾸어서 사용할 수 있다. 
  • syslog  와 함께 테스팅은 해보았는데 json-file 에서는 tag는 지원이 안된다.

각 logging driver 별로 필요한 부분 있으면 살펴보면 된다.

Docker 보안에 대해서 다루고 있음. 내용을 상세히 읽어보지는 않았고 대략 큰 개념만 보았음.

Docker security 

  • Docker security 를 점검할 때 고려할 주요 4가지 분야는 다음과 같다.
    • the intrinsic security of the kernel and its support for namespaces and cgroups;
    • the attack surface of the Docker daemon itself;
    • loopholes in the container configuration profile, either by default, or when customized by users.
    • the “hardening” security features of the kernel and how they interact with containers.

Protect the Docker daemon socket

  • Docker 기본은 non-networked Unix socket 으로 실행을 한다. HTTP socket 으로 통신을 하도록 설정을 할 수 있다. 네트워크를 통해서 Docker 와 통신을 한다면 TLS를 활성화할 수 있다.
  • 대몬 모드, 클라이언트 모드에서 CA로 사인한 인증서를 이용해서만 접속할 수 있도록 설정을 할 수 있다.

Verify repository client with certificates : Docker registry 와 Docker daemon 간의 통신 암호화하고 인증서를 인증을 하도록 설정

Content trust in Docker : Content trust gives you the ability to verify both the integrity and the publisher of all the data received from a registry over any channel.

Antivirus software and Docker : antivirus 소프트웨어를 이용해 docker 파일을 스캔하는 경우 락이 걸리고 도커 명령에 행이 걸릴 수 있다. 

AppArmor , Seccomp security profile for docker

  • AppArmor (Application Armor) is a Linux security module that protects an operating system and its applications from security threats. 
  • Secure computing mode (seccomp) is a Linux kernel feature. You can use it to restrict the actions available within the container. 

Isolate containers with a user namespace : 컨테이너 내부에서 privilege-escalation attacks 을 막는 가장 좋은 방법은 컨테이너 애플리케이션을 unprivileged user로 실행하는 것임. user를 remap해서 사용


Run your app in production (docker)


PowerShell, Ansible, Puppet 등의 부분은 넘어가도 된다.

Run multiple services in a container : 컨테이너에서 여러 개의 서비스를 실행해야 할 때 스크립트를 이용해 활용하는 팃.

플러그인에 대해서 설명을 하고 있음. 일단 skp 해도 됨.