MA VPD Tech Blog.

Docker 활용 응용

May 28, 2019 | 3 Minute Read

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 정리 글에서 유용하고 좋은점만 뽑아내어 필요시 업무에 적용하실 수 있기를 바라겠습니다. 감사합니다.



로고