본문 바로가기
Programming

[Docker] Docker Compose 사용법 (도커 네트워크 구성)

by 개발자 염상진 2022. 7. 28.

Docker Compose 사용 이유

 

도커(Docker)에서 이미지를 가져와 컨테이너를 실행할 수 있습니다. 도커를 사용하는 근본적인 이유는 컨테이너별로 독립된 공간을 제공하고, 배포를 유연하게 도와주기 때문입니다. 또한 개발환경과 실행환경을 일치시키는데, 상당한 노력을 줄여주고 있습니다.

도커 컨테이너를 실행하면 개별적인 공간이 마련되는데, 만약 2개 이상의 컨테이너를 하나의 공간(Network)에서 실행해야 하는 경우가 있습니다. 이 때 사용하는 방법이 Docker NetworkDocker Compose 입니다. 

 

 

예를 들어 웹 서비스를 배포하기 위해서는 Server와 Client 그리고 Database가 한번에 동작해야 합니다. 개별적으로 Nginx 이미지로 클라이언트 컨테이너를 만들고, Node 이미지로 서버 컨테이너를 만들고, Mysql 이미지로 DB 컨테이너를 만들어 하나의 네트워크 공간에서 컨테이너들을 상호작용 가능하게 만듭니다.

 

Docker Compose 사용 방법

 

우선 2개의 컨테이너를 가지고 Docker Compose 파일을 생성합니다. 예제에 사용할 이미지는 nginx를 기반으로 한 sebcontents/client과 node 이미지를 기반으로 한 sebcontents/server 이미지 입니다. 각각 컨테이너가 생성되고, localhost:8080으로 접속하면 client 컨테이너로 접속되고 클라이언트 및 서버가 한개의 네트워크에 연결됩니다.

 

① docker-compose.yaml 파일을 생성합니다.

먼저 여러개의 이미지와 컨테이너를 담은 compose 파일을 생성합니다. docker-compose 에 대한 자세한 내용은 공식 문서를 확인해야 합니다. 

version : '3.8'

services:
        nginx:
                image: sebcontents/client
                restart: 'always'
                ports : 
                  - "8080:80"
                container_name : client
        
        node: 
                image : sebcontents/server
                restart : 'always'
                ports: 
                  - "5000:3000"
                container_name : server

 

 

② yaml 파일을 실행합니다.

docker compose는 명령어는 크게 3가지 입니다.

/* 컨테이너 실행 */
$ sudo docker compose up

/* 컨테이너를 백그라운도 실행 */
$ sudo docker compose up -d 

/* 컨테이너를 종료 */
$ sudo docker compose down

/* 특정 이미지만 컨테이너로 실행 */
$ sudo docker compose up {image}

 

docker-compose.yaml 파일이 위치한 디렉토리에서 컨테이너 실행 명령 sudo docker-compose up 을 실행합니다.

③ Docker Network 확인

docker compose 파일을 실행하면 client와 server 컨테이너를 담은 새로운 네트워크가 생성됩니다. 네트워크 조회 명령어는 다음과 같습니다.

$ sudo docker network ls

 

네트워크 이름을 지정하지 않으면 docker compose 파일을 담고 있는 디렉토리 명이 네트워크 이름이 됩니다. 네트워크 정보를 보는 명령은 다음과 같습니다.

$ sudo docker network inspect {network name}

 

Driver는 bridge로 구성되어 있고, containers 항목에 docker compose 파일에 작성했던 client와 server 2개의 컨테이너가 기입되어 있습니다. client와 server는 1개의 네트워크에서 통신이 가능하게 됩니다.

[
    {
        "Name": "01_compose_default",
        "Id": "d02e48ac15f32ce72273a9993d5b54a9ab7abb8d5cc8b986beba347a739a1fdd",
        "Created": "2022-07-28T18:06:36.51638927+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.22.0.0/16",
                    "Gateway": "172.22.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0570bb73ce54260d3b7976a682be49b70506054c85900210e001190c7471e634": {
                "Name": "client",
                "EndpointID": "a9aa8142a72d8456b52750e9c2924aba28d6c1c5e65dcda6678ccd5a089ef628",
                "MacAddress": "02:42:ac:16:00:02",
                "IPv4Address": "172.22.0.2/16",
                "IPv6Address": ""
            },
            "05e23f6fa7f5b8bc4456fc64892ebb0988a3dc63bb4a9e15a6607a3ffb5b817d": {
                "Name": "server",
                "EndpointID": "136f6fddc37992429725e044f2c805011dfc0b509c2e6e7295ae0ecdd5513a8c",
                "MacAddress": "02:42:ac:16:00:03",
                "IPv4Address": "172.22.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "01_compose",
            "com.docker.compose.version": "2.6.0"
        }
    }
]

 

 

docker compose에 volumes를 사용해 로컬과 컨테이너에서 동시에 사용할 수 있는 volume directory를 사용할 수 있습니다.

docker volume 공식 문서

 

docker compose로 여러개의 컨테이너들을 가지고 네트워크를 구성하는 방법과, 직접 네트워크를 생성해서 컨테이너를 추가하는 방법을 사용할 수도 있습니다.

네트워크 생성 참고 사이트

 

 

 

 

[Docker] 도커(Docker) 이미지 만들기 2가지 방법

도커(Docker) 이미지? Docker Hub에서 필요한 이미지를 가져와 개발 환경을 구성할 수 있습니다. 하지만 해당 이미지에 원하는 모든 기능이 구현되어 있지 않은 경우에는 따로 이미지를 만들어서 사

about-tech.tistory.com

 

 

[Docker] 도커(Docker) 사용법

도커(Docker)란? 도커(Docker)는 리눅스 컨테이너를 기반으로 소프트웨어의 격리성을 제공하고 배포를 유연하게 해주는 오픈소스 툴입니다. 도커를 사용하면 실행환경을 일치시킬 수 있고, 네트워

about-tech.tistory.com

 

 

[Docker] 도커 사용하는 이유?

컨테이너 사용 배경? 부산항에서는 무역에 필요한 물동량을 컨테이너를 이용해 처리한다. 대형 트럭이 싣고 전국 구석구석 누비는 컨테이너가 존재하지 않는다면 재래식 방법으로 현재와 같은

about-tech.tistory.com

 

댓글