Docker 2. Container 관리

skh951225·2023년 3월 14일
0

Docker

목록 보기
2/3

출처 : 따배도 6~7 (Youtube)

Container 관리

Container life cycle

  1. container 이미지관리
    docker search : docker image를 검색할 수 있다.
    docker pull : image 다운로드
    docker images : image 목록 학인
    - --no-trunc : image id fullname으로 출력
    docker inpect [옵션] 도커오브젝트 : 정보확인
    - --format '{{???}}' : 특정 정보만 보고싶을 때.
    ex)--format '{{NetworkSettings.IPAddress}}'
    docker rmi : docker image 삭제
  2. container 실행/종료
    docker create : image를 container로 만들기(running중인 상태 아님)
    docker start/stop : container를 시작/종료
    docker ps : container 상태 확인
    docker rm : container 삭제
    docker run : pull→create→start, container image가 있는지 확인하고 없으면 pull하는 명령이 포함됨
  3. 실행중인 container 관리하기
    docker top 컨테이너 : 컨테이너에서 동작중인 프로세스를 보여줌
    docker logs 컨테이너 : 컨테이너의 로그를 보여줘(-f : foreground)
    docker exec 컨테이너 명령어 : 컨테이너에 명령어를 실행시켜줘(-it : 컨테이너로 들어갈 수 있음)
    docker attach : foreground로 실행중인 container에 연결

Container 리소스 관리

  1. memory 리소스 제한
  2. cpu 리소스 제한
  3. block I/O 제한
  4. container 사용 리소스를 실시간으로 확인
    docker stats : 실행중인 컨테이너의 런타임 통계를 확인
    docker events : 도커 호스트의 실시간 event 정보를 수집해서 출력
    cAdvisor : 도커 모니터링 툴 (github)

Stress를 활용한 자원할당 실습

참고 : stress 사용법

# dockerfile
FROM debian
RUN apt-get update \
&& apt-get install stress -y
CMD ["/bin/sh","-c","stress -c 2"]
# dockerfile을 통해 image 생성
$ docker build -t stress .

# 최대 memory : 100m / 실제 사용 memory : 90m, 5초 후 종료 -> 성공
$ docker run --rm -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 90m -t 5s

# 최대 memory : 100m / 실제 사용 memory : 90m, 5초 후 종료 -> 실패
$ docker run --rm -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 150m -t 5s

# oomkilldisable 설정하기(Ubuntu에서 안되서 Centos에서 해보니 됨)
$ docker run -d --oom-kill-disable=true -m 100m --name m1 nginx

# oomkilldisable 확인하기
$ docker inspect m1
$ cat /sys/fs/cgroup/memory/docker/컨테이너ID/memory.oom_control

# cpu 리소스 제한
$ docker run -d --cpuset-cpus 0 --name c1 stress stress --cpu 1
$ docker run -d --cpuset-cpus 1 --name c2 stress stress --cpu 1
$ docker run -d -c 2048 --name cload 1 stress

# block I/O 제한
$ lsblk # device이름 확인
$ docker run -it --rm --device-write-iops /dev/sda:10 ubuntu:latest /bin/bash 
$ dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct
$ docker run -it --rm --device-write-iops /dev/sda:100 ubuntu:latest /bin/bash 
$ dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct
# cadvisor 설치해서 container들의 resource 사용현황을 볼 수 있다. kubernetes의 kubelet에는 cadvisor가 들어가 있다.
VERSION=v0.36.0 # use the latest release version from https://github.com/google/cadvisor/releases
sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor:$VERSION
# 실습 mysql container를 physical memory : 500M, swap memory : 600M, cpu core : 1 로 생성 
$ docker run -d --cpus 1 -m 500M --memory-swap 600M -e MYSQL_ROOT_PASSWORD=pass --name db mysql

0개의 댓글