6.docker-compose 실습 (container network)
-
image 생성 :
docker build . -t <image name>
-
image 확인 :
doocker images
- container 실행 :
docker run <옵션> <이름>
- container 실행 :
docker run <옵션> --name=<continer이름> <유명 이미지>:<tag>
- 이미 dockerhub에 올라와있는 유명한 image 들은 image를 빌드하지 않고 container를 다음과 같이 실행시키면 자동으로 image를 받아와 container를 형성함
docker container network
-
docker는 container에 내부 IP를 할당하는데, 종료시 변경될 수 있음.
-
container의 내부 IP는 container 끼리 통신 가능하고 외부망과 연결되려면 설정이 필요.
-
요소 3가지 (
ifconfig
로 확인)-
etho0 : 외부와 연결할 때 사용하는 IP가 할당된 Host network interface
- docker0 : Docker가 설치되면 host에 기본으로 생성되는 bridge
- host의 network(etho0)와 conainer의 network(veth)를 연결해줌
- 1개의 bridge 안에서 다수의 container와 연결해 줄 수 있음
- 다양한 bridge를 생성하는 것도 가능
- veth : container 내부 IP를 외부와 연결해 주는 가상 network interface
- container와 동시 생성
- veth와 etho0가 연걸됨으로써 외부와 통신이 가능해짐
-
둘의 연결을 bridge인 2번의 docker0가 담당
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:6eff:fe85:4458 prefixlen 64 scopeid 0x20<link> ether 02:42:6e:85:44:58 txqueuelen 0 (Ethernet) RX packets 205 bytes 11588 (11.5 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 39 bytes 3110 (3.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
container network 관련 command
-
목록 확인 :
docker network ls
- 네트워크 상세 :
docker inspect <network name>
- subnet 확인 : “Subnet”: “172.17.0.0/16”
- 새로운 bridge network 생성 :
docker network create <option> <network name>
docker network create --driver bridge new_bridge
- network 삭제 :
docker network rm <network name>
docker network rm new_bridge
-
특정 network로 container 생성 :
docker run -d -it --name=ubuntu2 --net new_bridge ubuntu
- 특정 container로 접속 :
docker exec -it <container_id_or_name> /bin/bash
- container에 새로운 network 적용 :
docker network connect <network name> <container name>
docker network connect new_bridge ubuntu1
- container에 network 삭제 :
docker network disconnect <network name> <container name>
docker network disconnect bridge ubuntu1
host network
- host의 network 환경을 그대로 사용할 수 있음
- 새로운 내부 IP를 할당 받을 필요 없음
--net host
를 사용- host 내부에서 application을 실행한 것과 같음
- 별도의 port forwarding 없이 localhost를 통해 접속할 수 있음
cf
--net
옵션에 특정 container의 이름을 넣어주면, 해당 container의 network를 공유