Container6 6. Network 네임스페이스로 독립 네트워크 구성하기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 지난 포스팅에서 pivot_root()를 사용해 Mount 네임스페이스를 완전히 격리하였다. 오늘은 컨테이너 격리의 마지막 단계, Network 네임스페이스 분리하기이다. 본 챕터를 이용해서 독립된 네트워크 네임스페이스를 생성하고 컨테이너 안에서는 고유한 네트워크 인터페이스와 IP를 사용하며 호스트와는 완전히 격리된 네트워크 공간을 확보해보도록 하자. 🔍 Network 네임스페이스?Network 네임스페이스란 리눅스 시스템 내에서 네트워크 자원(IP, 포트, 라우팅 테이블 등)을 독립적으로 분리할 수 있게 해주는 기능이다.🔧 리눅스는 네트워크 자원을 공유리눅스에서는 기본적으로 시스템에 존재하는 모든 네트워크 자원(예: 인터페이스, IP 주소, 포트 등).. 개발일기/Docker 2025. 6. 26. 5. pivot_root로 루트 파일 시스템 바꾸기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 지난 포스팅에서 chroot()를 사용해 Mount 네임스페이스를 격리하였다. 하지만, 이 상황에는 몇 가지 문제가 있다.chroot()는 단순히 루트 디렉토리의 보이는 경로를 바꾸고 기존 루트가 그대로 남아있다. 따라서, .. 등으로 탈출 가능성이 있어 보안상 불완전하고 프로세스가 여전히 이전 루트를 참조한다.따라서 오늘은 pivot_root를 사용해 정상적인 루트 격리 환경을 만들 것이다. 이때, 우분투 베이스 파일시스템을 사용해 실사용 컨테이너 환경에 가까운 구조를 만들자.🔍 왜 pivot_root?pivot_root는 chroot와 다르게 루트 디렉토리 자체를 완전히 교체한다. 기존 루트가 새 위치로 이동되기 때문에 이전 루트 자체가 사라진다... 개발일기/Docker 2025. 6. 16. 4. Mount 네임스페이스로 파일시스템 분리하기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 지금까지 PID, UTS 네임스페이스를 활용하여 프로세스 ID와 호스트 명을 격리하였다. 이번엔 파일시스템을 분리하여 컨테이너 안에서 진짜 루트 디렉터리가 다르게 보이도록 만들어보자. 이를 위해 Mount 네임스페이스를 활용할 것이다. 🔍 Mount 네임스페이스란?Mount?리눅스에서는 디스크나 외부 장치를 어떤 디렉터리 경로에 연결해야만 접근할 수 있다. 이 과정을 "mount"라고 부른다.$ sudo mount /dev/sdb1 /mnt/usb$ ls /mnt/usb 사진/ 문서/ 영화/리눅스는 하나의 거대한 트리 구조(/) 안에 모든 저장 장치, 파티션, 네트워크 파일시스템 등을 "붙여서" 사용하게 된다. C:\또는 D:\와 같이 드라이브가 분리.. 개발일기/Docker 2025. 5. 30. 2. PID 네임스페이스로 프로세스 격리하기 (심화) Go로 "컨테이너스러운" 프로세스를 만들어보자. 지난 포스팅에서 mydocker run bash 명령으로 bash를 PID 1번으로 실행할 수 있었다. 이번 편에서는 그 구조가 왜 그렇게 동작하는지, 그리고 PID 네임스페이스의 격리 효과가 정확히 무엇인지 코드와 몇 가지 실험으로 구조를 파악해보자. PID 네임스페이스PID 네임스페이스는 리눅스 커널의 네임스페이스 중 하나로, 각 프로세스가 고유한 PID 트리를 갖도록 격리시킨다. 이때 아래와 같은 특징을 볼 수 있다. 부모 네임스페이스에서 보면 자식 네임스페이스의 PID가 일반적인 번호 (예: 12345)자식 네임스페이스 안에서는 해당 프로세스가 PID 1부터 시작이 PID 1 프로세스는 네임스페이스의 init 프로세스로, 모든 자식의 조상🔍 왜 자.. 개발일기/Docker 2025. 5. 29. 1. 컨테이너 만들기 - fork/exec로 컨테이너 프로세스 분리하기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 격리Docker와 같은 컨테이너 기술에서 "격리"라는 키워드는 컨테이너가 제공하는 가장 핵심적인 개념 중 하나이다. 세부적으로 하나하나 그 장점을 나열해보자.1. 🔐보안 (Security)격리를 통해 각 컨테이너는 서로 다른 컨테이너나 호스트 시스템과 직접적으로 상호작용할 수 없다. 만약 컨테이너 내부에서 시스템에 악영향을 주는 코드가 실행되더라도, 다른 컨테이너나 호스트 전체로 피해가 전이되는 것을 막을 수 있다.2. 🧩자원 분리 (Resource Separation)CPU, 메모리, 네트워크, 디스크 I/O 등 시스템 자원을 분리하여 사용할 수 있다. 특정 컨테이너가 무한히 자원을 사용하는 것을 방지하고, 다른 컨테이너에 영향을 주지 않도록 보장할 .. 개발일기/Docker 2025. 5. 28. 8. 자바 컨테이너는 무엇을 의미하나요? 데이터의 ‘저장’이라는 의미로 가장 먼저 등장한 자료구조는 배열이다. 배열을 사용하면 동일한 성질을 가진 primitive type 또는 Reference type의 값을 저장할 때 활용할 수 있다. 하지만 이 글을 읽는 사람들은 대부분 알다시피 배열에는 무시할 수 없는 큰 단점이 있다. ‘크기가 정해지면 바뀔 수 없다.’라는 배열의 성질은 자료 저장의 확장성을 크게 저해하는 요소이다. 이를 해결하기 위해 다양한 자료구조들을 지원하려는 목적으로 등장한 것이 java.util 라이브러리의 container 클래스이다. 주의!!!! 스윙에 사용되는 java.awt.container와 다르다. 대표적인 기본 타입으로 List, Set, Map 등이 있는데 이들은 container라는 클래스에 물리적으로 묶여있.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 1. 이전 1 다음