목록Study (156)
0x0102

1. 컨테이너의 네트워크 이해하기 1) 기반 기술인 리눅스 네트워크의 적용 도커 네트워크는 곧 리눅스 네트워크라고 보아도 무방하다. 도커 네트워크는 CNM(Container Network Model) 인터페이스 위에 구축되며 OS나 인프라에 구애 받지 않고 사용할 수 있다. 리눅스 네트워크 빌딩 블록은 리눅스 브릿지, 네트워크 네임스페이스, veth pair, iptables등이 포함되는데 이 조합은 복잡한 네트워크 정책을 위한 규칙 및 네트워크 분할 및 관리 도구를 제공한다. 그 중 2계층에 해당하는 도구로 MAC 주소를 활용해서 식별하고 통신한다. [리눅스 브릿지] 커널 내부의 물리적인 스위치를 프로그래밍적으로 가상 구현한 것이OSI Layer 2인 디바이스인데 트래픽을 검사하여 동적으로 학습되는 M..
1. dirty page dirty page: page cache에 있는 페이지 중 쓰기 작업이 이루어진 메모리 page writeback (or dirty page 동기화) : dirty page가 생성될 때마다 디스크에 쓰면 쓰기 I/O가 폭증하여 성능 저하가 발생할 수 있기에 몇가지 조건을 만족시켜야만 dirty page를 디스크로 동기화하는 과정 보통 pdflush,flush,bdflush 등 flush가 들어간 커널 스레드가 이 작업을 진행함 따라서 I/O가 많이 발생하는 서버에서는 dirty page를 언제 얼마나 동기화 시키느냐가 중요한 성능 튜닝 요소가 됨 2. dirty page 관련 커널 파라미터 1) vm_dirty_background_ratio dirty page 내용을 백그라운드로..
8. 컨테이너 내부 구조 inspect로 확인하기 $ docker container inspect 컨테이너명 inspect 명령어를 쓸 때 image가 타겟인지 container가 타겟인지 명시 9. cp 명령어로 컨테이너 내부로 호스트 파일 복사해서 넘기기 $ docker cp 호스트의파일명 컨테이너명:경로와파일명 호스트 파일을 컨테이너로 보내기 $ docker restart 컨테이너명 재시작해서 갱신되었는지 여부 확인 역으로 컨테이너 내부의 파일을 호스트로 가져오는법 $ docker cp 컨테이너명:경로와파일명 호스트에서받을파일명 파라미터의 순서만 바꾸어주기 ex) nginx의 reverse proxy 구성에 대해 $ docker cp nginx서버명:/etc/nginx/nginx.conf 호스트의경..

TCP는 자신이 보낸 데이터에 응답을 받지 못하면 패킷을 재전송하는데 이를 TCP 재전송이라고 한다. 성능 저하가 불가피하게 일어남에도 통신의 특성상 반드시 필요한 과정이다. 그 과정과 그로 인해 발생할 수 있는 타임아웃에 대해 알아보자. 1. TCP 재전송과 RTOTCP 과정에서 데이터를 보낸 쪽은 받는 쪽의 ACK를 기다리는데, 만약 받지 못한다면 패킷이 중간에 손실되었다고 판단하고 재전송한다. 여기서 ACK를 얼마나 기다려야하는지에 대한 값을 RTO (Retransmission Timeout)라 부른다. RTO 안에 ACK를 받지 못하면 TCP 재전송이 발생하는 것이다. RTO는 일반적인 RTO와 InitRTO 두 가지가 있다. 일반적인 RTO : RTT(RoundTripTime) 기준으로 설정 I..
1. 개요 도커의 컨테이너 가상화 기술은 도커엔진이라는 자체 스펙으로 바뀌었지만 LXC로부터 시작되었다. LXC와 컨테이너 격리에 대해 알아보자. 2. 컨테이너 내부 측정 가상머신 생성시 도커와 OS 드라이버를 분리해주었다. 이제 /var 폴더에 '이미지'가 패키징된 스냅샷을 찍고 스냅샷을 활용해 프로세스를 띄우는 방식으로 진행해보자. 이미지 레이어에는 Read Only 레이어와 Read, Write가 가능한 컨테이너 레이어 두 종류가 있다. 이미지를 사용하여 띄운 컨테이너는 OS가 실행되며 Process id 1번을 부여받는다. 이어서 네트워크 설정, cpu, 메모리, 디스크 등도 할당 받는다. 즉, 도커는 리눅스의 불편한 절차를 자동으로 처리해주므로 편의성이 증대된다. 이제 내부 구조를 가져와보도록 ..

1. 프라이빗 레지스트리 구축의 필요성 기업의 경우 프라이버시를 위해 퍼블릭 레포지토리를 사용하지 않고, 프라이빗 저장소를 직접 구축하기도 한다. 도커허브 서버를 유료로 사용해도 되지만 도커허브에 공개된 registry 라는 공식 이미지로 구축하는 경우가 더 많다. 2. registry 이미지를 이용해 host1에 구축해보기 $ docker pull registry $ docker images | grep registry registry 이미지 pull 볼륨 설정 // 호스트의 저장폴더와 컨테이너 저장폴더 동기화 $ docker run -d \ -v /home/유저명/registry_data:/var/lib/registry \ -p 5000:5000 \ --restart=always \ --name=pr..

1. TCP Keepalive란? TCP 통신을 위해서는 반드시 3way handshake가 필요하지만 통신량이 많고 지속적인 경우 불편함을 겪을 수 있다. 이 때 두 종단 간 맺은 세션을 유지해서 통신이 일어날 때마다 유지 중인 세션을 이용하는 방식인 TCP Keepalive를 생각할 수 있다. TCP Keepalive 환경에서의 패킷 흐름은 3 way handshake > 요청과 응답 > keepalive > ack > 요청 > 응답 순과 같다. TCP Keepalive는 연결된 두 세션이 살아있는지 확인하는 아주 작은 패킷을 하나 보내며 실행된다. 이 때 양쪽 모두 이 패킷을 보낼 필요는 없으며 둘 중 어느쪽이라도 이 기능을 사용하면 세션은 유지된다. 현재 사용하고 있는 네트워크 소켓이 Keepal..

1. TCP 통신 과정 3 way handshake : 통신을 시작하기 전 최초의 연결을 맺는 과정 클라이언트 --- SYN(통신 시작 신호) --> 서버 서버 --- SYN + ACK --> 클라이언트 클라이언트 --ACK--> 서버 이후 클라이언트는 서버에 데이터를 요청 4 way handshake 서버(연결을 끊으려고 하는 쪽) --FIN(종료 신호)--> 클라이언트 클라이언트 --- ACK --> 서버 // 클라이언트의 사용한 소켓 정리 클라이언트 --- FIN --> 서버 서버 --ACK--> 클라이언트 // 소켓 정리 + tcpdump로 위와 같은 과정을 실제로 확인해 볼 수 있다. 2. TIME_WAIT 소켓의 문제점 위에서 서버가 연결을 끊으려고 했다면 서버는 active closer, 끊..

도커 이미지 -> 컨테이너 실행에 필요한 실행파일, 라이브러리, 설정 값 등 포함 이미지 생성 실행 순서 어플리케이션 개발 Dockerfile에 이미지 생성 프로세스 기입 빌드해서 이미지로 생성 이미지를 활용해 컨테이너 생성 컨테이너 작동 여부 테스트 도커허브에 업로드 1로 돌아가기 1. 이미지 다운 방법 $ docker 이미지 pull 옵션 name:태그버전 - docker.io 가 기본 저장소 $ docker pull 192.168.31.101:9999/도커이미지 프라이빗 저장소 지정 ex) $ docker pull gcr.io/google-samples/hello-app:1.0 $ docker image inspect 이미지명:버전 이미지 내부 정보 확인 Id : 이미지의 아이디 RepoTags :..

컨테이너를 관리하는 방법에는 ps가 있지만 GUI로 관리할 수도 있다. 이러한 도구로 portainer 를 사용해도록 하자. $ docker pull portainer/portainer-ce 해당 명령으롤 이미지를 받아온다. $ docker volume create portainer_data 로컬과 정보를 공유하기 위해 볼륨을 생성한다. $ docker run -d -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ --restart=always \ portainer/portainer-ce 해당 이미지를 실행함과 동시에 볼륨마운트로 호스트의 파일을 컨테이너로 전송할 수 있는 통로를 마련한다. 여기까지..