1. host.docker.internal로 컨테이너 포트 매핑 하는 법
레디스를 운영체제에 설치해서 실행하는 방법과 별도의 컨테이너에 레디스 이미지를 받아 띄우는 방법이 있는데, 하나의 컨테이너 안에 가급적 하나의 프로세스를 두고 쓰는 것이 바람직하다. 데이터 일관성 문제와 컨테이너의 추가/삭제가 쉽기 때문이다. 이 방법을 택하려면 레디스 컨테이너를 띄워놓고 포트매핑으로 부모 호스트 머신에 링크를 걸어주는 식으로 사용한다. 이때 express app에서 나오는 6379는 host IP라고 지칭한다.
.env의 REDIS_URL을 redis://host.docker.internal:6379로 변경하면 된다. 그러면 부모 호스트 머신에서 이 주소를 발견하면 자동으로 연결할 수 있다. 포트매핑과 비슷하지만 포트매핑의 경우, 호스트에서 컨테이너로 접속할 때 사용하는 것이고, 이 경우는 컨테이너에서 호스트를 접속할 때 쓰는 것이며, 변경하고 당연히 다시 빌드를 해줘야 한다
2. docker-compose 개요
도커 컴포즈는 도커를 더 쉽게 오케스트레이션할 수 있게 해주는 방법이다.
version: "3"
services:
web:
build:
context:
dockerfile: Dockerfile.dev // 강의에서 production과 dev를 분리해서 사용
volumes: // 강의에서 nodemon 사용을 위한 docker volume 설정을 해줘서 추가됨.
- ./app/user/src/my-app/app
ports:
- "4000:4000"
env_file:
- .env
depends_on: // redis가 먼저 실행되고 app이 실행돼야 한다는 설정.
- redis
redis:
image: "redis:alpine" // 강의에선 redis 기본 이미지를 사용
이렇게 설정하고 docker-compose up 명령어를 이용해서 컴포즈에 설정해준 내용을 기반으로 다시 이미지를 생성할 수 있다. compose 파일에 .env를 직접 넣어줄 수도 있다. 최초에 생성할 때는 --build 옵션을 추가해서 만들어야 하지만, 이후에는 캐시된 이미지를 이용하기 때문에 빌드 옵션이 빠져도 된다.
도커 컴포즈에서 두 개의 컨테이너를 동시에 가동할 수 있다. 각각의 컨테이너를 관리할 필요 없이 모두 한번에 관리할 수 있기 때문에 편리하다. 그리고 docker-compose up -d 명령어로 백그라운드에서 가동할 수 있게 할 수도 있다. 이 경우에는 각각의 컨테이너를 따로 끄는 것이 아니라 docker-compose down 명령어로 끌 수 있다.
'내용 복습 > devOps' 카테고리의 다른 글
Error response from daemon: mkdir /var/lib/docker/overlay2/...-init: no space left on device (0) | 2025.01.23 |
---|---|
'도커 교과서' 1~2장 정리 (4) | 2024.11.02 |
Docker 개념 알아보기 - Dockerfile, Image, Container (0) | 2024.05.10 |
Github Actions - CICD (0) | 2024.05.09 |
AWS 기초 - https 쓰는 방법 (0) | 2024.05.08 |