-
[ docker-compose ]도커 컴포즈가 무엇이고 어떻게 실행하는 것일까?개발일지/docker 2020. 6. 3. 16:40
Docker Compose 란
다중 컨테이너 도커 애플리케이션을 정의하고 동작하게 해주는 툴이다.
YAML 파일로 작성되어지며 작성된 yaml 파일을 읽어 들여 모든 서비스들을 생성 및 시작을 하나의 명령어로 실행할 수 있다.
version : '3.0' services: web: build: . ports: - "3000:3000" networks: - compose-networks mongodb: image: "mongo" ports: - "27017:27017" volumes: - .:/data/db networks: - compose-networks networks: compose-networks:
docker-compose 파일 작성을 해봤는데요 한라인씩 살펴보겠습니다.
version : '3.0'
docker-compose version 명시를 가장 상단에 입력합니다.
버전별로 사용할 수 있는 옵션들이 다를 것입니다.
버전에 따라 사용할 수 있는 옵션을 확인하실 분들은 링크 클릭.
저는 3 버전으로 작성하였습니다.
services :
하나의 애플리케이션에는 여러 개의 서비스들이 연결되어 사용됩니다.
예를 들면 사진을 공유하는 어플리케이션을 만들고자 할 때, 클라이언트 웹 서비스도 필요하고 , 빽단에 사진을 가공하고 DB에 저장시키는 , spring 서버나 node 서버 서비스도 필요하고, DB 서버도 필요하며, 검색엔진도 필요할 수도 있습니다. 이렇게 하나의 어플리케이션에 필요한 서비스들을 services: 하위에 작성합니다.
web: build: . or web: build: context: . dockerfile: ./docker/Dockerfile
docker-compose.yml 파일 내에서도 도커 이미지를 만들 수 있습니다. build 옵션을 주고 현 경로에 docker file 이 있다면 .< 이것으로 해결되고 다른 경로에 있다면 아래 build 옵션을 사용하면 됩니다.
ports: - "3000:3000"
포트 설정입니다.
networks: - compose-networks
해당 어플리케이션내에 같은 네트워크로 구성합니다. compose-networks 는 임의로 생성한 이름입니다. 원하는 이름으로 변경 가능하며 해당 이름의 네트워크는 하단에 추가적으로 다루겠습니다.
참고 ) 같은 어플리케이션내에 작성된 서비스들은 기본적으로 같은 네트워크에 포함되어있다. 즉, 네트워크 옵션은 사용하지 않아도 무관하다. 단 , 다른 어플리케이션과 통신이 되어야 할 때에는 해당 옵션이 필요하다.
mongodb: image: "mongo"
위에 사용한 build를 사용해서 이미지를 만들어 사용할 수도 있지만 docker hub를 통해서 이미지를 받아와서 사용할 수 있다 그럴때에는 image 옵션을 사용한다. image이름 : <tag> 를 사용할수 있지만
tag를 사용하지 않으면 기본적으로 latest를 참조한다.
volumes: - .:/data/db
디비 같은 경우 휘발성 데이터가 아니기 때문에 도커가 종료되고 다시 실행되어도 데이터가 지워지면 안 된다. 하여 DB 데이터를 local 환경의 폴더와 연결하여 파일이 손실되는 것을 막는다.
더 많은 옵션들이 있지만. 이번에는 이 정도만 다루도록 하겠다. 도커 공식 문서에 다양한 옵션을 확인할 수 있으니 확인이 원하신 분은 링크 클릭
이제 docker-compose 파일을 작성하였기 때문에
해당 파일을 실행하여 여러 개의 서비스들을 한 번에 실행해보도록 하겠습니다.
$ docker-compose up -d
위 명령을 통해서 서비스가 동작됨을 확인할 수 있습니다.
$ docker ps
도커 컨테이너들의 리스트를 확인해보시면 2개가 실행 중임을 확인할 수 있습니다.
여기서 확인할 수 있는 것은 <어플리케이션 이름>_<서비스 이름> 으로 이름이 생성된 것을 확인할수 있습니다.
up 명령어에 알아두면 좋은 옵션을 알아보겠습니다.
-d --detach
-
옵션 백그라운드에서 돌아가도록 하는 옵션입니다.
-
해당 옵션이 없이 실행하면 커멘드에서 ctrl+c로 나왔을 때 컨테이너가 종료됩니다.
--build
-
위에서 compose 파일에 build 옵션을 사용한 경우 , 새로운 빌드된 image 가 필요할 때 up --build를 사용해서 실행 시 새롭게 빌드를 시키며 새로운 이미지를 만들어 사용합니다.
그밖에 docker-compose 명령어
$ docker-compose build [option]
-
compose에 사용된 이미지를 새로 build 하는 명령어
$ docker-compose down [option]
-
컴포즈 파일 위치에서 down 명령어를 사용하여 해당하는 어플리케이션을 종료시킵니다.
-
--rmi 옵션 추가 시 'all' 또는 'local' 사용하면 어플리케이션 종료하며 사용된 이미지 삭제합니다.
$ docker-compose exec [option]
-
docker exec와 동일하며 해당 컨테이너로 접속할 수 있다.
$ docker-compose ps [option]
-
실행된 컨테이너들을 볼 수 있다.
$ docker-compose stop [option]
-
실행된 컨테이너들을 종료하는 옵션
$ docker-compose start [option] $ docker-compose restart [option]
-
종료된 컨테이너들을 켜어는 하는 옵션
$ docker-compose rm [option]
-
종료된 컨테이너들을 제거하는 옵션
-
docker-compose down 명령어는 docker-compose stop + docker-compose rm과 같다.
이상 도커 컴포즈를 알아봤습니다.
실습 관련해서 영상으로 남겨봤습니다 확인 원하시는 분은 영상 클릭 :)
다음에는 도커 swarm을 알아보도록 하겠습니다.
'개발일지 > docker' 카테고리의 다른 글
[docker-machine 정리] 도커 머신 으로 aws ec2 에 프로비저닝 하기 (0) 2020.06.13 도커 머신을 활용해 로컬 VM에 프로비저닝 해보자. (1) 2020.06.06 도커 ubuntu 에 설치 하자 (0) 2020.05.10 도커 window 10 에 설치 하자 (0) 2020.05.10 도커 자주 사용되는 명령어 리스트 (0) 2020.05.02 -