본문 바로가기
Docker

Docker - 컨테이너 정리

by Lalabla 2022. 6. 13.
반응형

컨테이너?

 

컨테이너는 하나의 Application 프로세스

각 컨테이너는 완전하게 분리된 공간에서 각각 따로 동작

 

컨테이너 안에 base image를 설치하고 (node js, mysql 등), source code를 포함하여 실행

base image, source image, 실행 명령어는 uuid로 구분 

 

컨테이너 이미지는 파일로 저장되어있으며, 해당파일을 실행하면 컨테이너(실행중인 프로세스)

 

컨테이너 동작방식

hub.docker.com 에 수많은 컨테이너 이미지가 저장되어 있음

 

docker search nginx <- nginx를 허브에서 찾아봐주세요. 

docker pull nginx:latest <- nginx 최신버전을 가져와주세요. 

docker run -d  --name web -p 80:80 nginx:latest <-  이름이 name 인 컨테이너에서 nginx를 80번 포트에서 실행해주세요. 

 

컨테이너 생성

개발할 프로그램과 실행환경을 모두 컨테이너로 생성할 수 있음

MSA(Micro Service Architecture) 전체 시스템을 모듈화 시켜 운용

 

Dockerfile을 이용해 컨테이너 빌드

 

Dockerfile이란?고유의 지시어(Instruction; FROM, COPY CMD etc.)을 가지고 해당 파일을 사용해  컨테이너 빌드를 도와주기 위한 명령어의 집합

기본 명령어 모음

 

컨테이너 배포

Docker HOST 

이름이 ~~ Dockerfile을 만들고

 

docker bulild -t ~~:latest . 

docker login

docker push ~~:latest

 

컨테이너 이미지

 

도커 이미지 탐색                docker search [옵션] <이미지이름:태그명>

이미지 다운로드                 docker pull [옵션] <이미지이름:태그명>

다운받은 이미지 목록 출력  docker images

다운받은 이미지 상세보기   docker inspect [옵션] <이미지이름:태그명>

이미지 삭제                        docker irmi [옵션] <이미지이름:태그명>

 

컨테이너 실행

컨테이너 생성                       docker create [옵션] <컨테이너 이름> <이미지이름:태그명> 

컨테이너 실행                       docker start [옵션] <컨테이너 이름>

컨테이너 생성/실행               docker run [옵션] <이미지이름:태그명>

실행중인 컨테이너 목록 확인 docker ps [옵션]

컨테이너 상세보기                docker inspect <컨테이너 이름>

   ex: docker inspect --format '{{.NetworkSettings.IPAddress}}' webserver

동작중인 컨테이너 중지        docker stop [옵션] <컨테이너 이름>

컨테이너 삭제                       docker rm [옵션] <컨테이너 이름>

 

Tip: alias cip="<명령어>" 로 단축키 등록 가능

ex: alias cip="docker inspect --format '{{.NetworkSettings.IPAddress}}'" 등록 후 

       cip webserver 사용 

실행중인 컨테이너 관리

실행중인 컨테이너 목록 확인                         docker ps [옵션]

포그라운드로 실행중인 컨테이너에 연결        docker attach [옵션] <컨테이너 이름>

동작중인 컨테이너에 NEW 명령어 추가 실행 docker exec [옵션] <컨테이너 이름>

ex: docker -it webserver /bin/bash (i: interactive, t: terminal 터미널실행)

컨테이너에서 동작되는 프로세스 확인            docker top [옵션] <컨테이너 이름>

동작중인 컨테이너가 생성한 로그 보기           docker logs [옵션] <컨테이너 이름>  (-f 실시간)

 

컨테이너 리소스 제한

컨테이너가 필요로 하는 만큼의 리소스만 할당해야 한다.

CPU, Memory, Disk I/O 제한 가능

 

메모리 리소스 제한

컨테이너가 사용할 최대 메모리 양 지정 --memory or -m

ex: docker run -d -m 512 nginx:1.14

 

컨테이너가 사용할 스왑 메모리 영역에 대한 설정(생략 시 메모리의 2배) --memory-swap

ex: docker run  -d -m 200m --memory-swap 300m nginx:1.14

 

--memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정 --memory-reservation

ex: docker run -d -m 1g --memory-reservation 500m nginx:1.14

 

OOM Killer가 프로세스 kill 하지 못하도록 보호 --oom-kill-disable

ex: docker run -d -m 200m --oom-kill-disable nginx:1.14

 

CPU 리소스 제한

컨테이너가 할당할 CPU core수를 지정 --cpus

ex: docker run -d --cpus=".5" ubuntu:latest

 

컨테이너가 사용할 수 있는 CPU나 코어를 할당. cpu index는 0부터 --cpuset-cpus

ex:  docker run -d --cpuset-cpus 0-3 ubuntu:latest

 

컨테이너가 사용하는 CPU 비중을 1024값을 기반으로 설정(다른컨테이너에 비해 상대적인 값. A 컨테이너가 1024, B 컨테이너가 2048이면 B 컨테이너는 A 컨테이너의 2배의 CPU 사용을 함) --cpu-share

ex: docker run -d --cpu-share 2048 ubuntu:latest

 

Block I/O 제한

Block IO의 Qunta를 설정할 수 있으며 100 ~ 1000 까지 선택(default:500), 컨테이너 가중치 기반

--blkio-weight, --blkio-weight-device

 

ex: docker run -it --rm --blkio-weight 100 ubuntu:latest /bin/bash

 

특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한을 kb, mb, gb 단위로 설정

--device-read-bps, --device-wright-bps

 

ex: docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash

ex: docker run -it --rm --device-write-bps /dev/vda:10mb ubuntu:latest /bin/bash

 

컨테이너의 read/write 속도의 쿼터를 설정. 초당 quota를 제한해서 I/O를 발생시킴. 0 이상의 정수로 표기

초당 데이터 전송량 = IOPS * 블럭크기(단위 데이터 용량)

--device-read-iops, --device-write-iops

 

ex: docker run -it --rm --device-write-iops /dev/vda:10 ubuntu:latest /bin/bash

ex: docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash

 

리소스 모니터링 (docker monigoring commands)

실행중인 컨테이너의 런타임 통계 확인 docker stat [options] [container..]

 

도커 호스트의 실시간 event 정보를 수집해서 출력

docker event -f container = <MAME>

docker image -f container  = <MAME>

 

구글에서만든 모니터링 툴 cAdvisor 

 

stress container 생성

컨테이너 빌드 : 부하 테스트 프로그램 stress를 설치 하고 동작시키는 컨테이너 빌드

CPU 부하 테스트: 2개 cpu core 를 100% 사용하도록 부하 발생: stress --cpu-2

메모리 부하 테스트 : 프로세스 수 2개와 사용할 메모리 만큼 부하 발생 : stress --vm 2 vm-bytes <사용할 크기>

 

 

컨테이너 Storage

volume 옵션 사용

-v <host path>:<container mount path>

-v <host path>:<vontainer mount path>:<read write mode>

-v <container mount path>

 

docker run -d -v /dbdata:/var/lib/mysql

docker run -d -v /webdata:/var/www/html:ro

 

ex:

docker run -d --name db -v /Users/dj/Desktop/Docker/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --platform linux/amd64  mysql:latest

Port-Forwording

-p hostPort:containerPort

 

 

용어정리

Docker Host: 도커 데몬이 동작되고 있는 시스템

Docker Daemon : systemctl start docker(도커 실행)

Docker Client Command : docker search...  (밑줄친 도커를 의미)

Docker Hub : 직접 만들거나, hub.docker.com 운용

Container Images : 실행할 프로그램이 파일에 저장

Container : Container Images를 실행하여 실행중일 때 

 

 

 

 

 

반응형

'Docker' 카테고리의 다른 글

Docker - linux 자동완성 추가  (1) 2022.06.15
Docker - Jenkins 설치 및 private gitlab 연동(ssh)  (0) 2019.12.09
Docker - 도커 명령어 정리  (0) 2019.12.09

댓글