![[Docker/기초] Docker 네트워크 (3)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0RISm%2FbtsK84aYayI%2Fe27k2GVRWCUvmcTkWvoskk%2Fimg.png)
이번글의 docker 실행 방식은 다음을 따른다.
- DockerFile을 만들어서 커스텀 Dockerfile 만들기
이떄 기본 이미지를 dockerhub에서 받아오고 커스터마이징 한다. - 1번에서 만든 Dockerfile을 사용해서 docker-image 빌드하기
- network 설정 추가 알아보기
- docker-compose 명령어
이번글에서 설명하는 내용은 3번이다.
1, 2 번의 글을 선행학습 해야 보기 편할 것이다.
[Docker/기초] Docker-comopse 파일 만들기 (version 3) (2)
이번글의 docker 실행 방식은 다음을 따른다.DockerFile을 만들어서 커스텀 Dockerfile 만들기이떄 기본 이미지를 dockerhub에서 받아오고 커스터마이징 한다.1번에서 만든 Dockerfile을 사용해서 docker-image
naturecancoding.tistory.com
[Docker/기초] Docker File 만들기 (1)
이번글의 docker 실행 방식은 다음을 따른다.DockerFile을 만들어서 커스텀 Dockerfile 만들기이떄 기본 이미지를 dockerhub에서 받아오고 커스터마이징 한다.1번에서 만든 Dockerfile을 사용해서 docker-image
naturecancoding.tistory.com
3. Network
Network는 왜 씀?
컨테이너끼리의 통신을 설정하고 제어하는 중요한 역할을 한다. 컨테이너가 특정 네트워크를 사용함으로써 서로 안전하게 통신하거나 외부와 연결될 수 있다.
Docker 네트워크 종류
bridge (기본 네트워크)
기본적으로 컨테이너 간 통신이 가능한 가상 네트워크이다.
호스트와는 분리된 독립적인 네트워크를 제공한다.
그러기에 왜부로 port를 열필요가 없어진다. ( ports: - "3100:3100" 이런 설정이 불필요해짐)
아래는 예시코드이다.
Port를 외부로 열필요 없이 네트워크로 통신하는 방식
version: "3.8"
services:
loki:
image: grafana/loki:latest
command: -config.file=/etc/loki/local-config.yaml
networks:
- monitoring
promtail:
image: grafana/promtail:latest
command: -config.file=/etc/promtail/config.yaml
networks:
- monitoring
volumes:
- /var/log:/var/log
networks:
monitoring:
driver: bridge
promtail은 로그를 수집해서 loki로 api통신을 통해 보내 loki는 그걸 저장한다. 대충 이렇게 이해하자
여기서 중요한점은 둘다 monitoring이라는 네트워크를 사용하고 있다. 외부로 port를 공개하지 않았기 때문에 외부에서는 promtail로 접근할수 있는 방법이 없고 (컨테이너안으로) loki로 접근할수 있는 방법도 없다.
server:
http_listen_port: 9080
clients:
- url: http://loki:3100/loki/api/v1/push
위코드는 promtail에서 loki의 어떤 url로 보낼지 정하는 방식인데 url를 보면 ip주소에 컨테이너 이름을 작성해서 통신할수 있다.
version: "3.8"
services:
loki:
image: grafana/loki:latest
command: -config.file=/etc/loki/local-config.yaml
ports:
- "3100:3100" # 호스트의 3100 포트
networks:
- monitoring
이렇게 추가적으로 진짜 필요한 부분만 열어서 호스트에서 접근할수 있게하는 방식을 사용하면
promtail은 사용자가 접근할 수 없지만 loki에는 api를 통해서 쿼리를 쏴 데이터를 얻을 수 있다.
host
컨테이너가 호스트의 네트워크를 그대로 사용하게 된다. 이는 성능이 중요하거나 port매핑이 필요 없을때 유용하게 사용할 수 있다.
docker run --network host my_container
물론 보안성이 매우 떨어지니 사용하지 않는 것이 좋다.
none
port를 열지 않으면 컨테이너는 완전 격리된 상태가 된다.
services:
app:
image: alpine:latest
network_mode: "none"
command: ping google.com
이는 Docker Desktop에서 사용하는 host.docker.internal라는 특별한 도메인을 통해서도 접근이 불가능해진다.
overlay
여러 Docker 호스트 간의 네트워크를 생성한다.
docker network create --driver overlay my_overlay_network
여러 서버같에 컨테이너간 통신을 가능하게 해준다.
이는 논리적인 네트워크 계층이며 트래픽을 암호화하고 물리적으로 서로 다른 곳에 있는 컨테이너끼리 통신하게 해준다.
분산 서비스 환경에서 사용하면 좋다.
macvlan
컨테이너가 실제 물리 네트워크의 IP 주소를 사용할 떄 사용한다.
docker network create \
--driver macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
my_macvlan_network
고급 기능임으로 이런게 있다 정도만 알아두자
'Deployment > Docker 기초' 카테고리의 다른 글
[Docker/기초] Docker-compose 명령어 & 설치 (4) (0) | 2024.12.05 |
---|---|
[Docker/기초] Docker-comopse 파일 만들기 (version 3) (2) (0) | 2024.12.05 |
[Docker/기초] Docker File 만들기 (1) (0) | 2024.12.05 |
[Docker/기초] Volume (0) | 2024.02.15 |
[Docker/기초] Docker 상위 커맨드 ls 정리 (0) | 2024.02.14 |
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간