[kubernetes] docker & container
Kubernetes Advanced Networking Study(KANS)의 1주차 스터디 내용에 대해 정리한 내용입니다.
-
목표
Kubernetes를 이해하기 위해 기본적인 container에 대해 정리한다. -
container
간단하게 container는 프로세스를 실행하기 위한 docker의 가상 환경을 의미한다. -
docker container와 virtual machine의 차이점
docker container는 host os의 docker(가상 환경)에서 app의 프로세스가 실행되는 것을 의미한다.
virtual machine은 hypervisor 위에서 각 app의 프로세스를 실행하기 위한 guest os를 구성하는 것을 의미한다.
위와 같은 환경 차이로 인해 docker container는 guest os의 중복을 회피할 수 있어서 불필요한 리소스의 사용량을 낮출 수 있지만 하나의 host os에서 app이 실행되는 환경이기 때문에 그만큼 격리 수준이 낮은 불안 요소가 있다. -
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>'
- 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)
- 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
- container 삭제
# 실행 및 종료된 컨테이너까지 전부삭제
docker rm -f $(docker ps -a -q)
- 정리
container는 하나의 host os에서 실행되기 때문에 컨테이너 관련 모든 정보는 host에서 확인 및 관여(삭제, 변경)가 가능하다.
Author And Source
이 문제에 관하여([kubernetes] docker & container), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@whereisdw/kubernetes-docker-container저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)