일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 파이썬 개발 환경 설정
- python 개발환경 설정
- route53
- 볼륨
- WAF
- VPC
- 정책설정
- 운영
- 도커
- vpn
- python 이란
- erp 구축프로젝트
- AWS
- ACL
- 방화벽
- iam
- nat
- 네트워크
- EC2
- 서버
- 보안그룹
- gcp기본구조
- 로드밸런싱
- 영림원erp
- 멀티리전
- aws와 gcp 비교
- 데이터베이스
- GCP
- SSL
- gcp 아키텍처
- Today
- Total
혜잉이의 소소한 공간
[docker#4] 네트워크 관리 본문
📌 옵션
# 바인드 마인드 방식 볼륨 구성, 서로 다른 페이지를 보여줌
docker container run -d --name web1 -v /www1:/usr/share/nginx/html -p 8081:80 nginx
docker container run -d --name web2 -v /www2:/usr/share/nginx/html -p 8082:80 nginx
docker container run -d --name web3 -v /www3:/usr/share/nginx/html -p 8083:80 nginx
echo "<h1>web1 test page</h1>" > /www1/index.html
echo "<h1>web2 test page</h1>" > /www2/index.html
echo "<h1>web3 test page</h1>" > /www3/index.html
- 접근하는 컨테이너가 각각 다름
- 컨테이너는 생성되었지만 현재 사용중인 포트여서 에러가 발생하는 것으로 보임.
ip add 명령어를 통해 보이는 정보중에 ens33은 리눅스 네트워크 정보
docker0 정보 확인
✅ 컨테이너 호스트 네임 & 'hosts' 파일 & DNS 서버 설정
docker container run -it --rm --name myweb \
--hostname webserver \
--add-host docker1:172.17.0.1 \
--dns 8.8.8.8 centos
- 기본 경로
즉, 이렇게 통신한다고 생각하면 됨.
컨테이너를 생성하면 기본적으로 전부 같은 네트워크
각각의 컨테이너는 도커 0번을 게이트웨이로 지정
✅ 사용자 정의 네트워크 생성 및 연결
docker network ls
- 도커가 지원하고 있는 네트워크 타입
docker network create -d bridge testnet
docker container run -it --rm --name myweb3 --network=testnet centos
현재 완성된 네트워크 구성은 위와 같음.
자신의 게이트웨이(화살표 방향) 및 외부로의 통신은 다 정상적으로 이루어짐.
💻 Docker 는 SDN(Software Define Network)를 사용하여 컨테이너의 통신을 관리
Docker 네트워크는 bridge, host, none 3 가지 유형 기본적으로 bridge 유형를 사용하여 컨테이너를 구성
docker container run --rm --network=bridge busybox ip address
* 비지박스는 용량이 작은 리눅스라고 생각하면 됨
--rm : 명령이 끝나면 자동으로 삭제되도록 설정
--network=bridge : 설정 안해도 상관은 없음
1. 네트워크 타입 : host
docker container run –d --rm --name mynginx --network=host nginx
- 본체 정보를 그대로 가져와서 사용
docker container exec -it mynginx /bin/bash
- 데비안 이미지를 이용하여 컨테이너를 구동
- 패키지가 설치되어 있지 않아서 ip address 라는 명령어를 지원하지 않음
apt-get -y install iproute2
패키지 설치 후 ip address 명령어 정상적으로 사용 가능
컨테이너의 네트워크 장치와 호스트의 네트워크 장치가 동일함.
2. 네트워크 타입 : bridge
docker network create -d bridge br0
docker network create -d bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 br1
docker container run -it --name testserver --network=br1 centos
docker network inspect br1
- 현재 네트워크를 사용하는 컨테이너가 생기면 보이게됨
docker container run -it --rm --name testserver --network=br1 centos ip adress
* 고정 IP 할당
docker container run -it --rm --name testserver --network=br1 --ip 192.168.100.101 centos ip adress
* 컨테이너 연결 해제
docker network disconnect br0 myweb* 삭제
docker network rm br0
docker container run -itd --name alpine1 --network=bridge alpine ash
docker container run -itd --name alpine2 --network=bridge alpine ash
(가장 많이 사용하는 네트워크 타입)
- 기본 값이여서 굳이 타입을 지정하지 않아도 됨
- alpine 은 용량이 작은 리눅스임.
* 브리지 정보 확인
docker network inspect bridge
docker container attach alpine1
- 알파1, 알파2 가 ash 이고 백그라운드로 동작중인데, alpine1 에 바로 연결함
ip address
- IP 확인
ip route
- 게이트웨이 확인 (도커1번에 도커 0번 장치에 연결되어 있음) - 172.17.0.1
cat etc/resolv/conf
- dns 서버 확인
- IP 대신 Host 주소를 넣어서 사용
* 외부로 ping 테스트
3. 사용자 정의 bridge 네트워크
docker network create -d bridge alpinenet
docker container run -itd --name alpine1 --network=alpinenet --privileged alpine ash
docker container run -itd --name alpine2 --network=alpinenet --privileged alpine ash
docker container run -itd --name alpine3 --privileged alpine ash
docker network connect alpinenet alpine3
docker container run -itd --name alpine4 --privileged alpine ash
privileged : 시스템과 관련된 작업을 할 수 있음
- alpine3 은 네트워크가 두개임 (브리지와 알파인넷)
⚠️ alpinenet Network
⚠️ bridge Network
즉, 서로 다른 네트워크끼리는 통신할 수 없음
통신하게 하려면 apline3 이 라우터처럼 동작해야함.
✅ apline 1 접속 테스트
apline1 -> 2
-> 3
같은 네트워크 통신 가능
* 호스트 파일에 호스트 정보가 없어도 통신 가능- 자동 서비스 검색 기능
사용자 정의 네트워크에 연결된 컨테이너들은 IP 주소로 통신할 수 있을 뿐만 아니라 이름으로도 가능
기본 브리지 모드에서는 해당 기능은 없음.
사용자가 만든 브리지 모드에서만 활성화
다른네트워크 통신 불가
apline1 -> 4
✅ apline 3 접속 테스트
- 기본 브리지 모드에서는 이름 서비스를 제공하지 않으므로 이름으로 통신 불가 (호스트 파일에 추가 필요)
✅ apline 1 라우팅 설정
docker container attach alpine1
apk update
apk add openrc --no-cache
route add -net 172.17.0.0 netmask 255.255.0.0 gw 172.18.0.4(ctrl + pq 로 나와야함)
✅ apline 2 라우팅 설정
docker container attach alpine2
apk update
apk add openrc --no-cache
route add -net 172.17.0.0 netmask 255.255.0.0 gw 172.18.0.4
(ctrl + pq 로 나와야함)
✅ apline 4 라우팅 설정
docker container attach alpine4
apk update
apk add openrc --no-cache
route add -net 172.18.0.0 netmask 255.255.0.0 gw 172.17.0.2(ctrl + pq 로 나와야함)
a1 -> a4 Ping Test
- 서로 다른 네트워크를 사용하는 컨테이너끼리는 통신이 안되야하는게 맞지만,
라우터처럼 사용할 수 있는 중계기가 있다면 통신이 가능함
4. --link 옵션을 이용한 컨테이너 구성
docker container run -d --name mysql -v /dbdata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_PASSWORD=wordpress mysql:5.7
환경 변수 2개 설정
mysql 이미지 사용
docker container run -d --name wordpress \
--link mysql:mysql57 \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=wordpress \
-p 80:80 wordpress:5
워드프레스 이미지 구동
docker container exec -it wordpress /bin/bash
워드프레스 컨테이너에 bash 실행
apt-get update
- 저장소 정보 업데이트
apt-get -y install iproute2
- ping을 사용하기 위해 패키지 설치
'Cloud > Dock & Kubernetes' 카테고리의 다른 글
[docker#6] 리소스 제한 및 모니터링 (0) | 2025.02.28 |
---|---|
[docker#5] portainer 이용 (0) | 2025.02.28 |
[docker#3] 볼륨 (0) | 2025.02.22 |
[docker#2] 컨테이너 관리 (0) | 2025.02.22 |
[docker#1] 기본 명령어 (0) | 2025.02.20 |