Docker Compose 네트워크(개발자를 위한 작동 방식)
Docker란 무엇인가?
Docker는 경량의 이동 가능한 컨테이너 내부에서 응용 프로그램의 배포 및 확장을 자동화하기 위해 컨테이너 기반 개념을 사용하는 오픈 소스 플랫폼입니다. 간단히 말하면, Docker 컨테이너는 모든 응용 프로그램 코드와 그 의존성을 개발자의 노트북에서 테스트 서버 또는 프로덕션 클라우드 서버까지 환경 전반에 걸쳐 하나의 단위로 묶습니다.

컨테이너는 가상 머신(VM)과 같은 전통적인 방법으로 작동하지 않습니다.왜냐하면 호스트 시스템의 운영 체제 커널을 공유하기 때문입니다. 따라서 컨테이너는 훨씬 더 효율적이며 시작 시간이 빠릅니다. 사실, Docker 컨테이너는 개발 주기 전반에 걸쳐 일관성 있는 동작을 보장합니다.
사실, Docker 이미지는 응용 프로그램 환경을 보유한 컨테이너 설명을 위한 템플릿입니다. 이 세트에는 컨테이너 수명 주기를 관리하기 위한 툴킷도 포함되어 있습니다. 예를 들어, 다중 컨테이너로 구성된 응용 프로그램을 오케스트레이션할 수 있는 Docker Compose가 있습니다. 또한 이미지를 공유하기 위한 레지스트리인 Docker Hub가 있습니다.
Docker Compose 네트워크란?
Docker Compose 네트워크는 같은 캡슐화된 환경 내에서 Docker Compose 응용 프로그램에서 실행되는 서비스들이 서로 통신할 수 있도록 합니다. 여러 서비스를 docker-compose.yml 파일에 정의하면 Docker Compose는 서비스들이 서로 통신할 수 있도록 서비스 이름을 호스트 이름으로 사용하여 기본 네트워크를 자동으로 생성합니다. 근본적으로 사용자가 네트워크를 정의하고 네트워크가 생성된 여러 서비스를 정의할 수 있게 합니다.
기본 브리지 네트워크: docker-compose up를 실행할 때 컨테이너에 대한 네트워크를 정의하지 않으면 Docker가 자동으로 브리지 네트워크를 생성합니다. 모든 컨테이너는 기본 드라이버 네트워크에서 서비스 이름을 호스트명으로 하여 서로 통신할 수 있습니다.
커스텀 네트워크: 이러한 옵션을 사용하면 사용자가 하나 또는 두 개의 맞춤형 네트워크를 정의하고 사용자 정의 네트워크로 더 추가할 수 있습니다. 컨테이너 포트 및 docker-compose.yml 파일 내에서 사용자 정의 네트워크를 정의할 수 있습니다. 이러한 네트워크에 서비스를 할당하여 컨테이너가 어떻게 통신할 수 있는지 제어합니다:
- 내부 네트워크는 서비스를 다른 서비스와 격리시킵니다.
- 다중 네트워크는 일부 서비스가 서로 통신할 수 있게 하면서 다른 서비스에는 접근을 차단합니다.
서비스 검색: 모든 서비스는 구성에서 이름과 동일한 호스트 이름을 얻습니다. 즉, 한 컨테이너에서 다른 서비스를 참조할 때 해당 서비스의 이름을 사용할 수 있습니다. 예를 들어, 웹 서비스에서 데이터베이스 컨테이너의 IP를 참조할 때 db를 사용할 수 있습니다.
네트워크 모드: 서비스에 대해 호스트, 브리지 또는 없음 모드를 설정할 수도 있습니다. 가장 흔히 사용되는 것은 브리지로, 컨테이너 트래픽을 격리합니다.
Docker 네트워크 드라이버란 무엇인가?
Docker 네트워크 드라이버는 컨테이너 간의 연결 및 통신을 설명하며, 다른 컨테이너 및 시스템과의 연결을 설명합니다. 다양한 사용 사례가 있으며, 네트워크 드라이버는 이러한 사례에 적용될 수 있으며, 각각의 격리 수준, 연결성 및 성능을 제공합니다. 각 네트워크 드라이버를 살펴보고 그 사용 사례를 설명하겠습니다.
Docker 네트워크 드라이버의 종류
브리지 (기본값)
내부 Docker 네트워크는 단일 호스트를 기반으로 컨테이너 간의 통신을 허용합니다. 네트워크를 지정하지 않고 컨테이너를 실행하면 Docker는 기본 브리지 네트워크를 사용합니다.
# Create a custom bridge network
docker network create --driver bridge my_bridge_network
# Run containers and connect to the custom network
docker run -d --name container1 --network my_bridge_network busybox sleep 3600
docker run -d --name container2 --network my_bridge_network busybox sleep 3600# Create a custom bridge network
docker network create --driver bridge my_bridge_network
# Run containers and connect to the custom network
docker run -d --name container1 --network my_bridge_network busybox sleep 3600
docker run -d --name container2 --network my_bridge_network busybox sleep 3600여기서 서비스 이름은 ping container1 및 container2와 같이 통신하는 데 사용될 수 있습니다.
호스트
호스트 드라이버를 사용하면 컨테이너는 호스트 네트워크 스택을 직접 공유하므로 자체 맞춤형 네트워크 격리를 가져오지 않습니다.
# Run a container using the host network
docker run -d --network host nginx# Run a container using the host network
docker run -d --network host nginxNGINX 컨테이너는 이제 호스트의 IP 및 네트워크 인터페이스를 공유하여 네트워크 격리를 우회합니다.
오버레이
여러 호스트에 걸쳐 컨테이너를 상호 연결하고 주로 Docker Swarm 또는 Kubernetes 환경에서 사용되며 물리적 또는 가상 머신을 통해 컨테이너를 안전하게 연결합니다.
# Create an overlay network for use in a Docker Swarm cluster
docker network create -d overlay my_overlay_network
# Deploy a service in the Swarm cluster
docker service create --name web --network my_overlay_network nginx# Create an overlay network for use in a Docker Swarm cluster
docker network create -d overlay my_overlay_network
# Deploy a service in the Swarm cluster
docker service create --name web --network my_overlay_network nginx이렇게 하면 여러 Docker 호스트에 걸쳐 확장할 수 있는 Swarm 클러스터에서 서비스를 생성합니다.
없음
이 없음 드라이버는 컨테이너의 네트워킹을 비활성화합니다. 이 컨테이너는 외부 네트워크 통신으로부터 완전히 격리됩니다.
# Run a container with no network
docker run -d --network none busybox sleep 3600# Run a container with no network
docker run -d --network none busybox sleep 3600busybox 컨테이너는 인터넷에 접근할 수 없으며 다른 컨테이너의 자체 네트워크나 외부 세계에 호출을 보낼 수 없습니다.
Macvlan
Macvlan 드라이버는 컨테이너가 네트워크에서 자체 MAC 주소를 가진 물리적 장치처럼 보이도록 하여 물리적 네트워크에 직접 접근할 수 있게 합니다.
# Create a Macvlan network
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 macvlan_network
# Run a container on the Macvlan network
docker run -d --network macvlan_network busybox sleep 3600# Create a Macvlan network
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 macvlan_network
# Run a container on the Macvlan network
docker run -d --network macvlan_network busybox sleep 3600IPvlan
IPvlan 드라이버는 Macvlan과 비슷하지만 Layer 2(MAC 주소)보다는 IP 주소 할당에 중점을 둡니다. 여러 컨테이너가 동일한 네트워크 인터페이스를 공유할 수 있습니다.
# Create an IPvlan network
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 ipvlan_network
# Run a container on the IPvlan network
docker run -d --network ipvlan_network busybox sleep 3600# Create an IPvlan network
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 ipvlan_network
# Run a container on the IPvlan network
docker run -d --network ipvlan_network busybox sleep 3600호스트의 Layer 2 이더넷 인터페이스와 네트워크를 공유하지만 다른 IP 주소를 가집니다.
커스텀 플러그인
Docker의 커스텀 플러그인은 타사 또는 사용자 개발 네트워크 드라이버로, Docker 기본 제공 기능보다 네트워크 기능상에 더 정교한 기능을 제공합니다. 타사 Docker 플러그인은 소프트웨어 정의 네트워킹과 같은 외부 네트워킹 솔루션 프레임워크와 통합하여 보안, 확장성 및 다중 호스트 네트워킹과 같은 기능을 개선할 수 있습니다. Docker는 네트워크 플러그인에 대한 다용도 아키텍처를 제공하여 네이티브 드라이버와 동일한 방식으로 플러그인을 설치하고 사용할 수 있습니다.
IronSecureDoc
IronSecureDoc for Docker는 개발자가 컨테이너화된 애플리케이션에 안전한 문서 처리 기능을 쉽게 추가할 수 있게 합니다. Docker를 사용하면 IronSecureDoc가 포함된 ASP.NET Core 애플리케이션을 배포 및 확장을 용이하게 하는 일관된 환경 내에 캡슐화할 수 있습니다. 실행하려면, IronSecureDoc 라이브러리와 필수 설치 스크립트 또는 구성 파일로 구성된 ASP.NET Core 애플리케이션을 작성한 Dockerfile을 구축합니다.

서비스 종속성, 환경 변수 및 매핑된 포트를 포함한 docker-compose.yml 파일도 포함되어 있어 이를 통한 접근을 제공합니다. 따라서 문서의 보안 작업이 더욱 관리하기 쉬워져 웹 애플리케이션이 개발 또는 생산에 사용된 환경 외부에서 효율적이고 효과적으로 실행될 수 있습니다. 문서 암호화 등에서 제공되는 모든 기능을 활용하려면 Docker의 경우와 같이 IronSecureDoc 설치 및 구성이 필요합니다.
IronSecureDoc 설치 및 실행
커맨드 프롬프트 또는 열린 터미널 창에서 다음 명령어를 실행하여 IronSecureDoc Docker 이미지를 저장소에서 가져옵니다.
# Pull IronSecureDoc Docker image
docker pull ironsoftwareofficial/ironsecuredoc# Pull IronSecureDoc Docker image
docker pull ironsoftwareofficial/ironsecuredoc
Docker 저장소에서 이미지를 가져온 후 다른 명령어를 사용하여 IronSecureDoc를 실행 중인 컨테이너로 시작할 수 있습니다.
# Run a container with network isolation and environment variables
docker container run --rm -p 8080:8080 \
-e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> \
-e ENVIRONMENT=Development \
-e HTTP_PORTS=8080 \
ironsoftwareofficial/ironsecuredoc:latest# Run a container with network isolation and environment variables
docker container run --rm -p 8080:8080 \
-e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> \
-e ENVIRONMENT=Development \
-e HTTP_PORTS=8080 \
ironsoftwareofficial/ironsecuredoc:latest위의 Docker 실행 명령어는 IronSecureDoc의 컨테이너 인스턴스를 가져올 것입니다. 브리지 네트워크는 네트워크 격리를 위해 가정됩니다. 또한 http://localhost:8080을 통해 컨테이너 내부에 노출된 서비스에 외부에서 접근할 수 있도록 -p 8080:8080 플래그를 사용하여 가능합니다; 이것은 컨테이너 네트워크의 8080 포트에서 실행 중인 내부 서비스를 호스트 네트워크의 8080 포트에 노출시킵니다.
컨테이너는 기본적으로 Docker의 브리지 네트워크에서 실행되므로 포트 매핑을 통해 노출하지 않는 한 다른 컨테이너와 외부 세계로부터 자신을 격리합니다. 여기서 그렇게 합니다. 전달된 환경 변수 (IronSecureDoc_LicenseKey, ENVIRONMENT, HTTP_PORTS)는 컨테이너에서 애플리케이션의 동작을 구성합니다. --rm 플래그는 컨테이너가 중지될 때 제거되도록 합니다.
이 설정의 장점은 브리지 네트워크가 컨테이너를 격리하고 내부적으로 서비스를 연결하는 반면, 포트 매핑은 컨테이너의 서비스로 호스트 머신으로부터 외부 트래픽을 브리징하여 접근을 용이하게 한다는 점입니다.

IronSecureDoc를 Docker Network Port와 함께 사용하기
IronSecureDoc의 REST API는 사용자가 문서를 설치 후 실행할 때 수정, 인증 및 암호화할 수 있도록 합니다. 자세한 단계는 여기에서 문서를 참조하십시오.
예를 들어, 문서를 암호화하려면 IronSecureDoc API에 POST 요청을 수행할 수 있습니다:
# POST a document for encryption using cURL
curl -X 'POST' \
'http://localhost:8080/v1/document-services/pdfs/encrypt?user_password=demo' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'pdf_file=@test.pdf;type=application/pdf'# POST a document for encryption using cURL
curl -X 'POST' \
'http://localhost:8080/v1/document-services/pdfs/encrypt?user_password=demo' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'pdf_file=@test.pdf;type=application/pdf'이 명령어는 자동으로 문서를 IronSecureDoc로 전송하여 적절한 방식으로 암호화합니다.
결론
Docker 네트워킹은 애플리케이션 상호작용 및 다양한 애플리케이션 요구에 맞춘 드라이버 및 구성으로 다른 애플리케이션과 외부 세계와의 의사소통을 제어하는 데 중요합니다. 기본 브리지 네트워크 구성은 IronSecureDoc 애플리케이션에 의해 예시된 대로 포트 매핑을 통해 호스트 시스템에 서비스를 노출시켜 기본적인 격리를 허용합니다. 이는 컨테이너화된 애플리케이션의 관리 및 구성을 용이하게 하여 애플리케이션의 운영 유연성과 확장성을 향상시킵니다.
IronSecureDoc는 고급 문서 처리 도구로, Docker의 컨테이너화 기능을 활용하여 빠르고 신뢰할 수 있는 애플리케이션 배포를 가능하게 합니다. 이것은 여러 환경에 대한 지원을 보장하며 Docker 네트워킹을 IronSecureDoc와 원활하게 통합하여 애플리케이션 통합을 쉽고 접근 가능하며 관리할 수 있도록 만듭니다.
결과적으로, 작업 흐름을 간소화하고 효율성을 향상하며 특히 문서를 처리할 때 운영을 향상시킵니다. 궁극적으로 이는 개발 및 배포 경험을 풍부하게 하여 현대 소프트웨어 애플리케이션에 가치 있는 솔루션이 됩니다. IronSecureDoc 라이선싱에 대한 자세한 정보는 이 페이지를 참조하십시오. Iron Software의 많은 제품 제공에 대해 더 자세히 알고 싶으면 이 링크를 따라 주십시오.
자주 묻는 질문
Docker Compose 네트워크는 서비스 간 통신을 어떻게 촉진합니까?
Docker Compose 네트워크를 사용하면 Docker Compose 애플리케이션 내의 서비스들이 서비스 이름을 호스트 이름으로 사용하여 통신할 수 있으므로, 동일한 캡슐화된 환경 내에서 상호 작용이 가능합니다.
Docker Compose에서 기본 브리지 네트워크의 역할은 무엇인가요?
Docker가 자동으로 생성하는 기본 브리지 네트워크는 특정 네트워크가 정의되지 않은 경우 컨테이너가 서비스 이름을 호스트 이름으로 사용하여 서로 통신할 수 있도록 합니다.
사용자 지정 네트워크는 Docker Compose 애플리케이션의 성능을 어떻게 향상시킬 수 있을까요?
Docker Compose의 사용자 지정 네트워크는 docker-compose.yml 파일에 정의된 서비스 간의 격리 및 선택적 통신을 허용하여 애플리케이션 성능을 향상시킵니다.
Docker 네트워크 드라이버에는 어떤 유형이 있으며, 각각의 용도는 무엇인가요?
Docker 네트워크 드라이버(bridge, host, overlay, none, Macvlan, IPvlan 등)는 다양한 수준의 격리, 연결성 및 성능을 제공하여 애플리케이션의 요구 사항에 맞춰 사용할 수 있습니다.
오버레이 네트워크 드라이버는 어떻게 다중 호스트 통신을 지원합니까?
오버레이 네트워크 드라이버는 여러 호스트에 걸쳐 컨테이너를 연결하여 가상 네트워크를 통해 안전한 통신을 제공하며, Docker Swarm 또는 Kubernetes 환경에서 일반적으로 사용됩니다.
컨테이너 환경에서 안전한 문서 처리가 중요한 이유는 무엇입니까?
IronSecureDoc과 같은 안전한 문서 처리는 컨테이너 환경에서 중요합니다. Docker의 네트워킹 기능을 활용하여 애플리케이션을 효율적으로 캡슐화, 배포 및 확장할 수 있기 때문입니다.
Docker를 사용하여 안전한 문서 처리를 어떻게 설정할 수 있습니까?
Docker 컨테이너 내에 IronSecureDoc과 같은 도구를 배포하고 Dockerfile 및 docker-compose.yml 통해 네트워크 격리를 위한 환경을 구성하면 Docker에서 안전한 문서 처리를 설정할 수 있습니다.
Docker 환경에서 REST API를 통해 문서를 암호화하려면 어떤 단계가 필요합니까?
Docker 환경에서 REST API를 통해 문서를 암호화하려면, 컨테이너화된 환경에서 cURL과 같은 도구를 사용하여 문서와 매개변수를 포함한 POST 요청을 보안 문서 처리 API로 전송합니다.
Docker의 네트워킹 기능은 애플리케이션 확장성을 어떻게 향상시킬 수 있을까요?
Docker의 네트워킹 기능은 서비스 간의 상호 작용 및 통신을 효율적으로 관리하여 애플리케이션 확장성을 향상시키고 워크플로 및 배포 환경을 간소화합니다.
IronSecureDoc을 기존 Docker 시스템에 통합하는 과정은 무엇입니까?
Docker 명령어를 사용하여 IronSecureDoc을 기존 Docker 시스템에 통합하고, 포트 매핑 및 환경 변수를 활용하여 일관된 배포 및 확장을 보장하십시오.








