1. docker-compose networks
도커 네트워크는 컨테이너 사이에 네트워크가 필요할 때 사용한다. docker-compose 스크립트(docker-compose.yml) 관점에서 볼 때 networks 키워드를 이용해서 생성하고 지정한다. 기본적인 사용 방법을 예를 통해 살펴보자.
version: "3"
services:
app:
image: ubuntu:20.04
networks: # 네트워크 지정
- app_network
db:
image: mysql
networks: # 네트워크 지정
- app_network
networks: # 네트워크 생성
app_network:
docker-compose.yml 파일에서 networks 키워드는 위치에 따라 ①네트워크 생성, ②네트워크 지정 두 가지 기능을 갖는다.
①네트워크 생성
먼저 앞에 공백 문자가 없는 top-level networks 키워드는 네트워크를 생성할 때 사용된다. 생성하고자 하는 네트워크만 지정하고 별도의 옵션을 설정하지 않으면 기본 값으로 네트워크를 생성한다. 특별한 경우가 아니면 옵션을 지정하지 않고 default 네트워크를 사용한다. 네트워크를 생성할 때 설정할 수 있는 다양한 옵션들을 아래 docker-compose 문서에서 찾아볼 수 있다.
https://docs.docker.com/compose/networking/
Networking in Compose
docs.docker.com
②네트워크 지정
컨테이너 설정에 기술하는 networks 키워드는 컨테이너에 연결할 네트워크를 지정할 때 사용된다. 위 예의 docker-compose 스크립트의 app 컨테이너와 mysql 컨테이너는 app_network라는 네트워크로 연결된다.
docker-compose 스크립트를 실행하고 docker network 명령을 이용하면 생성된 네트워크를 확인할 수 있다.
$> docker-compose up
$> docker network ls
docker network inspect <네트워크 이름> 명령어를 사용하면 네트워크의 자세한 정보들을 볼 수 있다.
$> docker network inspect '네트워크 이름'
docker-compose로 실행된 컨테이너들을 삭제(down)하면 생성된 네트워크도 삭제된다.
$> docker-compose down
$> docker-compose ls
2. docker-compose volumes
network 옵션과 함께 가장 많이 사용되는 옵션이 데이터 볼륨(≒디렉토리)을 생성하거나 지정하는 volumes 옵션이다. volumes 옵션도 ①생성과 ②지정 두 가지 기능이 있다. 예를 먼저 살펴보자.
version: "3"
services:
app:
image: ubuntu:20.04
volumes:
- app_volume:/home
volumes:
app_volume:
name: volume_for_a_app
① volume 생성
top-level(앞에 공백 문자가 없는 경우) volumes 키워드는 볼륨 생성에 사용된다. 볼륨을 생성할 때도 다양한 옵션들을 지정해 줄 수 있고 특별히 지정하지 않는 경우 default 값을 이용해서 생성된다. 볼륨 생성에 사용되는 다양한 옵션들을 docker-compose 문서에서 확인할 수 있다.
https://docs.docker.com/compose/compose-file/compose-file-v3/#volume-configuration-reference
Compose file version 3 reference
docs.docker.com
이렇게 생성된 볼륨을 docker volume 명령어로 확인할 수 있다.
$> docker volume ls
생성된 볼륨은 호스트의 /var/lib/docker/volumes/ 아래에 위치한다.
도커 네트워크와 마찬가지로 생성된 볼륨에 대한 자세한 정보를 docker volume 명령어로 확인할 수 있다.
$> docker volume inspect '볼륨 이름'
② volume 지정
컨테이너 설정 섹션에 volumes 옵션을 기술하면 컨테이너와 볼륨을 연결할 수 있다. '호스트 볼륨:컨테이너 볼륨'순서로 기술한다. 예를 하나 살펴보자.
version: "3.9"
services:
db:
image: db
volumes:
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
- data-volume:/var/lib/backup/data
volumes:
data-volume:
위 스크립트는 data-volume이라는 볼륨을 생성하고 db, backup 두 컨테이너가 이 data-volume을 공유하는 구조를 생성한다. db의 데이터를 일정한 주기로 backup하는 응용에 이와 같은 구조를 활용할 수 있다.
네트워크와 달리 docker-compose down 명령으로 컨테이너를 중지시키고 삭제한 후에도 생성된 볼륨은 사라지지 않는다. 데이터 볼륨의 목적이 지속적으로 데이터를 보관하는데 있기 때문에 이는 지극히 정상적인 동작이다. 만약 볼륨을 삭제하고 싶다면 docker volume rm 명령어를 사용한다.
$> docker volume rm '볼륨 이름'
■
'풀스택 개발 들여다보기' 카테고리의 다른 글
[Docker] 컨테이너를 이미지로 저장하기 - 도커 이미지 생성 (0) | 2022.03.09 |
---|---|
[Docker] docker 커맨트를 sudo 없이 실행시키기 (0) | 2022.03.07 |
[Docker] docker-compose.yml 파일의 기본 구조 (0) | 2022.03.02 |
[Docker] docker-compose로 도커 명령어 관리하기 (0) | 2022.02.21 |
[Docker] 자주 사용하는 도커 명령어들 (0) | 2022.02.20 |
댓글