리눅스(Linux)/컨테이너(Container)

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

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

    VM과 컨테이너

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

    리눅스의 컨테이너 격리 (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..

    [도커] 스웜모드 & 스웜모드의서비스 장애 복구 & 서비스 컨테이너에 설정 정보 전달(secret,config) & 도커 스웜 네트워크 & 서비스 디스커버리

    1. 스웜모드 서비스 도커 vs 스웜 모드 도커 명령어의 제어 단위 >> 컨테니어 스웜모드 명령어의 제어 단위 >> 서비스 서비스 같은 이미지에서 생성된 컨테이너의 집합 서비스를 제어하면 래당 서비스 내의 컨테이너에 같은 명령이 실행됨 서비스 내에 컨테이너는 한 개 이상 존재할 수 있으며, 컨테이너들은 각 워커 노트와 매니저 노드에 할당됨 각 노드에 할당된 컨테이너들을 태스트(task)라고 함 #1 서비스 생성 root@swarm-manager:~# docker service create ubuntu:14.04 bin/sh -c "while o echo hello world; sleep 1; done" ino0zze9ppiltcngzhune9cw1 overall progress: 1 out of 1 ta..

    [도커] 쉘스크립트에 도커 명령어 작성 & Docker compose & swarm

    동일한 컨테이너 이름을 사용할 수 없음 동일한 이름의 컨테이너가 존재하는 경우, 기존 컨테이너를 삭제해야 컨테이너를 생성할 수 있음 vagrant@xenial64:~$ docker container run --name echo -itd -p 8888:8080 myanjini/echo:latest /bin/bash vagrant@xenial64:~$ docker container run --name echo -itd -p 8889:8080 myanjini/echo:latest /bin/bash docker: Error response from daemon: Conflict. The container name "/echo" is already in use by container "32b348b10a6244a..

    [도커] 도커이미지(태깅/CMD명령 오버라이딩/필터링/출력형식) & 도커 컨테이너(정지, 재시작, 삭제/wordpress/볼륨)

    태깅되지 않은 이미지를 검색 및 태그 붙이기 태깅되지 않은 이미지 검색 vagrant@xenial64:~/pulltest$ docker image ls -f "dangling=true" REPOSITORY TAG IMAGE ID CREATED SIZE fefad6ab4ef6 11 minutes ago 1.23MB 이미지에 태그를 변경 방법 vagrant@xenial64:~/pulltest$ docker image tag --help Usage: docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE 태킹되지 않은 이미지에 태그를 추가 vagrant@xenial64:~..

    [도커] 도커개념 & 도커 실행하기(이미지 생성 / 컨테이너 생성)

    도커 개념 - 쓰는이유 복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행할 수 있음 - 도커란 무엇인가 리눅스 커널에서 제공하는 컨테이너 기술을 이용 - 컨테이너 기술이란? 가상화보다 가벼운 기술 - 가상머신의 등장 컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도(1960년대에 가상화 개념이 처음 등장) 서버 성능은 더욱 더 좋아졌음 -> 대부분의 시간을 서버가 놓고있음 - 클라우드 서비스란 가상화 기술을 이용하여 서버를임대해주는 서비스 - 가상머신의 문제 1. 컴퓨터를 통째로 만들다보니 각종 성능 손실이 발생 --> CPU안에 가상화 기능을 넣기 시작, 호스트와 커널을 공유하는 반가상화가 나오기 시작(?) 2. 항상 Guest OS를 설치해야함 이미지 안에 OS가 포함되기 떄문에 이미지 용량이 커짐 (꽤..