*Docker Monitoring
docker stats {ContainerID}
docker top {ContainerID}
= 누가 어떤 프로세스로 무슨 작업을 하고 있는지
*cAdvisor 설치(화면 모니터링)
1 2 3 4 5 6 7 8 9 10 11 12 | docker run \ --detach=true \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --privileged=true \ --name=cadvisor \ google/cadvisor:latest |
*Docker 컨테이너 스토리지
- Docker는 Paper Use(PPU) 쓰고 버리고 초단위
- Lifecycle이 VM보다도 더 짧다...
=>비즈니스 관점에서는 순익은 높이고 비용은 최소화해야 한다.
=>Container가 실행하는 Data는 기본적으로 Layer File System....
Container가 실행되면서 Layer 생성을 위한 임시 공간이 할당된다.
=>config 값들과 같은 연속성을 유지해야 하는 값들(+html, db data)
등은 별도 볼륨으로 분리해야 한다!
왜 분리하는가?
1) 성능!! 고성능의 IOPS로 높은 성능을 보장한다
2) 컨테이너가 여러 컨테이너끼리 동일한 Data를 공유
*볼륨 스토리지의 특징(중요) :
- 단순 스토리지 개념이 아님!!
- HOST에서 변경점이 있으면 Container에서도 그대로 반영된다,
=>이름은 똑같이 볼륨이지만 Kubernetes에서 사용하는 볼륨과 Docker에서 사용하는 볼륨의 개념이 다르다.
방식1) 제일하면 안되는 방식(폴더간 매핑... 폴더를 폴더와 매핑)
> docker run -v 호스트경로:컨테이너경로
> docker run -v 컨테이너경로
=>주의 : 컨테이너가 특정 호스트에 있는 특정 폴더에 접근하려는 목적이 강하기 때문에 보안에 취약
방식2) 추천 방석(docker volume : File to File 매핑)
호스트 경로는 안준다.(자동으로 /var/lib/dockers/volume 밑에 생긴다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | [root@host01-2 docker]# docker volume ls DRIVER VOLUME NAME local 725d0db9e073e1d9a6d19637cad363b7ee9f32f91d4ce8998feff15f8ae4bd5d [root@host01-2 docker]# docker volume rm 725d0db9e073e1d9a6d19637cad363b7ee9f32f91d4ce8998feff15f8ae4bd5d 725d0db9e073e1d9a6d19637cad363b7ee9f32f91d4ce8998feff15f8ae4bd5d [root@host01-2 docker]# ls builder containerd containers image network overlay2 plugins runtimes swarm tmp trust volumes [root@host01-2 docker]# docker volume ls DRIVER VOLUME NAME local 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea [root@host01-2 docker]# ls /var/lib/docker/volumes/ -l total 24 drwxr-xr-x. 3 root root 19 May 24 10:17 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea -rw-------. 1 root root 32768 May 24 10:17 metadata.db [root@host01-2 docker]# ^C [root@host01-2 docker]# cd 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea -bash: cd: 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea: No such file or directory [root@host01-2 docker]# cd /var/lib/docker/volumes/ [root@host01-2 volumes]# cd 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea [root@host01-2 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea]# ls _data [root@host01-2 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea]# cd _data [root@host01-2 _data]# ls [root@host01-2 _data]# docker run -it -v /data --name c2 reg.cloud.com/busybox docker: Error response from daemon: Conflict. The container name "/c2" is already in use by container "711ed6a35974f20a4ba91846567fbb04446b6022fcf159f02c8d36614fbcfb23". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. [root@host01-2 _data]# docker run -it -v /data --name c2 reg.cloud.com/busybox^C [root@host01-2 _data]# docker -ls Unable to parse logging level: s [root@host01-2 _data]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 711ed6a35974 reg.cloud.com/busybox "sh" 2 minutes ago Up 2 minutes c2 d873910cde91 google/cadvisor:latest "/usr/bin/cadvisor -…" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp cadvisor [root@host01-2 _data]# docker exec 711ed6a35974 "docker exec" requires at least 2 arguments. See 'docker exec --help'. Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] [flags] Run a command in a running container [root@host01-2 _data]# docker attach 711ed6a35974 / # mkdir temphahaha / # ls bin data dev etc home proc root sys temphahaha tmp usr var / # read escape sequence [root@host01-2 _data]# [root@host01-2 _data]# docker attach 711ed6a35974 / # ls bin data dev etc home proc root sys temphahaha tmp usr var / # cd data/ /data # ls /data # mkdir hahaha /data # ls hahaha /data # read escape sequence [root@host01-2 _data]# ls hahaha [root@host01-2 _data]# | cs |
hahaha라는 폴더가 host와 container에 똑같이 생긴다.
아래와 같이(docker volume create <볼륨명>) 방법으로 매핑할 수도 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | [root@host01-2 _data]# docker volume --help Usage: docker volume COMMAND Manage volumes Commands: create Create a volume inspect Display detailed information on one or more volumes ls List volumes prune Remove all unused local volumes rm Remove one or more volumes Run 'docker volume COMMAND --help' for more information on a command. [root@host01-2 _data]# docker volume create data data [root@host01-2 _data]# docker volume ls DRIVER VOLUME NAME local 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea local data [root@host01-2 _data]# ls hahaha [root@host01-2 _data]# cd /var/lib/docker/volumes/ [root@host01-2 volumes]# ls 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea data metadata.db [root@host01-2 volumes]# cd data/ [root@host01-2 data]# ls _data [root@host01-2 data]# cd .. [root@host01-2 volumes]# ls 89b2631760a0c93c23ef15fabb4e8aa041a24cabb74f9d321af8bc259fade2ea data metadata.db [root@host01-2 volumes]# ^C [root@host01-2 volumes]# docker run -it -v data:/data --name c3 reg.cloud.com/busybox / # ls bin data dev etc home proc root sys tmp usr var / # cd data/ /data # ls /data # cd .. / # ls bin data dev etc home proc root sys tmp usr var / # ^C / # | cs |
>>컨테이너를 지우더라도 볼륨을 없어지지 않는다!!
컨테이너와 볼륨을 한꺼번에 지우기:
1 2 | [root@host01-2 volumes]# docker rm -f -v | cs |
볼륨으로 컨테이너를 띄우는 동시에 백그라운드로 빠지기
1 2 3 | [root@host01-2 test]# docker run -itd -v /test:/data --name c1 reg.cloud.com/busybox 2e890f6a2d2c513ebfc9918440fd7df7768bb075ffbd43f7b727273e29f6e483 | cs |
2개의 컨테이너가 같은 볼륨을 바라보도록 하려면(여기서는 /data와 /log), C1과 C2 볼륨을 컨테이너에 마운트한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | [root@host01-2 test]# docker run -itd -v /test:/data --name c1 reg.cloud.com/busybox 2e890f6a2d2c513ebfc9918440fd7df7768bb075ffbd43f7b727273e29f6e483 [root@host01-2 test]# ^C [root@host01-2 test]# ls test.txt [root@host01-2 test]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2e890f6a2d2c reg.cloud.com/busybox "sh" 36 seconds ago Up 35 seconds c1 [root@host01-2 test]# docker run -itd -v /test:/log --name c2 reg.cloud.com/ubuntu 5a88cf37f5aa94bd3ee1f1a8df41e9bcf4dd4566f5435b0247c599bb73edcc2d [root@host01-2 test]# docker attach c1 / # ls bin data dev etc home proc root sys tmp usr var / # touch /data/c1.txt / # ls bin data dev etc home proc root sys tmp usr var / # cd /data/ /data # ls c1.txt test.txt /data # read escape sequence [root@host01-2 test]# docker attach c2 root@5a88cf37f5aa:/# root@5a88cf37f5aa:/# ls /log/ -l total 0 -rw-r--r--. 1 root root 0 May 24 01:39 c1.txt -rw-r--r--. 1 root root 0 May 21 07:21 test.txt root@5a88cf37f5aa:/# vi c1.txt bash: vi: command not found root@5a88cf37f5aa:/# :wq bash: :wq: command not found root@5a88cf37f5aa:/# ls bin boot dev etc home lib lib64 log media mnt opt proc root run sbin srv sys tmp usr var root@5a88cf37f5aa:/# cd /log/ root@5a88cf37f5aa:/log# ls c1.txt test.txt | cs |
3) 디바이스 매핑 (Device to Device 매핑)
볼륨 마운팅
dockerfile을 아래와 같이 입력했다고 가정했을 때 문법상 문제는없다
FROM ubuntu:14.04
VOLUME /MountVol
RUN data > /MountVol/date.txt
RUN cat > /MountVol/date.txt
하지만 2번 라인에 볼륨을 만드는 부분은 런타임에서만 생성되고 사라지는 문제점이 있다
'Docker(도커) Kubernetes' 카테고리의 다른 글
Docker cp 명령어, Docker Compose (0) | 2018.05.24 |
---|---|
docker network 네트워크 연결 및 구성 (0) | 2018.05.24 |
Docker Container 메모리 / CPU 제어 (0) | 2018.05.23 |
docker image tag 관리, dockerfile 생성하기, 인스트럭션 사용법 (0) | 2018.05.23 |
Docker Container와 Host간 web server storage를 공유하도록 만들기 (0) | 2018.05.23 |