[Docker] 컨테이너와 호스트 머신 간 통신하는 방법 한 번에 정리하기
·
Docker
컨테이너와 호스트 머신 간 통신 시 생기는 문제우리가 로컬에서 여러 애플리케이션을 실행하면, 해당 애플리케이션들과 통신하기 위해 localhost를 사용한다. 하지만, 컨테이너 위에서 실행되는 애플리케이션은 격리된 네트워크망 내부에 있기 때문에 localhost를 사용하면 호스트 머신에서 실행되는 애플리케이션과 통신하지 못한다. 호스트 머신에서 실행 중인 웹 애플리케이션과 Mongo DB의 통신을 생각해보자. Mongo DB가 27017번 포트를 점유해 실행된다고 할 때, 웹 애플리케이션에서 Mongo DB에 접속하기 위해서는 다음 주소를 사용하면 된다.mongodb://localhost:27017/[데이터 베이스 이름] 하지만 컨테이너 위에서 실행 중인 웹 애플리케이션과 호스트 머신에서 실행 중인 Mo..
[Docker] docker network 사용해 컨테이너 간 통신하는 방법 완벽 정리
·
Docker
컨테이너간 통신컨테이너는 외부 애플리케이션 혹은 호스트 머신과는 자유롭게 통신할 수 있지만, 컨테이너 간에는 기본적으로 서로 통신할 수 없다. 컨테이너끼리 통신할 수 있도록 하기 위해서는 컨테이너 내부에 네트워크를 만든 후 통신할 컨테이너들이 같은 네트워크에 속해 있도록 해야 한다. 지금부터 이 방법을 알아보자. Docker의 네트워크 드라이버 종류와 bridge 드라이버Docker는 다양한 네트워크 드라이버를 지원한다. 대표적으로 bridge, host, none 드라이버가 있으며 이 외에도 overlay, macvlan 같은 드라이버가 있다. 하지만, 대부분의 경우는 bridge를 사용해 통신하며 이곳에서는 bridge 드라이버를 사용하는 방법에 대해 다룬다.bridge 드라이버는 Docker의 기본..
[Docker] Dockerfile내부, .env 파일 혹은 터미널을 사용해 환경 변수 설정하는 방법 한 번에 정리하기
·
Docker
Docker의 환경 변수Docker는 컨테이너를 실행하면서 환경 변수를 쉽게 설정하고 관리할 수 있는 방법을 제공한다. 환경 변수는 애플리케이션의 동작을 제어하거나, 민감한 정보(예: 데이터베이스 연결 정보, API 키 등)를 외부에서 주입할 때 유용하며, Docker에서는 이를 Dockerfile내부, .env 파일 혹은 터미널을 통해 설정할 수 있도록 한다. 지금부터 각 방법을 살펴보자. Docker 환경 변수 설정하기Dockerfile에 설정하기Dockerfile에 환경 변수를 설정하기 위해서는 다음과 같이 사용하면 된다.ENV [KEY] [VALUE] 예를 들어 PORT라는 환경 변수를 8080으로 설정하고 싶은 경우 다음과 같이 사용하면 된다.# 환경변수 설정ENV PORT=8080 .env ..
[Docker] .dockerignore 사용해 컨테이너에 복사되지 말아야 할 파일 정의하기
·
Docker
.dockerignore을 사용하지 않을 때의 문제점앞선 글 에서 만들어진 컨테이너 내부를 보면 다음과 같은 파일들이 추가된 것을 볼 수 있다. 이 중 build 폴더와 .git 폴더 그리고 .idea 폴더는 내부에서 자동으로 생성되거나 스프링 앱을 실행하는데 전혀 사용되지 않는 폴더들로 컨테이너로 복사하지 않아도 된다. 이런 폴더들을 복사하지 않기 위해 Dockerfile에서 COPY를 사용할 때 세밀하게 제어해도 괜찮지만, 가장 좋은 방법은 .dockerignore 파일을 사용하는 것이다. .dockerignore 사용해 복사되지 말아야 할 파일과 폴더 정의하기.dockerignore는 git의 .gitignore과 매우 비슷하다. 단순히 내부에 컨테이너로 복사되지 말아야 하는 경로나 파일을 추가하면..
[Docker] Bind Mount 통해 호스트 머신의 경로를 컨테이너 경로와 연결하기
·
Docker
Bind Mount의 필요성Docker는 컨테이너화된 애플리케이션을 실행할 때 데이터의 유연한 관리와 공유를 지원하기 위해 여러 데이터 관리 방법을 제공한다. 대표적으로 앞서 다룬 Anonymous Volume과 Named Volume이 있다. 하지만 이 두 볼륨은 볼륨을 생성해 컨테이너의 디렉토리와 연결하는 방식을 사용하며, 호스트 머신의 경로를 컨테이너의 디렉토리와 연결하지는 못한다.하지만 개발을 하다 보면, 호스트 머신의 변경 사항이 곧바로 애플리케이션에 반영돼야 하는 경우가 있다. 이런 문제를 해결하기 위해 Docker는 Bind Mount라는 기능을 제공한다. Bind Mount는 호스트 머신의 디렉터리를 컨테이너의 특정 경로에 직접 연결해 데이터를 공유하거나 관리할 수 있도록 하는 기능으로, ..