Run your app in production (docker)
Docker 설치하고 Getting started guides 연습을 마친 경우 보아야 하는 문서임.
어떻게 app를 개발하고 디자인할지, 애플리케이션 데이터는 어떻게 저장을 할 것인지, 어떻게 애플리케이션을 확장가능하고 안전하며 robust하게 프로덕션 환경을 꾸밀지 설명을 하고 있음.
The basics
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로 설정을 하면 된다고 함.
Logging
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 별로 필요한 부분 있으면 살펴보면 된다.
Security
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해서 사용
Scale your app
Run your app in production (docker)
Work with external tools
PowerShell, Ansible, Puppet 등의 부분은 넘어가도 된다.
Run multiple services in a container : 컨테이너에서 여러 개의 서비스를 실행해야 할 때 스크립트를 이용해 활용하는 팃.
Extend Docker
플러그인에 대해서 설명을 하고 있음. 일단 skp 해도 됨.