8-2. 컨테이너간 통신(네트워크)

2024. 5. 7. 19:17·쿠버네티스/docker
  1. 컨테이너 네트워크 사용하기
    1. docker 0 : 
    2. docker 0 bridge Network
      • ip addr

        • docker0 는 172.17.0.1 ip를 가지고 있음.
      • brctl show
        • docker 0가 bridge interface라는 것을 확인할 수 있음
        • 모든 컨테이너는 docker 0 네트워크를 통해 외부로 송출됨
      • docker run --name c1 -it busybox
        • 도커제로안에서 만들어진 컨테이너는 177.17.0.2 , 3, 4, .... 순차적으로 ip 할당되어짐
        • 첫번째로 실행된 container 은 177.17.0.2
      • docker run --name c2 -it busybox

        • 두번째로 실행된  container 은 177.17.0.3
      • ping -c 3 8.8.8.8

        • 8.8.8.8 : google dns
        • 외부 통신이 되는 sample
      • docker inspect c1
        • SandboxId : c1컨테이너의 네트워크 환경 만듬
        • Endpoint ID : veth, 컨테이너 안에 있는 네트워크 인터페이스 
        • IPAddress : 
        • MacAddress : 하드워어 mac address
        • gateway : docker 0 ip 주소로 되어있음. (172.17.0.1)
          ip address를 자신의 host ip address로 바꾸어서 외부로 보내주는 매스커레이드 서비스, nat 서비스를 지원.
      • iptables -t nat -L -v : nat table 확인하기
        • 소스 172.17.0.0 네트워크에서 어디로든 나가게되면 masquerade 해줌 (호스트 ip로 바꾸어서 송출)
      • alias crm='docker rm -f $(docker ps -aq)'
        • crm 명령어 사용 : 컨텡너를 모두다 초기화시킴
  2. 컨테이너 포트 외부로 노출하기
    1. -p hostPort : containerport  
      • localhost 80으로 접속하면 container 80으로 연결
      • 위 상태에서 curl localhost:80 연결하면 바로 container 80으로 연결되며, 외부접속도 가능
    2. -p containerport
      • 호스트 포트가 80으로 정해지는것이 아닌, 랜덤하게 정해짐 (system 에서 안쓰는 포트 중 1)
      • 랜덤하게 지정된 포트 연결
    3. -P
      • docker 파일에서 expose한 수만큼 랜덤 포트를 만들어서 연결
        • https://github.com/nginxinc/docker-nginx/blob/9abe4ae472b3332665fad9b12ee146dc242e775c/mainline/debian/Dockerfile
          EXPOSE 80 을 확인할 수 있음.
      • hostport는 랜덤이고, container port 는 docker file 에서 expose하고있는 80포트임
  3. user-defined network 구성하기
    1. docker network ls
      • 기본적으로 도커가 동작될 때, bridge, host, none 이 동작됨
      • bridge네트워크를 사용하고있는 네트워크가 docker0
    2. user define network 만들기
      • docker network create : docker network 생성 명령어
      • --driver bridge : driver 은 bridge가 default
      • --subnet 192.168.100.0/24 : 생략 시, 172.18. 0.0 부터 할당됨 ( 172.17까지 docker0가 사용함)
      • --gateway 192.168.100.254 : 생략 시, subnet 으로 할당된 주소 중 마지막 1 인 값이 지정됨
      • mynet : 네트워크 이름
    3. user define network 를 사용하여 컨테이너로 만들어봄 
      • mynet network 확인하기
      • user define network 를 사용하여 docker 실행하기 (--net network_name)
        • ip 할당하지 않으면 192.168.100.1 ~ 부터 할당됨
        • ip 할당하는 경우, 지정된 ip가 지정됨
  4. 컨테이너간 통신 wordpress, mysql 컨테이너 서비스 구축하기
    1. mysql 실행하기

      • volume mount된 dbdata확인하기
    2. wordpress 실행하기
      • --link mysql:mysql = container 이름 : alias name 으로 mysql 컨테이너와 연동시킴
      • wordpress 에서 데이터가 누적되면 /dbdata에 저장됨
  5. 문제 풀이
    1. 다음의 container 을 빌드하시오
      • $ cat genid.sh
        #!/bin/bash
        mkdir -p /webdata
        while true
        do
          /usr/bin/rig | /usr/bin/boxes -d boy > /webdata/index.html
          sleep 5
        done
      • $ cat Dockerfile
        FROM ubuntu:18.04
        RUN apt-get update; apt-get -y install rig boxes
        ADD genid.sh /bin/genid.sh
        RUN chmod +x /bin/genid.sh
        ENTRYPOINT ["/bin/genid.sh"]
      • $ docker build -t genid .
    2. 빌드한 container 을 이용히 multi-tier 컨테이너를 구축하기
      • geind 에서 생성한 index.html은 volume 을 통해 nginx 웹 컨텐츠로 공유되어야 함
      • nginx 웹서브는 80포트를 통해 genid가 생성한 html 문서를 고객에게 서비스 함
      • 결과 : genid는 웹 문서를 생성하고, nginx 는 고객에게 서비스 하는 형식으로 운영됨
        • docker run -d -v /webdata:/webdata --name genid genid:latest
          > genid 컨테이너를 background 로 실행
        •  docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14 
          > geind 컨테이너에서 파일이 저장된 위치를 read only 로 읽고, 80, 80 을 설정하여 nginx 실행
        • curl [nginx ip주소] 로 실행

'쿠버네티스 > docker' 카테고리의 다른 글

9-2. 빌드에서 운영까지  (0) 2024.05.10
9-1. 빌드에서 운영까지  (0) 2024.05.08
8-1. 컨테이너간 통신(네트워크)  (1) 2024.05.03
7-2.Docker Container Storage  (0) 2024.05.03
7-1. Docker Container Storage  (1) 2024.05.01
'쿠버네티스/docker' 카테고리의 다른 글
  • 9-2. 빌드에서 운영까지
  • 9-1. 빌드에서 운영까지
  • 8-1. 컨테이너간 통신(네트워크)
  • 7-2.Docker Container Storage
몽자비루
몽자비루
코딩공부 정리용 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • python (30)
        • python_selenium (16)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (30)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
      • 에러일기 (1)
      • Server&load (29) N
        • AWS (27)
        • Jmeter (0)
        • load test (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    qa
    스터디
    python
    로스트아크
    공존성테스트
    vi에디터
    네트워크 테스트
    리눅스
    포스트맨
    도커
    k8s
    사드웨어리소스
    application log
    로스트아크api
    애플리케이션로그
    e2c
    linux
    테스트 계획서
    QAKOREA
    API
    쿠버네티스
    앱공존성
    테스트스크립트
    테스트 계획서 만들어보기
    cka
    개발자에서아키텍트로
    테스트 결과보고서
    LOSTARK
    postman
    .cpu
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
몽자비루
8-2. 컨테이너간 통신(네트워크)
상단으로

티스토리툴바