도커 - 1

업데이트:

Docker란

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다.
그게 무슨말일까?

도커가 필요한 이유

예를 들어, 내가 nodejs로 express app을 열심히 만들어 돌리고 있다고 하자.
이걸 모종의 이유로 다른 서버에서 구동하고 싶은데, 다른 서버에는 어떻게 올릴 수 있을까?

기존의 방법이라면 신규 서버에서

  1. side-effect 없도록 기존 서버와 OS 일치시키기…
  2. yum install nodejs…
  3. cpy package.json, app…
  4. npm install -y…
  5. …etc

정말 조그만한 express app인데도 이런 귀찮은 절차가 필요하다.
그래서 도커가 나타났다.

도커는 VM이라고 생각하면 편하다.
(사실 프로세스 단위 컨테이너 격리 기술이어서 오버헤드가 큰 VM과는 비교할 수 없다.)

base-image라고 하는 리눅스가 있고, 그 리눅스 위에 우리가 필요한 절차들을 실행시킨다.
언제? Dockerfile의 빌드시점에..

아래와 같이 수행된다.

  1. DockerFile이라는 파일에 위 절차를 작성한다.
  2. 만든 DockerFile을 빌드해, image로 만든다.
  3. image로 Container를 생성한다.

혹자는 이 단계들을 도넛 굽기에 비유한다.

  1. 도넛 레시피를 작성한다.
  2. 도넛 레시피를 서점에 출간한다.
  3. 도넛을 만든다.

이 만들어질 도넛은 위의 레시피대로 잘 만들어질 것이다.

실제 형상

  1. Dockerfile 구조
    1
    
    vi Dockerfile
    
    1
    2
    3
    4
    5
    
    # Dockerfile의 내용
    FROM mongo:6.0.5               # mongo 6.0.5 사용
    MAINTAINER wichan7@naver.com   # Dockerfile의 관리자를 나타내는 metadata
    ARG MONGO_PORT="27017"         # MONGO_PORT 변수를 27017로 지정
    EXPOSE $MONGO_PORT             # 해당 이미지의 개방될 포트에 대한 힌트를 준다.
    
  2. 이미지 생성 명령어
    1
    
    docker build -t wichan-mongo:0.0.2 {directory}   
    
  3. 이미지 기반으로 container 생성
    1
    
    docker run --name mongo-primary -d -p 27017:27017 wichan-mongo:0.0.2  
    
  4. container 내부 접근
    1
    
    docker exec -it {containername} /bin/bash  
    

추후 해야할 일

mongo-primary, mongo-secondary, mongo-hidden 또는 mongo-arbiter을 통해 이중화 및 backup 구성한다.

k8s container spec에 pod env를 작성하면, 컨테이너 구동 시점에 run.sh가 실행될 것이므로 yaml에서 설정한 설정 파일로 primary, secondary, arbiter가 자동 수행되도록 구성할 것이다.

댓글남기기