안녕하세요. 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
라는 명령 하나만으로 빌드부터 마운트까지 완료됨을 확인할 수 있을거에요!
자, 이번 글은 여기까지 입니다. 매우 기초적인 내용이지만 도움이 되길 바라며 이만 들어가겠습니다.
그럼 오늘도 즐거운 하루되시고 읽어주셔서 감사합니다.
'임베디드 리눅스' 카테고리의 다른 글
네트워크 프로그래밍 - OSI 7계층 (0) | 2022.01.28 |
---|---|
네트워크 프로그래밍 - 인터넷 프로토콜 스택 4계층 (0) | 2022.01.28 |
MCU? MPU? CPU? 그게 뭔데 (0) | 2022.01.27 |
make 는 무엇이며 왜 사용하는 것일까 2 (0) | 2022.01.26 |
make 는 무엇이며 왜 사용하는 것일까1 (0) | 2022.01.25 |