Docker0 란?
- virtual ethernet bridge : 172.17.0.0/16
- L2 통신 기반
- container 생성 시 veth 인터페이스 생성(sandbox)
- 모든 container는 외부 통신을 docker0를 통해 진행
- container running 시 172.17.X.Y로 IP 주소 할당
- static IP 할당 불가능
- iptables를 통해 NAT, Port-forwarding 지원
- ip addr command로 확인 가능
Docker port-forwarding
- conatiner port를 외부로 노출시켜 외부 연결 허용
- iptables rule를 통한 port 노출
- -p hostPort:containerPort
- -p containerPort : host에는 random port가 지정
- -P :: dockerfile에서 expose되어 있는 port가 지정
- iptables -t nat -L -n -v 통해 확인 가능
User-define bridge network 생성 예시
- static IP 할당 가능
docker network create --driver bridge \
--subnet 192.168.100.0/24 \
--gateway 192.168.100.254 \
mynet
docker network ls
[ Hands - on ]
Container network 사용하기
- docker0가 bridge network인 것을 확인
apt-get install -y bridge-utils
brctl show
- sandbox를 통해서 container의 network 환경을 구성 (docker inspect를 통해 확인 가능)
Container port 외부로 노출하기
- -p hostPort:containerPort의 경우
- host port : 80 port
- container port : 80 port
docker run -d -p 80:80 --name web1 nginx
- -p containerPort 의 경우
- host port : random port
- container port : 80 port
docker run -d -p 80 --name web2 nginx
- -P 의 경우
- host port : random port
- container port : dockerfile에 expose로 설정된 port
docker run -d -P --name web3 nginx
User-defined network 구성하기
- driver의 default는 bridge
- subnet의 default는 172.18.0.0/24
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet
- user-defined network 확인
docker network ls
docker inspect mynet
- user-defined network와 static ip를 사용하는 container 생성
docker run -it --name c1 --net mynet --ip 192.168.100.100 busybox
Container service 운영 - 1
- Mysql dbserver container 구축
docker run -d --name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_PASSWORD=wordpress mysql:5.7
- Wordpress container 구축
- --link 경우 link할 container 이름 : alias
docker run -d --name wordpress --link mysql:mysql -e WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4
- http://localhost 로 생성 확인
- host에 wordpress 연동 database 생성 확인
Container service 운영 - 2
- 실습할 디렉토리 생성 및 이동
mkdir genid
cd genid
- rig, boxex command를 통한 메세지를 작성하는 container 생성
cat >> genid.sh << EOF
#!/bin/bash
mkdir -p /webdata
while true
do
/usr/bin/rig | /usr/bin/boxes -d boy > /webdata/index.html
sleep 5
done
EOF
cat >> dockerfile << EOF
FROM ubuntu:latest
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"]
EOF
docker build -t genid:latest .
docker run -d -v /webdata:/webdata --name genid genid:latest
- nginx container 생성
docker run -d -v /webdata:/usr/share/nginx/html -p 80:80 --name nginx nginx:latest
- service 확인
curl localhost
참고 :
https://www.youtube.com/watch?v=jOX80bXND2w&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=21
https://www.youtube.com/watch?v=CXrrkl4Zamc&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=22
'INFRA > DevOps' 카테고리의 다른 글
[Docker] Docker-compose를 사용하여 빌드부터 운영 (0) | 2022.07.25 |
---|---|
github-action과 aws codedeploy를 이용해 ec2에 배포하기 (0) | 2022.07.20 |
Github의 이해 3 (0) | 2022.07.15 |
Terraform으로 Aws Infra 구성하기 (기초) (0) | 2022.07.13 |
Github의 이해 2 (0) | 2022.07.12 |
댓글