리눅스(Linux)

    [컨테이너] Container Layer 구조 (OverlayFS, 컨테이너 이미지 구조)

    OSSCA ArgoWorkflows 프로젝트 멘토님께서 본인이 이전에 작성한 블로그로 컨테이너 구조에대해 발표를 해주셨다. https://ykarma1996.tistory.com/192 컨테이너의 구조와 오픈소스의 생태계에 관한 리서치(feat. 도커는 적폐인가?) 컨테이너 이미지의 빌드 및 배포에 관한 성능을 개선하기 위해 리서치를 하다보니, 혼자 알기에 너무 재밌는 배경들이 많아서 정리해 보기로 했다. 오늘은 컨테이너와 이미지의 구조 및 원리(특 ykarma1996.tistory.com 내용이 정말 대박이다.... 리눅스의 네임스페이스까지는 격리해서 실습을 해보았지만, 컨테이너 오버레이에 대해서 까지는 생각을 못했었다. 이김에 멘토님의 블로그를 따라하며 오버레이 실습을 해보려고 한다! (**내용은 위..

    [Linux] 로그인쉘과 비로그인쉘

    shopt login_shell 명령어로 로그인쉘 여부를 확인할 수 있다. 로그인쉘과 비로그인쉘의 차이점은 환경설정 파일을 적용하는 데 있다. 로그인쉘의 경우 /etc/profile, ~/.bash_profile 의 환경설정 파일에 영향을 받지만 비로그인쉘의 경우 영향을 받지 않는다. 로그인 쉘 Linux는 사용자가 자신의 계정에 로그인할 때 로그인쉘을 시작한다. 로그인쉘은 로그인할 때 수행되는 기본 쉘이다. logout 명령으로 로그아웃하여 쉘을 종료할 수 있다. 터미널을 통해 SSH를 통해 리눅스 시스템에 접근할 때 “su -” 명령어를 통해 user를 바꿀 때 다음과 같은 순서로 명령을 실행한다. /etc/profile 을 실행 /etc/profile은 /etc/profile.d 안에 있는 스크립트..

    [Linux] chmod

    chmod 리눅스(Linux)는 하나의 컴퓨터를 여러 사람이 사용할 수 있는 멀티유저 운영체제(OS)이기 때문에 권한 관리가 매우 중요하다. 리눅스 파일, 디렉토리 권한 확인 ls -l 명령을 사용하여, 권한을 확인할 수 있다. snchoi@snchoi:/usr/local/bin$ ls -al 합계 354452 drwxr-xr-x 2 root root 4096 6월 9 15:39 . drwxr-xr-x 11 root root 4096 5월 9 11:39 .. -r-xr-xr-x 1 root root 140376278 5월 9 18:52 argocd -rwxr-xr-x 1 root root 12737304 2월 13 15:00 docker-compose -rwxr-xr-x 1 root root 604500..

    VM과 컨테이너

    근본적인 차이점은, VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면 컨테이너는 호스트 컴퓨터의 커널을 공유한다는 점이다. 1. 컴퓨터 부팅 과정 BIOS 라고 하는 초기 프로그램을 실행한다. BIOS는 가용 메모리양을 파악하고, 네트워크 인터페이스들을 식별하고, 그 밖에 디스플레이나 키보드, 저장 장치 같은 여러 장치들을 탐지한다. 요즘은 이런 기능의 상당 부분을 UEFI가 담당하고 있다. 하드웨어 탐지 완료 후, 시스템은 부트로더를 실행한다. 부트로더는 운영체제의 커널 코드를 메모리에 적재해서 실행한다. 커널 코드는 응용 프로그램보다 높은 수준의 권한으로 실행된다. 커널이 메모리나 네트워크 인터페이스 등에 접근할 수 있는 것은 그런 권한 수준 덕분이다. 커널 코드는 CPU에서 기계어 명령의..

    [Linux] 리눅스 능력 (getcaps)

    특정 프로세스에 주어진 능력들은 getpcaps 명령으로 볼 수 있다. 보통의 경우 비루트 사용자가 실행한 프로세스에는 아무런 능력도 배정되지 않는다. $ snchoi@snchoi:~$ ps PID TTY TIME CMD 1905 pts/0 00:00:00 bash 3577 pts/0 00:00:00 ps $ snchoi@snchoi:~$ getpcaps 1905 1905: = 최소 권한 원칙에 따라, 프로세스나 파일에 능력을 부여할 때는 작업에 꼭 필요한 능력들만 부여하는 것이 바람직하다. 컨테이너 실행 시 컨테이너에 부여할 능력들을 설정할 수 있다.

    [Linux] 리눅스 setuid, setgid

    보통의 경우 사용자가 파일을 실행하면 해당 프로세스는 그 사용자의 ID로 실행된다. 그러나 파일에 setuid 비트를 설정해 두면 프로세스는 파일 소유자의 ID로 실행된다. $ snchoi@snchoi:~$ ls -l `which sleep` -rwxr-xr-x 1 root root 26984 Feb 7 2022 /usr/bin/sleep $ snchoi@snchoi:~$ cp /usr/bin/sleep ./mysleep $ snchoi@snchoi:~$ ls -l ./mysleep -rwxr-xr-x 1 snchoi snchoi 26984 Jul 4 02:11 ./mysleep 출력에서 보듯이 복사본 mysleep의 소유자는 snchoi 라는 사용자이다. # 복사본을 루트계정으로 실행 $ snchoi@..

    리눅스의 컨테이너 격리 (cgroups, namespace)

    컨테이너는 VM과 달리 Host의 OS를 공유한다. 1. Cgroups(control groups) 격리 cpu, memory, network 등 프로세스 그룹의 시스템 리소스 사용량을 관리한다. 어떤 리소스 사용량이 많다면 그 애플리케이션을 cgroup에 넣어서 cpu와 memory 등의 사용 제한을 가능하게 한다. 보통 /sys/fs/crouop 에서 여러 종류의 제어 그룹 위계구조들을 볼 수 있다. $ snchoi@snchoi:/$ ls sys/fs/cgroup/ cgroup.controllers cgroup.threads dev-mqueue.mount io.stat sys-fs-fuse-connections.mount cgroup.max.depth cpu.pressure init.scope mem..

    [Docker] docker inspect

    docker inspect는 container or image의 low level 정보를 가져오는 명령어이다. 기본적인 출력은 json 형태이다. docker 의 IP 주소 및 logpath 등 자세한 정보 확인이 가능하다. root@~~# docker inspect CONTAINER_ID [ { "Id": "8aadfb1607f5065070b96cbe5e4259312038cc0e53b2ba62e4ea9da805691574", "Created": "2016-05-18T07:16:27.598816826Z", "Path": "httpd-foreground", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Resta..