Docker 활용 응용
Docker 활용 (3/3) - 응용
작성 2019년 5월 28일 김경호
1. Docker Compose 란
우리가 컨테이너를 생성할때마다 매번 긴~ 커멘드 입력을 하기 귀찮을 때 docker-compose를 사용할 수 있습니다. ʘ ͜ʖ ʘ 흔히 사용하는 쉘스크립트 파일처럼 약속된 형식의 docker-compose.yml 파일을 만든 후 간단한 명령어를 통해 컨테이너를 생성하는 것이 docker-compose라 할 수 있습니다.
실행하고 종료하는 명령도 간단 합니다. docker-compose.yml 파일이 있는 디렉토리에서
항목 | 명령어 |
---|---|
실행 | docker-compose up -d |
종료 | docker-compose down |
위의 명령어를 입력해주시면 끝. 참고로 실행은 컨테이너를 생성 후 실행 시키는 것이고 종료는 컨테이너를 중지 후 삭제하는 것이기 때문에 종료할때는 신중하고 생각 후 명령어를 입력해 주세요. 머리보다 손이 빨랐다간 기껏 만들어놓은 컨테이너가 삭제 됩니다.
2. Docker Compose 설치
기존 Docker를 설치했을 때처럼 인터넷이 연결된 상태에서 다음의 명령어를 수행 합니다.
Docker Compose 설치
$ curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
Docker Compose 실행 명령어 등록
$ chmod +x /usr/local/bin/docker-compose
설치 확인
$ docker-compose version
설치 확인 명령어를 입력 했을때 다음과 같은 화면이 나오면
설치 완료 입니다.
3. docker-compose.yml 파일 작성하기
docker-compose.yml 파일은 docker-compose를 실행하는데 필요한 쉘스크립트 같은 파일 입니다. 파일을 작성하는데 정해진 형식이 있기 때문에 문법이 틀리거나 오타가 있다면 문제가 생기니 이 부분의 작성은 꼼꼼하게 해주세요.
docker-compose.yml 파일 작성의 예로 우리가 자주쓰는 마리아DB + 톰캣7 환경을 구성해 보았습니다.
# 사용할 Docker Compose 문법의 버전을 정의,
version: '3'
# 생성할 컨테이너 서비스의 목록,
services:
# 마리아DB 컨테이너의 이름을 [db]로 설정.
db:
# 컨테이너를 생성할 이미지의 이름.
image: mariadb
# 네트워크 모드. db는 모드를 [bridge]로 고정.
network_mode: bridge
# 마리아DB 환경 변수. 초기 [root]계정 패스워드는 [markany1@]로 한다.
environment:
MYSQL_ROOT_PASSWORD: markany1@
# 외부에 노출할 포트를 3301로 지정.
expose:
- "3301"
# 호스트 포트 3301을 컨테이너 3306 포트로 포워딩.
ports:
- "3301:3306"
# 컨테이너가 실행 중 중단이 되었을 때 다시 시작.
restart: always
# 톰캣7 컨테이너의 이름을 [tomcat]로 설정.
tomcat:
# 컨테이너를 생성할 이미지의 이름.
image: chenmins/tomcat-centos:jdk8tomcat7
# 네트워크 모드. tomcat은 모드를 [host]로 고정.
network_mode: host
# 호스트의 ./MAP 경로를 컨테이너의 /root/gis/MAP 경로로 rw읽기쓰기 마운트.
volumes:
- ./MAP:/root/gis/MAP:rw
# 컨테이너 생성 후 해당 커멘드를 자동 입력.
command: ["/opt/tomcat/bin/catalina.sh","run"]
# 외부에 노출할 포트를 9090으로 지정.
expose:
- "9090"
# 호스트 포트 9090을 컨테이너 9090 포트로 포워딩.
ports:
- "9090:9090"
# 컨테이너가 실행 중 중단이 되었을 때 다시 시작.
restart: always
위의 docker-compose.yml을 보시면 [db]와 [tomcat] 컨테이너를 위와 같은 주석 설명의 옵션으로 생성하겠다는 겁니다. 혹시나 포트나 마운트 디렉토리가 변경될 예정이면 위의 내용을 약간씩 수정하여 사용하시기 바랍니다.
4. Docker Compose 사용
위에서 만든 docker-compose.yml 파일과 Docker Compose 실행 명령어를 이용하여 컨테이너를 생성해 봅니다. 주의 사항은 반드시 명령어를 실행하는 디렉토리 내에 위에서 생성한 docker-compose.yml 파일이 존재해야 합니다.
Docker Compose 실행
$ docker-compose up -d
Docker Compose를 이용하여 컨테이너를 생성한 뒤 도커 프로세스를 확인 합니다. 기존 Docker에 해당 컨테이너 이미지가 없다면 자동으로 다운로드 후 컨테이너가 생성 됩니다.
$ docker ps -a
그럼 위와 같이 STATUS가 Up인 상태로 잘 실행 되어 있는 것을 확인할 수 있습니다. 이 상태에서 해당 컨테이너로 붙어 DB교체나 war 수정 등을 하시면 됩니다. 참고로 Docker 자체가 시작 서비스로 등록되어 있을 시 해당 컨테이너도 시스템 시작시 자동으로 실행이 됩니다.
Docker Compose 중지
$ docker-compose down
위의 화면을 보시면 기존에 Docker Compose로 생성하였던 컨테이너들이 중지 후 삭제 되어있는 것을 보실 수 있습니다. 해당 명령어는 컨테이너 중지 + 삭제이니 기껏 설정 해놓은 컨테이너가 날라가지 않도록 유의해 주세요. d( ̄▽ ̄o)
5. Docker 정리 끝
기존 업무 특성상 폐쇄망 서버 자체에 DB와 톰캣을 설치하는 형식에서 이 Docker가 얼마나 쓰일지 모르겠습니다. 하지만 서버를 회사에서 준비 해가는 경우 정해진 Docker 컨테이너 생성은 유용하게 쓰일것도 같습니다. 왜냐하면 이제 영상반출만 셋팅이 필요한것이 아니라 선별관제와 같이 다양한 환경으로 구성된 모듈도 한 서버에서 품어야하기 때문 입니다. 아직 시작 단계지만 이번 Docker 정리 글에서 유용하고 좋은점만 뽑아내어 필요시 업무에 적용하실 수 있기를 바라겠습니다. 감사합니다.