목록네트워크 캠퍼스/Docker (10)
Information Security Study

nginx 리버스 프록시 nginx의 기본설정 : 80번 포트 오픈 기본 분배 방식 : round-robin 클라이언트의 요청이 80번 포트로 들어오면 준비해둔 애플리케이션 서버의 각 서버로 트래픽을 분배한다. least_conn 방식 : 요청이 더 적게 들어오는 서버에 배정을 늘리는 방식 요청이 더 적다면 least_conn 방식을 채택할 수 있다. weight 설정 등을 통해 비중을 다르게 가져갈 수 있다. nginx를 활용한 리버스 프록시 실습 hostos1에 nginx를 설치해 리버스 프록시 서버로 사용하고 hostos1 내부의 도커엔진 위에 올라간 컨테이너에 실제 어플리케이션을 설치해서 리버스 프록시 서버가 어떻게 클라이언트로부터 서버의 존재를 숨기는지 확인할 것이다. 먼저 nginx를 host..

도커 DNS 배경 및 이론 사용자가 만든 네트워크에는 자동으로 컨테이너들이 등록된다. 이 DNS를 제어해 DNS 서버 생성과 로드밸런싱까지 한 번 학습했다. 도커 DNS는 사용자 정의 네트워크 내부 컨테이너의 이름을 자동으로 확인하도록 도커 호스트에 생성된다. 127.0.0.11 대역을 활용한다. 동일 network alias 할당을 통해 round robin 방식으로 응답 -> 로드밸런서처럼 사용 가능 컨테이너간 이름 조회가 가능한 이유 : 컨테이너 생성 시 호스트 시스템에서 다음 세 파일을 복사해서 컨테이너 내부에 적용하기 때문 저장경로는 다음과 같다. /etc/hostname /etc/hosts /etc/resolv.conf 도커 DNS는 libnetwork라는 sandbox의 구현체에 구현되어 있..

bridge 자체 조회 docker network ls 조회 시 나오는 bridge -> 기본 브릿지 docker0 위에 얹혀져 있다. $ docker network inspect bridge : 브릿지 자체에 대해 inspect IPAM 내부에 네트워크 전체 대역에 대한 내용이 나온다. 그 밑에는 Containers 부분이 있는데 여기에는 할당된 컨테이너 목록을 볼 수 있다. Veth 두 네트워크 네임스페이스 사이의 연결을 위해 동작하는 리눅스 네트워킹 인터페이스다. vetheernet 각 네임스페이스에 단일 인터페이스를 가지는 전이중 링크이다. 양방향 통신이 가능하다. 한 인터페이스의 트래픽을 다른 인터페이스로 전해주는 역할을 한다. 도커 네트워크 생성시 veth를 이용해 네임스페이스간 명시적 연결을..

attach와 exec 컨테이너와 지속적인 통신을 하고 싶을 때 주로 attach 모드로 기동하게 된다. 다른 프로세스 위에서 돌리고 싶을때 해당 명령어를 쓴다. $ docker run -d --name=attach-con ubuntu:22.04 /usr/bin/top -b : /usr/bin/top -b 명령어를 수행하는 컨테이너가 detach모드로 열리고 top -b를 백그라운드에서 수행한다. $ docker attach attach-con : 해당 컨테이너 내부에서 attach 모드로 돌려서 조회하는 명령어 attach모드는 특정 작업중인 컨테이너에 포커싱을 맞추는 모드이다. exec : execute 모드로 실행중인 컨테이너에 추가적 명령을 실행하게 한다. $ docker run -itd --na..

모니터링용 이미지 및 컨테이너로 상태 감시하기 docker stats로도 상태를 감시할 수는 있지만 그보다 좀 더 전문적으로 감시할 수 있는 툴이 존재한다. cadvisor라는 이미지와 컨테이너를 이용하면 된다. 도커허브가 아닌 gcr에 올라와있는 이 이미지는 아래와 같이 복잡한 명령어로 볼륨마운트를 해야만 볼 수 있다. $ docker run \\ --restart=always \\ --volume=/:/rootfs:ro \\ --volume=/var/run:/var/run:rw \\ --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro \\ --volume=/var/lib/docker/:/var/lib/docker:ro \\ --volume=/dev/disk/:/dev/disk:..

이미지 삭제 docker ps -a 해서 나온 컨테이너 전부 stop (컨테이너가 exited 상태가 된다.) exited인 컨테이너 전부 삭제 전부 제거됨 docker images 해서 나오는 이미지들 전부 삭제 이름이 겹치는 이미지는 버전까지 작성해줘야 제거된다. 제거 후 조회하면 전부 삭제되어있다. 이미지 생성 가상머신과 테스트 가상머신 분리하기 현재 도커 내부에 받았던 모든 컨테이너와 이미지를 삭제하여 도커만 설치되어있는 가상머신만 남게 되었다. 가상머신 종료 후 virtual box 왼쪽 도구탭에서 우분투 호스트를 우클릭하고 복제를 누르고 ubuntu_host2로 이름을 정하고 MAC Address 주소 정책을 '모든 네트워크 어댑터의 새 MAC 주소 생성'으로 바꿔준다. 완전한 복제 선택 후 ..

Portainer를 이용한 GUI로 컨테이너 관리 컨테이를 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 \\..

index.html을 생성해 nginx에 적용해보기 어제 다운받은 nginx의 메인페이지를 변경해볼 것이다. $ cd 로 현재 유저 폴더로 이동한 상태에서 $ mkdir 폴더명 && cd $_ 를 입력해 바로 해당 폴더로 이동한다. $ vi index.html 을 이용해 마크업을 생성한 후 아무거나 작성한다. 예시 Hello docker container! 이제 호스트에 작성한 이 파일을 nginx의 index.html로 교체해야 한다. 호스트에서 컨테이너로 파일을 보내는 방법은 바인드마운트, 볼륨마운트 등의 방법이 있지만 우선 현재는 docker cp 명령어로 진행할 것이다. nginx 서버는 /usr/share/nginx/html/ 경로에 해당 파일을 저장한다. $ docker cp 파일명 컨테이너명..