Docker - #3 docker-compose

Joshua Song / 송성현·2020년 3월 20일
0

백엔드

목록 보기
7/8

Introduction

지난 포스트에 이어, 미처 커버하지 못한 docker compose 사용법을 알아보자! 일단 처음 시작하는게 중요하기에, docker compose는 매우 얕고 복잡하지 않게 진행할 예정이다. 이후에 더 심화된 연습을 해볼 생각이다. 어려운 포스트는 또 그때 가서 할 것이다.

Docker-Compose

지금까지 이미지로 컨테이너를 실행하려면 커맨드라인에서 create 이던, run을 통해 컨테이너를 하나하나씩 생성해 실행시켜줘야 했는데, 이러한 불편함을 해결하기 위해 도커 컴포스라는 툴을 사용할 수 있다. 아직 난 도커 초보인 "도보"이기 때문에 정말 간단하게만 테스트를 해볼 생각이다.

설치

도커를 설치했더라도, 도커 컴포즈 툴은 따로 설치해줘야 한다. 나는 리눅스 유저이기 때문에, 리눅스 유저를 위한 방법을 정리해보고자 한다. (맥과 윈도우는 도커 설치시 포함되어 있다고 한다!)

아래의 내용을 터미널에 순서대로 실행해준다

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

도커 컴포즈 설치 방법은 구글에 찾아봐도 많이 나온다!

이렇게 설치한 후, docker-compose -v 를 실행해 잘 설치되었는지 확인해 준다.

실행

도커 컴포스 툴을 한번 사용해보자. 도커 컴포스는 yaml파일을 생성해 사용할 수 있는데 예제를 통해 한번 보자!

파일 생성

먼저 도커 컴포스 툴에 사용할 빈 파일을 하나 만들어준다. 예제 파일의 정석은 docker-compose.yml로 한다. 일단 나는 그렇게 했다. 그러면 이제 이 파일안에 내용을 채워서 한번 실행해보자!

파일 채우기

이번 도커 컴포즈를 통해 2개의 컨테이너를 생성해 실행해 볼 것인데 이름을 봐서 알겠지만, 프록시를 위해 사용하는 nginx와 mariadb를 사용해 web 컨테이너 하나, 데이터베이스 컨테이너 하나를 실행시킬 것이다.

파일설명

  • 먼저 맨 위의 version은 이 파일을 도커 컴포스로 할 때 어떤 버전의 파일 포맷을 사용할 것인지 정의해주는 것인데 현재 자신이 사용하고 있는 도커 컴포즈 버전을 확인한 후 그에 적절한, 알맞는 버전을 적어주어야 한다. 아래의 링크를 참조하면 버전을 비교해주는 테이블이 있다.
    https://docs.docker.com/compose/compose-file/compose-versioning/

  • services: 부분은 눈치챘을 수 있지만, 컨테이너로 돌릴 서비스 목록이다. 나의 경우에는 웹 하나, 데이터 베이스 하나이다.

  • web 안의 사용할 이미지와, 또 사용할 포트도 설정해 줄 수 있다. 만약 사용하고 싶은 이미지가 없을 경우, 도커는 친절하게 자동으로 pull을 받아와 줄 것이다. 원하는 버전이 있다면 숫자로 명시해주면 된다.

  • database 로 나는 mariadb 이미지를 사용하기로 했다. 이미 지난번 연습할 때 받아놓은 최신버전의 mariadb가 있기 때문에 그걸 사용하면 될 것 같았다. volumes는 데이터베이스의 데이터를 저장해놓을 곳을 설정해준다. 현재의 설정은 컨테이너 내에서 저장하는 위치이고 호스트 컴퓨터에 데이터를 저장하고 싶을 경우,

volumes:
  - /my/own/datadir:/var/lib/mysql

이런식으로 바꾸어주거나 원하는 경로를 넣어준다. restart는 컨테이너가 멈췄거나 변화가 있을 때 다시 실행시켜준다(빌드를 다시 해주진 않는다). environment는 원하는대로 환경 설정을 해준다.

파일 실행 명령어

이제 .yml파일의 내용을 채웠다. 이제 터미널에 명령어를 입력해 이 파일을 실행해보자. 먼저 생성해둔 파일이 있는 곳으로 간 후, 아래의 명령어를 실행해 준다.

docker-compose up -d


컨테이너 두 개가 동시에 실행이 된 것을 확인할 수 있다. 그렇다면 이 컨테이너를 한번에 멈추려면?

docker-compose down

up의 반대인 down을 실행시켜 준다.

이렇게 여러 컨테이너를 실행하고, 또 멈출 수 있다.

Scaling

도커 컴포즈는 보통 MSA 아키텍처를 도입해 독립적인 서비스를 따로 구축할 때 사용되기도 하는데 특히 스케일을 사용해 스케일링을 할 수 있다. 실제로 도커에는 scale이라는 커맨드가 있는데, 한 서비스를 위해 실행할 컨테이너의 개수를 정할 수 있는 역할을 한다. 사용방법은 생각보다 간단하다.

Scaling

위에 만들어 놓은 파일을 사용해 스케일링을 해보자. 위의 파일이 한 서비스라고 가정하고, 데이터베이스를 4개로 scale out 시키는 것이다. 명령어는 비슷하다.

docker-compose up -d --scale database=4

직관적인 명령어는 --scale로 스케일을 한다는 의미이고 service안의 정의한 데이터베이스를 4개로 따로 실행하겠다는 의미이다. 이렇게 터미널에 돌리면 어떠한 결과가 나올지 보자.

보면 아까와 비슷하게 컨테이너가 실행되지만 데이터베이스 컨테이너만 4개가 실행된 것을 볼 수 있다. 이런식으로 원하는 컨테이너를 여러 개 실행시켜 서비스를 스케일 할 수 있다. 이런식으로 스케일을 잘 활용한다면 Microservice Architecture를 더 효율적으로 도입할 수 있을 것으로 보인다.

Conclusion

사실 도커 이미지 생성도 이 포스트에 이어서 할까 했는데 공부하다 보니 생각보다 양이 많아서 아예 새로운 포스트를 하나 생성해야 할 것 같다. 아직 걸음마 수준이지만 도커를 조금씩 해보고 있다. 상당히 기능도 많고 또 강력하다. 그리고 그렇게 유명한데 생각보다 어렵지 않은 것 같다. 컴포스를 통해 최근에 알게 된 MSA 도입에 도움이 될 것 같다.

도커 이미지 생성은 도커파일로 하는데 간단하게만 해보았지만 조금 더 복잡한 코드를 지닌 파일로도 해보고 싶어 좀 더 포스트 양을 늘릴 계획이다. 음...도커 컴포스 강의도 몇개보고 시간도 들였는데 막상 내 포스트를 보니 별로 양이 없다 ㅋㅋㅋㅋ 허무...도커 이미지 생성이 마지막이다!

참조
https://stackoverflow.com/questions/52698909/mysql-docker-container-exited-with-code-1
https://docs.docker.com/compose/compose-file/compose-versioning/
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
https://m.blog.naver.com/islove8587/220548900044
https://www.youtube.com/watch?v=HUpIoF_conA
https://github.com/10up/wp-local-docker/issues/58

profile
Grow Joshua, Grow!

0개의 댓글