container 형태로 여러 프로그램, 서비스들을 실행하려고 할 때에는 그 명령어들이 복잡한 이미지(docker images)를 얼마나 customizing 하느냐, 또 얼마나 많은 환경변수등을 추가해서 사용하느냐에 따라 엄청나게 길어질 수 있습니다. 예를 들어 jenkins를 docker container 형태로 실행하려고 할 때에 기본적으로 아래 정도의 명령어를 이용해서 구동하게 될 것입니다.
sudo docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
아마도 이런 과정이 귀찮고 외우기 힘드니, 위 명령어를 shell 로 만들어서 두고 사용하게 될 것 같습니다만, docker 특성상 사용하게 되는 명령어들이 많아, 빠뜨리는 경우도 많고, 또 조금의 변경사항이 발생할 떄 마다 수정하고 실행하는 것 또한 잘 이해가 가지 않습니다. 또한 위 명령어는 그 길이가 길어지게 되면 가독성이 많이 떨어지기 때문에 알아보기도 쉽지 않습니다. 또한 docker 명령어는 기본적으로 root 권한이 있어야 하기 때문에 sudo 를 매번 적는 것 역시 여간 귀찮은 것이 아닙니다.
docker-compose 란..?
이러한 분편함을 해소해 주는 것이 docker-compose 입니다. docker-compose는 parameter 로 설정된 위 정보들을 모두 docker-compose.yml 이르는 파일에 적게 하고(일종의 설정 파일), 이를 이용해서 docker를 실행해 줍니다. 이를 위해서는 docker 이외에도 docker-compose를 설치해야 합니다.
필수사항
우선 docker-compose 를 사용하기 위해서는 다음의 필수 요소들이 설치되어 있어야 합니다.
-
sudo 권한이 있는, root 가 아닌 사용자
이에 대해서는 root 권한만 가지고 있는 것이 아니라 docker 그룹에 사용자를 등록해서 사용하는 것이 조금 더 편리합니다.
sudo usermod -aG docker $USER
$USER 자리에는 내 계정 id 를 직접 넣어도 됩니다.
-
docker 설치
설치
-
current release 를 체크하고, 필요하다면 update 한다.
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
-
아래 명령어로 권한 처리를 합니다.
sudo chmod +x /usr/local/bin/docker-compose
-
버전 확인을 합니다.
docker-compose --version
결과로 아래와 같이 나오면 됩니다.
$ docker-compose --version docker-compose version 1.18.0, build 8dd22a9 $
사용 방법
-
docker-compose.yml 파일 생성
내가 docker 를 실행하고자 하는 폴더에 docker-compose.yml 파일을 생성합니다. 여기서는 mariaDB 에 대한 docker-compose.yml 파일을 예로 들겠습니다.
version: '3.1' services: maria: image: mariadb:latest container_name: "mariadb" restart: always ports: - "63306:3306" volumes: - ~/docker/mariadb/etc/mysql/conf.d:/etc/mysql/conf.d:ro - ~/docker/mariadb/var/lib/mysql:/var/lib/mysql - ~/docker/mariadb/var/log/maria:/var/log/maria environment: - MYSQL_ROOT_PASSWORD=??? - TZ="Asia/Seoul"
-
실행 및 재실행
실행하고자 하는 yml 파일이 있는 위치에서 아래 명령어를 입력합니다. 백그라운드에서 실행을 원하는 경우 -d 옵션을 추가합니다.
docker-compose up docker-compose up -d
-
확인
확인은 docker-compose 보다는 docker 자체 명령어로 하는 것이 직관적이라 그렇게 하고 있습니다.
docker ps -a
-
중지 및 삭제
중지는 stop 파라미터를, 삭제는 rm 파라미터를 주가합니다. 여기서의 삭제는 당연히 image가 아니라 container 입니다. 역시 yml 파일이 있는 위치에서 아래 명령어를 입력합니다.
docker-compose stop docker-compose rm
참고자료 및 출처
기존 tistory 블로그에 적었던 본인의 글을 기준으로 하여 조금 보완하였습니다.
Leave a comment