*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
 

cs



*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번 라인에 볼륨을 만드는 부분은 런타임에서만 생성되고 사라지는 문제점이 있다


+ Recent posts