반응형
리뷰 (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 Engine
- Docker Image와 Container 관리
- Client와 통신
- CLI 방식을 이용하여 Docker 운영
- 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 배포 과정
- Application 코드 작성
- Application 개발 환경 필요 - 에디터 프로그램, compiler / interpreter, debugger
- Base Image를 이용한 Dockerfile 작성
- Dockerfile은 Docker Image 생성을 위한 설계도 역할을 하는 텍스트 파일
- Application 코드, 필요한 라이브러리, 실행 환경 구성
- Dockerfile build를 통해 Docker Image 생성
- 생성된 Docker Image를 이용한 Container 실행
- Docker Compose를 이용한 다중 Container 실행
- Docker Container 서비스 테스트
1 ~ 4 의 과정은 하나의 Docker Image 생성 과정 - Public / Private Registry에 Docker Image 배포
- Git과 같은 버전 관리 도구를 이용하여 Dockerfile 관리
- 지속적인 Application 관리
1 ~ 6 의 과정 반복
Docker Image 명령어
Docker 명령
- docker <명령> [옵션] 대상 [인자]
- docker 명령은 'what' 'how' 'who' 형식으로 사용
- 명령 - image, container, volume, network, ...
- 상위 명령 (what), Manage Command - image, container, volume, network, ...
- 경우에 따라 생략하고 사용
- 하위 명령 (how), Command - 상위 명령에 대한 동작
- 상위 명령 (what), Manage Command - image, container, volume, network, ...
- 옵션 - 명령에 대한 옵션
- 대상 (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 버전 사용
- [<저장소(repository) 이름>/]<image 이름>[:<버전 번호>]
- 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 에 작성된 글입니다.
반응형
'구름 쿠버네티스' 카테고리의 다른 글
구름 쿠버네티스 전문가 과정 6기 - 42일차 (2) | 2023.10.26 |
---|---|
구름 쿠버네티스 전문가 과정 6기 - 41일차 (0) | 2023.10.24 |
구름 쿠버네티스 전문가 과정 6기 - 39일차 (0) | 2023.10.20 |
구름 쿠버네티스 전문가 과정 6기 - 38일차 (1) | 2023.10.19 |
구름 쿠버네티스 전문가 과정 6기 - 37일차 (3) | 2023.10.17 |