티스토리 뷰

728x90

회사에서 사이드 프로젝트(?)로 소소하게 도커를 다룰 일이 있었습니다.

도커 스터디도 하고 컨테이너를 띄우는건 얼추 했지만 Dockerfile을 정의하고 목적에 맞게 도커 이미지를 빌드하는 게 처음이었어서

이번에 알게된 내용들을 간단히 정리합니다.


 

Dockerfile과 docker compose의 관계

  • Dockerfile : 도커 이미지 빌드를 위한 레시피같은 것
  • docker compose : 도커파일을 실행하는 커맨드의 집합 (ex. docker run, docker build를 한꺼번에 하는 역할)

 

컨테이너 IP

각 컨테이너에는 독립된 랜덤 IP가 부여된다.

이 ip는 컨테이너를 띄울 때마다 바뀌는 것 같다.

docker inspect {container_name} 명령어로도 확인 가능

(JSON데이터가 너무 길어서 docker desktop에서 보는 게 편리)

 

컨테이너 네트워크

docker compose로 실행할 경우 하나의 네트워크로 묶인다

명시적으로 설정하지 않을 경우 이름은 ‘default’, drive는 bridge

 

컨테이너를 docker run 명령어로 각각 띄운 경우
docker compose로 띄운 경우. docker compose를 정의한 workspace의 이름으로 묶여있음

 

 

 

docker compose에서 네트워크를 명시적으로 지정하는 법

version: '3'

services:

  app1:
    container_name: app1
    image: myImage:v1
    ports:
      - "8081:8081"
    networks:
      - myNetwork # 밑에 정의한 네트워크의 이름

  app2:
    container_name: app2
    image: myImage:v2
    ports:
      - "8082:8081"
    networks:
      - myNetwork

  nginx:
    container_name: nginx
    image: nginx:stable-alpine-slim
    ports:
      - "80:80"
    volumes:
      - ./nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - myNetwork

networks:
  myNetwork: # 네트워크 이름 지정
    driver: bridge

 

 

같은 네트워크에 있는 컨테이너 간 통신

같은 네트워크에 있는 컨테이너끼리 통신할 때는 호스트 포트가 아닌 컨테이너의 포트로 통신한다.

docker compose로 띄운 3개의 컨테이너 A, B, C가 있다

각각 포트는 8081:8081, 8082:8081, 80:80으로 정의하였다

A와 B는 같은 네트워크 안에서 컨테이너 끼리는 8081로 통신하고,

호스트 외부와 통신할 경우 A는 8081, B는 8082로 통신한다.

728x90
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함