본문 바로가기

docker12

[Docker] 13. 도커 데몬 모니터링 Contents 도커 데몬 디버그 모드 events, stats, system df 명령어 CAdvisor 다양한 목적에 부합하는 모니터링 방법은 도커에 매우 많습니다. 제한적이지만 도커 엔진 자체가 지원하는 모니터링 기능도 있고, 도커 프로젝트에서 지원하는 상용 솔루션 및 각종 오픈소스 대시보드도 있습니다. 이번 글에서는 하나의 컨테이너 뿐만 아니라 도커 데몬 자체를 모니터링하는 방법을 알아보겠습니다. 1. 도커 데몬 디버그 모드 도커 데몬에서 어떤 일이 일어나고 있는지 가장 확실하고 정확하게, 그리고 자세히 알아내는 방법은 도커 데몬을 디버그 옵션으로 설정하여 실행하는 것입니다. 디버그 옵션으로 실행하면 Remote API의 입출력뿐만 아니라 로컬 도커 클라이언트에서 오가는 모든 명령어를 로그로 출력.. 2021. 7. 15.
[Docker] 12. 스토리지 드라이버(storage driver) Contents 스토리지 드라이버의 원리 스토리지 드라이버 사용하기 AUFS 드라이버 Devicemapper OverlayFS Btrfs ZFS 1. 스토리지 드라이버의 원리 이미지는 읽기 전용 파일로 사용되며, 컨테이너는 이 이미지 위에 얇은 컨테이너 레이어를 생성함으로써 컨테이너의 고유한 공간을 생성한다는 것이 도커 컨테이너의 기본적인 개념입니다. 그러나 실제로 컨테이너 내부에서 읽기와 새로운 파일 쓰기, 기존의 파일 쓰기 작업이 일어날 때는 드라이버에 따라 Copy-on-Write(CoW) 또는 Redirect-on-Write(RoW) 개념(+스냅샷)을 사용합니다. (스토리지 드라이버에 대해서는 따로 알아보는 시간이 필요할 것 같습니다. 이번 글에서는 간단하게만 알아보겠습니다.) 공식 문서에도 St.. 2021. 7. 15.
[Docker] 11. 도커 데몬(Daemon) Contents 도커의 구조 도커 데몬 실행 도커 데몬 설정 도커 데몬 제어 : -H 도커 데몬 보안 적용 : --tlsverify 스토리지 드라이버 변경 : --storage-driver 컨테이너 저장 공간 설정 1. 도커의 구조 우리는 도커를 사용할 때 docker라는 명령어를 맨 앞에 붙여서 사용합니다. 그리고 실제 docker는 /usr/bin/docker에 위치하고 있습니다. 이는 'which docker' 를 입력하면 확인할 수 있습니다. 이처럼 도커 명령어는 /usr/bin/docker에 위치한 파일을 통해 사용되고 있습니다. 하지만 실제 도커 엔진의 프로세스를 확인해보면 /usr/bin/dockerd 파일로 실행되는 것을 알 수 있습니다. 컨테이너나 이미지를 다루는 명령어는 /usr/bin.. 2021. 7. 15.
[Docker] 10. Dockerfile Contents 이미지를 생성하는 방법 Dockerfile 작성 Dockerfile 빌드 이미지 생성 빌드 과정 Dockerfile로 빌드할 때 주의할 점 1. 이미지를 생성하는 방법 개발한 어플리케이션을 컨테이너화할 때, 기본적인 방법은 다음과 같습니다. 아무것도 존재하지 않는 이미지(ex, 우분투)로 컨테이너를 생성 어플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인 컨테이너를 이미지로 commit 이 방법을 사용하면 어플리케이션이 동작하는 환경을 구성하기 위해 일일이 수작업으로 패키지를 설치하고 소스코드를 Git에서 클론하거나 호스트에서 복사해야 합니다. 물론 직접 컨테이너에서 어플리케이션을 구동해보고 이미지로 커밋하기 때문에 이미지의 동작을 보장할 수 있다는 점은 있습.. 2021. 7. 15.
[Docker] 09. Private Registry Contents Private Registry 생성 Nginx 서버로 접근 권한 생성 Private Registry RESTful API Private Registry 옵션 설정 이전 글에 이어서 Private Registry에 대해서 알아보도록 하겠습니다. 1. Docker Private Registry 생성 Docker Private Registry를 사용하면 개인 서버에 이미지를 저장할 수 있는 저장소를 만들 수 있습니다. 이 레지스트리는 컨테이너로 구현되고, 이에 해당하는 도커 이미지가 존재합니다. 이 이미지는 도커에서 공식적으로 제공하고 있기 때문에 간단하게 사용할 수 있습니다. docker run -d --name myregistry \ -p 5000:5000 \ --restart=always.. 2021. 7. 15.
[Docker] 08. 도커 이미지 Contents 도커 이미지 생성 이미지 구조 이해 이미지 추출 이미지 배포(Docker Hub / Private Registry) 데비안 운영체제에서 apt install을 실행하면 apt 레포지토리에서 패키지를 내려받는 것처럼 도커는 기본적으로 도커 허브(Docker Hub)는 중앙 이미지 저장소에서 이미지를 내려받습니다. 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있어서 쉽게 다른 사람들과 이미지를 공유할 수있습니다. docker create, docker run, docker pull 명령어로 이미지를 내려받을 때, 도커는 도커허브에서 해당 이미지를 검색한 뒤에 내려 받습니다. 단,누구나 이미지를 올릴 수 있기 .. 2021. 7. 14.
[Docker] 07. 컨테이너 리소스 할당 제한 Contents 컨테이너 메모리 제한 컨테이너 CPU 제한 Block I/O 제한 컨테이너를 생성하는 run, create 커맨드에서 컨테이너의 리소스 할당량을 조정하도록 옵션을 설정할 수 있습니다. 아무런 옵션을 입력하지 않는다면, 컨테이너는 호스트의 리소스를 제한없이 사용할 수 있습니다. 제품 단계의 컨테이너를 고려한다면 컨테이너의 리소스 할당을 제한해 호스트와 다른 컨테이너의 동작을 방해하지 않도록 하는 것이 좋습니다. 그렇지 않다면 호스트의 리소스를 전부 점유해 다른 컨테이너들뿐 아니라 호스트 자체의 동작이 멈출 수 있습니다. 현재 컨테이너에 설정된 리소스 제한을 확인하는 가장 쉬운 방법은 docker inspect 명령어를 입력하는 것입니다. ("HostConfig" 에서 찾아볼 수 있습니다.).. 2021. 7. 14.
[Docker] 06. 컨테이너 로깅(logging) Contents json-file 로그 syslog 로그 fluentd 로그 아마존 클라우드워치 로그 컨테이너 내부에서 어떤 일이 발생하는지 확인하는 것은 디버깅 및 운영 측면에서 중요합니다. 어플리케이션 레벨에서 로그가 기록되도록 개발하여 별도의 로깅 서비스를 사용할 수도 있지만, 도커는 컨테이너의 표준 출력과 에러 로그를 별도로 메타데이터로 저장하고 이를 확인하는 명령어를 제공합니다. 1. json-file 로그 기본적으로 컨테이너 로그는 JSON 형태로 도커 내부에 저장됩니다. mysql 컨테이너를 생성하여 간단한 로그를 남겨보도록 하겠습니다. # mysql 5.7 컨테이너 생성 docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=1234 \ mysql:5... 2021. 7. 13.
[Docker] 05. 도커 네트워크 Contents 도커 네트워크 구조 도커 네트워크 기능 브리지(bride) 네트워크 호스트(host) 네트워크 논(none) 네트워크 컨테이너(container) 네트워크 브리지 네트워크와 --net-alias MacVLAN 네트워크 1. 도커 네트워크의 구조 간단하게 ubuntu:20.04 컨테이너를 생성한 뒤에, ifconfig를 입력해서 컨테이너의 네트워크 인터페이스를 확인해봅시다. 기본으로 제공되는 ubuntu 20.04 이미지에서는 ifconfig 명령어를 사용할 수 없으며, apt package 업데이트와 net-tools를 설치해주어야 ifconfig 명령어를 사용할 수 있습니다. 제가 미리 ubuntu 20.04에 net-tools를 설치한 이미지를 올려두었으니, 그것을 사용하셔도 됩니다... 2021. 7. 13.
[Docker] 04. 도커 볼륨 Contents 호스트 볼륨 공유 볼륨 컨테이너 도커 볼륨 볼륨 삭제 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용으로 읽으며, 컨테이너의 변경 사항만을 별도로 저장하여 각 컨테이너의 정보를 보존합니다. 이미 생성된 이미지는 어떠한 경우에도 변경되지 않으며, 컨테이너 레이어에 원래 이미지에서 변경된 파일시스템 등을 저장합니다. 예를 들어(mysql + wordpress), 이미지에 mysql을 실행하는데 필요한 어플리케이션 파일이 들어있다면, 컨테이너 레이어에는 워드프레스에서 쓴 로그인 정보나 게시글 등과 같은 데이터베이스를 운영하면서 쌓이는 데이터가 저장됩니다. 여기에는 치명적인 단점이 존재하는데, mqsql 컨테이너를 삭제하면 컨테이너 레이어에 저장되어 있던 데이터베이스의 정보도 삭제된다는 것.. 2021. 7. 12.