본문 바로가기

임베디드 리눅스

docker-compose 활용하기

728x90
반응형

 

안녕하세요. WH입니다.

처음 올리는 글들이 너무 기초적인 내용이라, 이게 뭐가 필요해 하시겠지만

사실 이런 기초적인 것이 정리된 곳이 따로 없더라구요.

그래서 그냥 내가 올리고 말지 이런 생각에 정리를 시작하게 되었습니다.

 

오늘은 docker-compose에 대해서 작성해 볼건데요.

시작하겠습니다. 언젠가 누군가에게 도움이 되길 바라며 오늘도 써봅니다.

docker-compose란?

여러 개의 컨테이너의 실행을 한 번에 관리 할 수 있게 해주는 툴이랍니다. 물론 한 가지 하나의 컨테이너에서 기능을 자동화 하는데 사용할 수도 있겠지요.

 

이전에 다뤘던 글이, make와 makefile, 그리고 docker였을 겁니다. 아마도 다음 글에서 해당 내용들을 묶어서 어떻게 활용할 수 있는지 보여드리도록 할게요. 오늘은 docekr-compose가 뭔지만 알고 갑시다.

 

docker-compose 설치하기

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/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

 

이 3가지 커맨드를 쳐주세요. 에러가 없이 진행되야 하고, 겪었던 에러로는 기존에 docker-compose가 설치되어 있었다면 지우고 다시 설치해 주시길 바랄게요.

docker-compoes 활용방법

1. 각 컨테이너의 Dockerfile 작성

2. docker-compose.yaml 작성

3. docker-compose up 을 통한 실행 ( 참고로 -d 옵션 백그라운드에서 실행을 의미합니다 )

 

dockerfile 작성은 이전에 다루었던 내용이므로 skip하도록 할게요. 간단한 내용이지만, 내용이 궁금하다면 아랫글을 참조해주세요.

2022.01.25 - [임베디드 리눅스] - docker를 활용한 이미지 배포하기( feat. dockfile )

docker-compose.yaml 작성

아무런 내용도 모른다는 가정하에 간단히 간단히 짚고 넘어가도록 하겠습니다.

yaml 이란

우선 용어 하나만 정리하고 갈까요?

 

마크업 언어란

태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한 가지이다 ( 출처 : 위키백과 )

 

Yet Ain't Markup Language 라는 뜻으로 쉽게 설명하면 사람에게 친숙한 데이터 serialization으로 , data serialization은 데이터를 시스템 외부 ( 파일로 쓰거나 전송할 때 )에서 사용하는데요. 확장자는 크게 .yml과 .yaml 두 가지가 있으며 공식 답변에 의하면 두 가지는 같은 확장자이며 3글자 용이 yml 4글자 용이 yaml이라고 생각하시면 될 것 같네요. 뭐 기존 xml과 json과 비교하여 가독성이 좋다는 장점이 있다고 생각하시면 되요. 우선은 간단히 여기까지하겠습니다.

 

저번에 작성한 crosscompile dockerfile을 자동으로 빌드하고 마운트하도록 작성해보겠습니다.

version: "3.9"

services:
  cross:
    build: .
    working_dir: /test
    volumes:
      - .:/test

내용을 조금 들여다 볼까요? 우선 3.9 버전으로 실행되고 cross라는 이름으로 서비스를 실행할 겁니다.

 

build: .

이 옵션은 현재 폴더에 있는 dockerfile을 빌드하란 의미인데요. dockerfile과 docker-compose.yaml이 같은 위치에 있어야겠죠?

 

working_dir: /test

이 부분은 생성된 컨테이너 속에서 작업할 위치를 설정해주는 부분인데요, 사실 해당 부분을 오류 없이 사용하려면 dockerfile 에 RUN mkdir test를 추가해주어야 합니다. 즉 해당 명령어를 통해 작업 위치를 표시해 주게 되죠.

 

volumes:

    - .:/test

마지막으로 마운트해주는 부분입니다. . 은 현재 docker-compose와 dockerfile이 있는 위치 ( 즉 로컬에서 작업 위치 )를 뜻하고, /test는 컨테이너 내의 디렉토리 위치를 뜻합니다. 즉 해당 명령을 통해 현재 로컬의 작업 위치와 컨테이너 내의 test라는 디렉토리가 마운트 됩니다.

 

docker-compose up을 통한 실행

super 권한을 주지 않았다면

 

sudo docker-compose up -d

 

실행하면 되는데, 해당 명령을 통해 docker-compose는 dockerfile을 빌드하고 작업 디렉토리와 컨테이너 내의 /test 폴더를 백그라운드에서 마운트하게 됩니다.

 

정리

이 부분까지 잘 따라 오셨다면,

sudo docker build -t 이름 .

sudo docker run -it -v ~~~~~~~ /bin/bash 와 같은 일 없이,

 

sudo docker-compose up -d

라는 명령 하나만으로 빌드부터 마운트까지 완료됨을 확인할 수 있을거에요!

 

자, 이번 글은 여기까지 입니다. 매우 기초적인 내용이지만 도움이 되길 바라며 이만 들어가겠습니다.

그럼 오늘도 즐거운 하루되시고 읽어주셔서 감사합니다.

728x90
반응형