- 컨테이너 네트워크 사용하기
- docker 0 :
- 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 명령어 사용 : 컨텡너를 모두다 초기화시킴
- ip addr
- 컨테이너 포트 외부로 노출하기
- -p hostPort : containerport
- localhost 80으로 접속하면 container 80으로 연결
- 위 상태에서 curl localhost:80 연결하면 바로 container 80으로 연결되며, 외부접속도 가능
- localhost 80으로 접속하면 container 80으로 연결
- -p containerport
- 호스트 포트가 80으로 정해지는것이 아닌, 랜덤하게 정해짐 (system 에서 안쓰는 포트 중 1)
- 랜덤하게 지정된 포트 연결
- 호스트 포트가 80으로 정해지는것이 아닌, 랜덤하게 정해짐 (system 에서 안쓰는 포트 중 1)
- -P
- docker 파일에서 expose한 수만큼 랜덤 포트를 만들어서 연결
- hostport는 랜덤이고, container port 는 docker file 에서 expose하고있는 80포트임
- -p hostPort : containerport
- user-defined network 구성하기
- docker network ls
- 기본적으로 도커가 동작될 때, bridge, host, none 이 동작됨
- bridge네트워크를 사용하고있는 네트워크가 docker0
- 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 : 네트워크 이름
- user define network 를 사용하여 컨테이너로 만들어봄
- mynet network 확인하기
- user define network 를 사용하여 docker 실행하기 (--net network_name)
- ip 할당하지 않으면 192.168.100.1 ~ 부터 할당됨
- ip 할당하는 경우, 지정된 ip가 지정됨
- ip 할당하지 않으면 192.168.100.1 ~ 부터 할당됨
- mynet network 확인하기
- docker network ls
- 컨테이너간 통신 wordpress, mysql 컨테이너 서비스 구축하기
- mysql 실행하기
- volume mount된 dbdata확인하기
- volume mount된 dbdata확인하기
- wordpress 실행하기
- --link mysql:mysql = container 이름 : alias name 으로 mysql 컨테이너와 연동시킴
- wordpress 에서 데이터가 누적되면 /dbdata에 저장됨
- mysql 실행하기
- 문제 풀이
- 다음의 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 .
- $ cat genid.sh
- 빌드한 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 run -d -v /webdata:/webdata --name genid genid:latest
- 다음의 container 을 빌드하시오
'쿠버네티스 > 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 |