[kubernetes] docker & container

Kubernetes Advanced Networking Study(KANS)의 1주차 스터디 내용에 대해 정리한 내용입니다.

  1. 목표
    Kubernetes를 이해하기 위해 기본적인 container에 대해 정리한다.

  2. container
    간단하게 container는 프로세스를 실행하기 위한 docker의 가상 환경을 의미한다.

  3. docker container와 virtual machine의 차이점

    docker container는 host os의 docker(가상 환경)에서 app의 프로세스가 실행되는 것을 의미한다.
    virtual machine은 hypervisor 위에서 각 app의 프로세스를 실행하기 위한 guest os를 구성하는 것을 의미한다.
    위와 같은 환경 차이로 인해 docker container는 guest os의 중복을 회피할 수 있어서 불필요한 리소스의 사용량을 낮출 수 있지만 하나의 host os에서 app이 실행되는 환경이기 때문에 그만큼 격리 수준이 낮은 불안 요소가 있다.

  4. docker 설치 & 실행

1) docker 설치

# 도커 설치
curl -fsSL https://get.docker.com | sh

# 도커 정보 확인
docker info
docker version

# 도커 서비스 상태 확인
systemctl status docker
'q' 입력으로 빠져나오기

# 모든 서비스의 상태 표시 - 링크
systemctl list-units --type=service

# 도커 루트 디렉터리 확인
tree -L 3 /var/lib/docker

2) nginx container 실행

# nginx 이미지를 컨테이너 백그라운드로 실행
# -d 는 Detached 모드로 컨테이너를 실행. 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행하도록 설정.
# Detached 모드인 컨테이너는 반드시 컨테이너에서 프로그램이 실행돼야 하며 프로그램이 실행되지 않으면 컨테이너는 종료됩니다.
docker run -d nginx
docker ps

# 실행중인 컨테이너의 ID만 확인
docker ps -q

# 컨테이너 상세 정보 확인
# docker inspect '<NAME> 혹은 <ID>'
docker inspect $(docker ps -q)

# 컨테이너(=Instance)의 IP 정보 확인(JSON) - 링크
# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
ping 172.17.0.2

# 호스트 네트워크 인터페이스 정보 확인
ip -c a
brctl show

# curl 로 http 접속 테스트 - 링크 링크2
curl `docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)` | grep -o '<title>.*</title>'
curl -s 172.17.0.2 | grep -o '<title>.*</title>'
  1. container 상세 정보 확인
docker inspect <CONTAINER_ID>
  • 네트워크, 볼륨 등 컨테이너에 대한 모든 정보를 출력
docker inspect $(docker ps -q)
docker inspect $(docker ps -q) | more

# 컨테이너(=Instance)의 IP 정보 확인(JSON) - [링크](https://docs.docker.com/engine/reference/commandline/inspect/)
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q) 
  1. container 명령 전달
  • 실행된 컨테이너에 새로운 패키지를 설치하거나 수정이 필요한 경우에는 exec 명령을 이용하여 컨테이너에 명령을 전달할 수 있다.
docker exec <CONTAINER_ID> <CMD>
  • nginx 컨테이너의 index.html 내용을 변경하는 명령을 실행할 수 있다.
# nginx 컨테이너의 index.html 파일의 위치는 /usr/share/nginx/html/index.html 입니다
docker exec $(docker ps -q) ls /usr/share/nginx/html
docker exec $(docker ps -q) cat /usr/share/nginx/html/index.html
  1. container 삭제
# 실행 및 종료된 컨테이너까지 전부삭제
docker rm -f $(docker ps -a -q)
  1. 정리
    container는 하나의 host os에서 실행되기 때문에 컨테이너 관련 모든 정보는 host에서 확인 및 관여(삭제, 변경)가 가능하다.

좋은 웹페이지 즐겨찾기