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
  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