어쩌다 IT
article thumbnail
반응형

리뷰 (Review)

더보기
chroot (Change root)
  • / (root) 디렉토리의 위치를 변경
  • chroot <변경할 root 디렉토리 경로> <명령 shell 지정>
  • ldd <실행 파일 이름>
    • 실행 파일이 사용하는 공유 라이브러리 목록 출력

 

cgroup (Control group)

  • 프로세스들이 사용하는 시스템 자원의 사용 정보를 수집 및 제한시키는 Linux Kernel 기능
  • 제한 가능한 자원 - CPU, Memory, Network, Device, Block I/O
  • cgroup 기본 디렉토리 - /sys/fs/cgroup

 

namespace

  • 프로세스 별로 별도의 Kernel Resource를 분할하여 격리시키는 Linux Kernel 기능
  • Container를 만든다는 것은 namespace를 통해 격리된 환경을 만든다는 것
  • namespace 종류
    • PID namespace
    • Network namespace
    • User namespace
    • Mount namespace
    • IPC namespace
    • UTS namespace
  • unshare [옵션] [프로그램 [argument]]

 

union file system

  • 기존 Linux에서 사용하는 일반적인 파일 시스템은 mount를 하면 mount된 내용만 확인할 수 있다.
  • union file system은 하나의 디렉토리에 여러 디렉토리를 마운트하면 통합된 디렉토리처럼 보이게 하는 파일 시스템
  • OverlayFS
    • 하나의 파일 시스템을 다른 파일 시스템 상단에 Overlay, Docker에서 사용하는 파일 시스템
    • lowerdir (Image layer) - Read-only 영역
    • upperdir (Container layer) - Read-Write 영역

 

Docker Image & Docker Container

  • Docker는 Client / Server 구조로 구성
  • Docker Image는 Read only 형식으로 Docker Container를 생성하기 위한 template
    • Application을 위한 라이브러리와 package, 실행 환경이 구성된 template
    • Application을 실행하는데 필요한 모든 내용이 포함
  • Docker Container는 Docker Image가 메모리에 로딩된 Instance
    • Docker Image 부분은 Read only
    • Docker Container가 데이터 기록하는 영역은 Read-Write 가능 영역

Docker 환경 구성

 

Docker Engine 설치

  • Docker Desktop
    • GUI 방식으로 Docker 운영
    • Linux Kernel이 동작하지 않는 환경에서 Docker를 운영할 수 있는 환경 제공
  • Docker Engine 종류
    • Docker Community - 무료
    • Docker Enterprise - 유료
  • Docker Engine은 최신 버전(latest)을 설치하는 것보다는 Docker Engine 버전을 지정하여 설치하는 것이 일반적
    • Docker Engine 최신 버전을 설치하면 latest 시점에 따른 변경 사항이 발생할 수 있고 동일한 코드라도 실행 시 오류 가능성이 있을 수 있다.
  • 운영환경에서 Docker Engine 설치 시에는 최신 버전보다는 안정적인 지정된 버전을 설치하는 것을 권장
  • Docker 명령은 관리자 권한으로 수행해야 한다.
    • 원칙적으로 docker 명령 사용 시 관리자로 사용자 전환 후 사용하거나 sudo 명령을 통한 관리자 권한으로 실행
더보기

Ubuntu에서 Docker Engine 설치

  • 과거 버전의 Docker Engine 삭제
sudo apt-get remove docker docker-engine docker.io containerd runc

  

  • Docker Dengine 설치를 위한 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 Version 정보 확인
apt-cache madison docker-ce

 

  • 출력된 버전 정보 중 하나의 버전 정보를 shell 변수에 등록 및 Docker Engine 설치
VERSION=<docker ce 버전 정보>

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

 

  •  Docker Engine 설치 확인
docker version

 

  • 현재 사용자를 docker 그룹에 소속시켜 사용
sudo usermod -aG docker <사용자 ID>

# 명령 수행 후 반드시 Linux rebooting 해야 적용

 Amazon Linux에 Docker 설치

sudo yum update
sudo amazon-linux-extras install docker
sudo systemctl start docker
sudo systemctl enable docker

 

Docker 구성 요소

  • Docker Engine - Docker를 이용한 Application 실행 환경 및 관리
  • Docker Hub - Docker Image를 저장하고 공유하는 공식 Public Registry
  • Docker Compose - 의존성 있는 독립된 Container에 대한 구성 정보를 YAML 형식으로 작성하여 일원화된 Application 관리 도구
  • Docker Swarm - 여러 Docker Host를 클러스터로 구축하여 관리할 수 있는 Docker Orchestration 도구
  • Docker Registry - Docker Image 저장소, Public/Private Registry로 구분
  • Docker Kitematic - Container를 이용한 작업을 수행할 수 있는 GUI 도구
  • Docker Machine - VM 및 Cloud VM과 같은 가상 컴퓨터 환경에 Docker 환경을 구성하는 시스템

 

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. Application 코드 작성 
    • Application 개발 환경 필요 - 에디터 프로그램, compiler / interpreter, debugger
  2. Base Image를 이용한 Dockerfile 작성
    • Dockerfile은 Docker Image 생성을 위한 설계도 역할을 하는 텍스트 파일
    • Application 코드, 필요한 라이브러리, 실행 환경 구성
  3. Dockerfile build를 통해 Docker Image 생성
    • 생성된 Docker Image를 이용한 Container 실행
    • Docker Compose를 이용한 다중 Container 실행
  4. Docker Container 서비스 테스트
    1 ~ 4 의 과정은 하나의 Docker Image 생성 과정
  5. Public / Private Registry에 Docker Image 배포
  6. Git과 같은 버전 관리 도구를 이용하여 Dockerfile 관리
  7. 지속적인 Application 관리
    1 ~ 6 의 과정 반복

Docker Image 명령어

 

Docker 명령

  • docker <명령> [옵션] 대상 [인자]
    • docker 명령은 'what' 'how' 'who' 형식으로 사용
    • 명령 - image, container, volume, network, ...
      • 상위 명령 (what), Manage Command - image, container, volume, network, ...
        • 경우에 따라 생략하고 사용
      • 하위 명령 (how), Command - 상위 명령에 대한 동작
    • 옵션 - 명령에 대한 옵션
    • 대상 (who) - 명령이 적용되는 대상
    • 인자 - 대상에 대한 인수

 

Docker 일반 명령

  • docker
    • Docker Client 명령
    • Docker 명령 사용법 출력
  • docker version 확인
    • docker -v
    • docker version
      • --format "{{.Server.Version}}" - Server Version만 출력
      • --format "{{json .}}" - json 형식으로 출력
  • Docker 구성 정보 확인
    • docker system info
    • Docker Root Dir - /var/lib/docker
  • Docker 디스크 사용량 확인
    • docker system df
    • -v : 세부 정보 확인

 

Docker Image 관련 명령

  • Docker Image는 layer 구조로 구성 (OverlayFS)
  • Docker Image를 다운로드하면 각각의 layer가 다운로드된다.
    만약 동일한 layer의 내용이 현재 system에 존재한다면 별도의 다운로드를 수행하지 않는다.
  • Docker Image를 현재 시스템에 보유하는 방법
    • Dockerfile을 build하여 직접 image 생성
    • Docker Registry로부터 image 다운로드
  • Docker Image 이름 형식
    • [<저장소(repository) 이름>/]<image 이름>[:<버전 번호>]
      • 저장소 이름은 생략할 수 있다.
      • 버전 번호를 생략하면 latest 버전 사용
  • Docker Image 검색
    • docker search <image 이름>
  • Docker Image 다운로드
    • docker pull [registry 위치] <image 이름>
    • Docker Image는 layer 단위로 다운로드
  • system에 존재하는 image 목록 확인
    • docker image ls
    • docker images
    • layer 저장 위치 - /var/lib/docker/overlay2
  • Image 세부 정보 확인
    • docker image inspect <image 이름>
  • Image 구성 layer와 실행 정보 확인
    • docker image history <image 이름>
    • image 생성을 위한 Dockerfile에 사용한 명령 확인 가능
  • Docker Image 삭제
    • docker image rm <image 이름>
    • docker rmi <image 이름>
    • 삭제할 image 정확한 이름 표기
    • 현재 Container로 동작 중인 Image는 삭제할 수 없다.

Docker Container 명령어

 

Container

  • 격리된 환경(가상 환경)에서 동작하는 Linux 프로세스
  • Container 프로세스는 Linux 프로세스로서 관리가 되지만 완전 격리된 프로세스로 동작하며 현재 시스템의 Kernel 기능을 공유한다.
  • 격리된 프로세스이므로 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 종료

TIF

쉽지 않네... 치맥의 유혹이...

 

 

2022. 09. 28 에 작성된 글입니다.

 

 

반응형
profile

어쩌다 IT

@jwlish

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!