DevOps/Docker

도커컴포즈에서 컨테이너 간 통신하기

rkrkrr0101 2024. 10. 8. 01:14

예전에 사용하던 --link는 deprecated되었다

그래서 대신 사용되는게 network다

이건 그 k8s의 서비스같은 개념으로,이름으로 통신할수있는 통신소,즉 dns같은 느낌이다

저기에 속한 모든 컨테이너들이 자기 이름으로 리버스프록시를 만들고,자기가 가지고있는 하위 컨테이너들에게 전달하는 느낌?로드밸런싱기능은 따로 구현해야한다고는 알고있다,원시 k8s서비스같은느낌인듯

 

version: '3'
services:
  whyprice: //이 이름으로 통신할수있음,ip대용
    image: localhost:5000/whyprice:0.9
    ports:
      - "8080:8080"
    env_file:
      - main.env
    networks:
      - app-network #얘가 사용할 네트워크
    depends_on:
      - mysqldb
  mysqldb: //이 이름으로 통신할수있음,ip대용
    image: mysql:8.0.39-debian
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 비번  # root 비밀번호 설정
      MYSQL_DATABASE: db명  # 생성할 데이터베이스 이름
      MYSQL_USER: 아이디  # 생성할 사용자 이름
      MYSQL_PASSWORD: 패스워드  # 사용자 비밀번호
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - app-network #얘가 사용할 네트워크

networks: #네트워크
  app-network:
    driver: bridge
volumes:
  mysql_data:
    external: true

 

이런식으로 서로간 같은 네트워크로 묶어준다음

jdbc:mysql://mysqldb:3306/why_price

이렇게 ip대신 이름을 넣어서 통신하면된다