- 1. 컨테이너란2023년 04월 17일 19시 10분 08초에 업로드 된 글입니다.작성자: 각수짱728x90반응형SMALL
컨테이너란?
컨테이너는 시스템의 나머지 부분과 격리된 프로세스 세트를 말한다.
이러한 프로세스를 실행하는 데 필요한 모든 파일은 고유한 이미지에서 제공되므로,
Linux 컨테이너는 개발 단계에서 테스트, 프로덕션에 이르기까지 이식성과 일관성을 유지할 수 있다.
따라서 전통적인 테스트 환경을 복제하는 개발 파이프라인보다 훨씬 더 빠른 배포를 실현할 수 있습니다.
가상화 VS 컨테이너
가상화는 단일 하드웨어 시스템에서 여러 운영 체제(Windows 또는 Linux)가 동시에 실행될 수 있도록 하는 것
컨테이너는 동일한 운영 체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리합니다.
x86 Linux 시스템은 x86 Linux 컨테이너를 실행하고,
x86 Windows 시스템은 x86 Windows 컨테이너를 실행합니다.ex) 가상화 : VMware, KVM+Qemu, Virtual Box 등
컨테이너 : chroot, cgroup, namespace 등을 활용하여 만든 도커, cri-o, containerd, podman 등
컨테이너의 이해
컨테이너란 시스템의 나머지 부분과 격리된 프로세스 세트라고 했다.
어떤 프로세스들을 이용해서 격리된 환경을 만드는지 알아보자.chroot (루트 디렉토리를 변경하는 프로세스)
격리 될 디렉토리 만들기
mkdir [디렉토리]
격리 환경 만들기
생성한 디렉토리에 bash나 ls같은 기본 프로그램이 필요한 라이브러리 준비
ldd 명령어로 의존성 확인
ldd /bin/bash ldd /bin/ls
필요한 파일들 복사
mkdir /생성한디렉토리/lib64 cp /lib64/libtinfo.so.5 /생성한디렉토리/lib64/ cp /lib64/libdl.so.2 /생성한디렉토리/lib64/ cp /lib64/libc.so.6 /생성한디렉토리/lib64/ cp /lib64/ld-linux-x86-64.so.2 /생성한디렉토리/lib64/ cp /lib64/libselinux.so.1 /생성한디렉토리/lib64 cp /lib64/libcap.so.2 /생성한디렉토리/lib64 cp /lib64/libacl.so.1 /생성한디렉토리/lib64 cp /lib64/libc.so.6 /생성한디렉토리/lib64 cp /lib64/libpcre.so.1 /생성한디렉토리/lib64 cp /lib64/libdl.so.2 /생성한디렉토리/lib64 cp /lib64/ld-linux-x86-64.so.2 /생성한디렉토리/lib64 cp /lib64/libattr.so.1 /생성한디렉토리/lib64 cp /lib64/libpthread.so.0 /생성한디렉토리/lib64 mkdir /생성한디렉토리/bin cp /bin/bash /생성한디렉토리/bin/ mkdir /생성한디렉토리/usr mkdir /생성한디렉토리/usr/bin cp /usr/bin/ls /생성한디렉토리/usr/bin/
격리 환경 만들기 - 2
mkdir -p /test/usr/bin mkdir -p /test/lib64 cp /usr/bin/* /test/usr/bin/ cp /lib64/* /test/lib64 chroot /test bash
chroot 실행
chroot [생성한디렉토리] [격리된환경에서 실행 할 명령어]
namespace (프로세스를 실행할 때 시스템의 관리적인 부분을 각자 분리해서 실행할 수 있도록 도와주는 기능)
종류
- Mount - 파일 시스템 마운트 포인트를 격리
- UTS - hostname과 domainname을 격리
- IPC - interprocess communication(IPC) 자원을 격리
- PID - process ID 격리
- Network - 네트워크 인터페이스 격리
- User - UID와 GID 격리
명령어
- unshare : 프로세스와 현재 시스템 리소스를 분리
ex) unshare --fork --pid --mount-proc bash - nsenter : 분리된 프로세스로 진입
ex) nsenter -t 10521 -n ps
unshare --mount /bin/sh mkdir /tmp/test mount -t tmpfs none /tmp/test cp -r /test/ /tmp/test cd /tmp/test mkdir old pivot_root . old
cgroups (시스템 자원에 대한 격리)
메모리, CPU, I/O, 네트워크, /dev 등의 자원을 격리
설치
yum -y install libcgroup libcgroup-tools
cgroup 생성
cgcreate -a [사용자이름] -g cpu:mycgroup // cgroup 생성 ls -al /sys/fs/cgroup/cpu/ | grep mycgroup // 확인
cpu 제한
제한 전 stress -c 1 로 확인
stress -c 1 로 확인 cgset -r cpu.cfs_quota_us=30000 mycgroup cgexec -g cpu:mycgroup stress -c 1 & top
확인
cgexec -g memory:testgroup bash ; top top: error while loading shared libraries: libgpg-error.so.0: failed to map segment from shared object // 메모리 제한 확인
728x90반응형LIST'docker' 카테고리의 다른 글
도커 실습 - 3계층 이미지 생성 실습 (0) 2023.04.17 4. 도커 컨테이너 개발 (1) 2023.04.17 3. 도커 컨테이너 다루기 (0) 2023.04.17 2. 도커 (0) 2023.04.17 0. 도커 (0) 2023.04.17 이전글이 없습니다.댓글