[구름 k8s] TIL 2-4-3

Peppie·2022년 9월 28일
0

1. Docker 환경 구성

Docker Engine 설치

Docker Desktop
Docker Engine

Docker Engine

Docker Image와 Container 관리
client와 통신
CLI 방식을 이용하여 Docker 운영

Docker Desktop

GUI 방식으로 Docker 운영
Linux Kernel이 동작하지 않는 환경에서 Docker 운영가능한 환경 제공

Docker Engine 종류

  • Docker Community : 무료
  • Docker Enterprise : 유료

Docker Engine 설치 : Ubuntu

Docker Engine은 최신 버전(latest)을 설치하는 것보다는 버전을 지정하여 설치하는 것이 일반적
-> 최신 버전을 설치하면 latest 시점에 따른 변경사항 및 동일 코드라도 실행시 오류 발생 가능

운영 환경에서 Docker Engine 설치시에는 최신버전 (latest)보다는 안정적인 지정된 버전 설치 권장

과거 버전의 Docker Engine 삭제

sudo apt-get remove docker docker-engine docker.io containerd runc

Docker Engine 설치를 위한 Ubuntu Package 설치

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Docker 공식 GPG Key 설치 (공개키)

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Ubuntu apt 명령 수행을 위한 Docker repository 설정

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt repository update 수행

sudo apt-get update

Docker 버전 정보 확인

apt-cache madison docker-ce

출력된 버전 정보 中 1의 버전 번호를 shell 변수에 등록

VERSION=<docker ce 버전 정보>

지정된 Docker 버전의 Docker Engine 설치

sudo apt-get install docker-ce=$VERSION docker-ce-cli=$VERSION containerd.io docker-compose-plugin

Docker Engine 설치 확인

docker version

★ docker 명령은 관리자 권한으로 수행해야 함 ★

원칙적으로 docker 명령 사용

  • 관리자로 사용자 전환 후 사용
  • sudo 명령을 통한 관리자 권한으로 실행

현재 사용자를 docker 그룹에 소속시켜 사용

sudo usermod -aG docker <사용자 ID>
  • 명령 수행 후 Linux rebooting 해야 적용

Amazon EC2에 Docker 설치 : Amazon Linux

sudo yum update

sudo amazon-linux-extras install docker

sudo systemctl start docker

sudo systemctl enable docker

Docker 구성 요소

  • docker engine
    docker를 이용한 어플리케이션 실행 환경 및 관리
  • docker hub
    docker image를 공유하는 공식 public docker registry
  • docker compose
    의존성있는 독립된 container에 대한 구성정보를 YAML 형식으로 작성하여 일원화된 어플리케이션 관리 도구
  • docker swarm
    여러 docker host를 클러스터로 구축하여 관리 가능한 docker orchestration 도구
  • docker registry
    docker image 저장소, public/private registry로 구분
  • docker kinematic
    container를 이용한 작업을 수행할 수 있는 GUI 도구
  • docker machine
    VM 및 cloud VM과 같은 가상 컴퓨터 환경에 도커 환경을 구성하는 시스템

Docker host/client 주요 기능

LXC (LinuX Container)를 이용한 container 구동

dockerd

docker daemon

containerd

container daemon

runc

OCI (Open Container Initiative) run-time

통합 buildkit

docker image 생성 기능

docker CLI

docker 명령을 실행하는 client 도구

Docker 기반 container 배포 과정

  1. 어플리케이션 코드 작성
    1.1 제공하려는 서비스
    1.2 어플리케이션 개발 환경 필요 : 에디터 프로그램, compiler/interpreter, debugger

  2. 베이스 이미지를 이용한 Dockerfile 작성

  • Dockerfile은 docker image 생성을 위한 설계도 역할을 하는 텍스트 파일
  • 어플리케이션 코드, 필요한 라이브러리, 실행 환경
  1. Dockerfile build를 통해 docker image 생성
    3.1 생성된 docker image를 이용한 container 실행
    3.2 docker compose를 이용한 다중 container 실행

  2. docker container 서비스 테스트
    1~4 과정은 하나의 docker image 생성 과정

  3. public/private registry에 docker image 배포

  4. Git과 같은 버전 관리 도구를 이용하여 Dockerfile 관리

  5. 지속적인 어플리케이션 관리
    1~6 과정 반복

2. Docker Image 명령어

docker 명령 구조

docker <명령> [옵션] 대상 [인자]

docker 명령은 '무엇을' '어떻게' '대상은' 형식으로 사용

명령

image, container, volume, network

상위 명령 (무엇)

manage command : image, container, volume, network
경우에 따라 생략하고 사용

하위 명령 (어떻게 동작)

command : 상위 명령에 대한 동작

옵션

명령에 대한 옵션

대상

명령이 적용되는 대상

인자

대상에 대한 인수

docker 일반 명령

docker

docker client 명령
docker 명령 사용법 출력

docker version 확인 방법

  • docker -v
  • docker version
    • --format "{{.Server.Version}}" : Server Version만 출력
    • --format "{{json .}}" : json 형식으로 출력

docker system info

docker 구성 정보 확인

  • docker system 명령으로도 동일 결과 출력
  • Docker Root Dir : /var/lib/dockerL

docker system df 또는 docker system df -v

docker 디스크 사용량 확인

  • -v : 세부 정보

docker image 관련 명령

  • docker image는 layer 구조로 구성 (overlayFS)
  • docker image를 download하면 각각의 layer가 다운로드 됨
    만약 동일 layer의 내용이 현재 system에 존재한다면 별도 다운로드 수행 X

docker image를 현재 시스템에 보유하는 방법

  • Dockerfile을 build하여 직접 image 생성 -> 직접 생성
  • docker registry로부터 image download -> 기존의 것 이용

docker image 이름 형식

[<저장소(repository) 이름>/]<image 이름>:<버전 번호>

  • 저장소 이름은 생략 가능
  • 버전 번호를 생략하면 latest 버전 사용

docker search <image 이름>

docker hub에서 image 검색
ex) docker search (linux / httpd / apache 등등...)

docker pull [레지스트리 위치] <image 이름>

ex) docker pull httpd

  • docker hub로부터 image 다운로드
  • docker image는 layer 단위로 다운로드

docker image ls 또는 docker images

현재 system에 존재하는 image 목록 확인

docker image inspect <image 이름>

image 세부 정보

docker image history <image 이름>

image 구성 layer와 실행 정보 확인

  • image 생성을 위한 Dockerfile에 사용한 명령 확인 가능

docker image rm <image 이름> 또는 docker rmi <image 이름>

docker image 삭제

  • 삭제할 image의 정확한 이름 표기
  • 현재 container로 동작 중인 image는 삭제 불가능
  • -f : 실행 중인 container 강제 종료 및 image 삭제

3. Docker Container 명령어

  • container는 격리된 (가상)환경에서 동작하는 Linux 프로세스
  • container 프로세스는 Linux 프로세스로서 관리됨 but 완전 격리된 프로세스로 동작,
    현재 시스템의 kernel 기능 공유
  • container는 격리된 프로세스 -> PID는 1번 PID

container 생성 과정 (생명 주기)

docker image pull (다운로드) / docker image 생성 (build)
-> docker container 생성 (create) : 격리된 프로세스 생성
-> docker container 실행 (start) : application 실행
-> docker container 중지 (stop) -> 재시작 (restart)
-> docker container 삭제 (remove) : application 종료

0개의 댓글